はじめに
先般、Nextcloud におけるファイルスキャン速度を比較してみた の記事を書きながら、「そういえば、ストレージの種類でもパフォーマンス変わるんじゃないか?」と思いたち、ざっくり検証してみることにしました。
今回は、Amazon EBS の種類で Nextcloud のファイルスキャンコマンド occ files:scan
のパフォーマンスがどれほど変化するのかを確認してみました。
検証の条件
Nextcloud サーバー環境
- Nextcloud アプリケーションのバージョン
- Nextcloud: 17.0.1
- ミドルウェアのバージョン
- PHP: 7.3
- MariaDB: 10.4
- サーバー構成: Nextcloud 本体、データベース等を含めた1台のオールインワン。
- サーバー環境: AWS EC2(CentOS7、M5.large)+EBS(500GB)
比較対象の EBS の種類
- EBS 汎用 SSD (gp2) ※IOPS:最大1,500
- EBS マグネティック ※IOPS:最大500
- EBS プロビジョンド IOPS SSD (io1) ※IOPS:最大3,000
※「スループット最適化 HDD (st1)」と「Cold HDD (sc1)」はルートボリュームに設定できないため今回は対象から除外しました。時間があったら環境をそろえるなどして改めて検証してみます。
検証ファイル/フォルダ数
- フォルダ数: 41,732
- ファイル数: 313,860
- 合計ファイルサイズ: 3,075 MB
検証方法
- テストファイル/フォルダ群を Nextcloud サーバの規定ディレクトリに配備し、
occ files:scan [アカウント名]
コマンドでファイル/フォルダの同期を行う。 - テストは3回行って、実行平均時間で比較する。
検証結果
実行時間 (汎用 SSD) | 実行時間 (マグネティック) | 実行時間 (プロビジョンド IOPS SSD) | |
---|---|---|---|
1 | 11分44秒 | 11分34秒 | 11分20秒 |
2 | 11分54秒 | 12分21秒 | 11分32秒 |
3 | 11分49秒 | 11分56秒 | 11分47秒 |
平均 | 11分49秒 | 11分57秒 | 11分33秒 |
※平均値としては、プロビジョンド IOPS SSD ⇒ 汎用 SSD ⇒ マグネティック の順という、まぁ期待通りの結果とはなりましたが、IOPS 性能を考えるとそれほど大きな違いとはなりませんでした。
考察、あとがき
今回は、occ files:scan
をシングルタスクで実行していることから、処理内容に対して IOPS 性能に余裕があり、大きな差が見えづらかったと考えます。
EBS のメトリック情報を見る限りでは、処理開始から前半は 高い IOPS 値でしたが、後半はそれほど IOPS 値が上がっておらず、ディスクI/Oが少ない小さな処理が続いていたと思われます。ここではおそらくデータベースにフォルダ/ディレクトリ情報をこまごま INSERT し続けているんだと思われます。
次の機会では、occ files:scan
を多重実行してみて比較をしてみようと思います。
EBS の種類もいろいろあるため選択に迷うこともあるかと思います。とりあえず迷ったらいったん汎用 SSD を選択するのが無難だと思います。
で、性能試験してみて、IOPS が頭打ちになるような傾向となったら、
- SSD の容量を増やして IOPS 性能を上げる
- プロビジョンド IOPS SSD に変更してみる
といった対策になるでしょうか。
マグネティックは、容量単価はルートボリュームにできる種別の中では最安ですが、容量単価のほかに I/O 100万回単位の単価もプラスされますので、開発環境やちょっとした動作検証での用途で使う程度がおすすめですね。