かなり改めてのなのですがS3マウントさせて利用しているフォルダをEFSへ変更する事情があったので性能比較してみるかとやってみました。
なんだかんだで「s3fs」と「goofy」の比較もついでにしました。
今回は環境構築手順については割愛。
検証条件
リージョン:東京
インスタンスタイプ:M5a.large
EC2からEFS/S3(s3fs)/s3(goofys)をマウント。S3は同一バケットをマウントしている。
EFS/S3ともに暗号化あり
s3fs version : 1.85
goofys version :
検証方法
各マウントポジションに対して「fio」「dd」コマンドでの計測と複数個のファイル作成とファイル表示の時間を計測
結果
「fio」コマンド
- EFSの場合
# fio --directory=/mnt/efs --name fio_test_file --direct=1 --rw=randread --bs=4k --size=1G --numjobs=4 --time_based --runtime=180 --group_reporting --norandommap fio_test_file: (g=0): rw=randread, bs=4K-4K/4K-4K/4K-4K, ioengine=psync, iodepth=1 ... fio-2.14 Starting 4 processes fio_test_file: Laying out IO file(s) (1 file(s) / 1024MB) fio_test_file: Laying out IO file(s) (1 file(s) / 1024MB) fio_test_file: Laying out IO file(s) (1 file(s) / 1024MB) fio_test_file: Laying out IO file(s) (1 file(s) / 1024MB) Jobs: 4 (f=4): [r(4)] [100.0% done] [4376KB/0KB/0KB /s] [1094/0/0 iops] [eta 00m:00s] fio_test_file: (groupid=0, jobs=4): err= 0: pid=2891: Mon Mar 18 05:58:47 2019 read : io=778452KB, bw=4324.7KB/s, iops=1081, runt=180005msec clat (msec): min=1, max=154, avg= 3.70, stdev= 1.59 lat (msec): min=1, max=154, avg= 3.70, stdev= 1.59 clat percentiles (usec): | 1.00th=[ 2192], 5.00th=[ 2352], 10.00th=[ 2480], 20.00th=[ 2672], | 30.00th=[ 2896], 40.00th=[ 3088], 50.00th=[ 3280], 60.00th=[ 3536], | 70.00th=[ 4640], 80.00th=[ 4832], 90.00th=[ 5024], 95.00th=[ 5216], | 99.00th=[ 6496], 99.50th=[ 8256], 99.90th=[17280], 99.95th=[27776], | 99.99th=[52480] lat (msec) : 2=0.02%, 4=63.97%, 10=35.69%, 20=0.24%, 50=0.07% lat (msec) : 100=0.01%, 250=0.01% cpu : usr=0.23%, sys=0.39%, ctx=194650, majf=0, minf=39 IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% issued : total=r=194613/w=0/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0 latency : target=0, window=0, percentile=100.00%, depth=1 Run status group 0 (all jobs): READ: io=778452KB, aggrb=4324KB/s, minb=4324KB/s, maxb=4324KB/s, mint=180005msec, maxt=180005msec
2 . S3(s3fs)の場合
エラーで計測できず(S3に対してはできない様子)
3 . S3(goofys)の場合
エラーで計測できず(S3に対してはできない様子)
「dd」コマンド
# dd if=/dev/zero of=ddtest bs=1M count=1000
各マウントポジションへ移動して実行
1 . EFSの場合
1048576000 bytes (1.0 GB) copied, 9.32339 s, 112 MB/s
2 . S3(s3fs)の場合
1048576000 bytes (1.0 GB) copied, 15.1685 s, 69.1 MB/s
3 . S3(goofys)の場合
1048576000 bytes (1.0 GB) copied, 7.03157 s, 149 MB/s
ファイル作成
# i=1; time while [ $i -le 500 ] > do > touch goofy_test_$i > /dev/null 2>&1 > i=$((i+1)) > done
各マウントポジションへ移動して実行
1 . EFSの場合
real 0m7.806s user 0m0.303s sys 0m0.082s
2 . S3(s3fs)の場合
real 1m47.808s user 0m0.338s sys 0m0.082s
3 . S3(goofys)の場合
real 0m34.765s user 0m0.348s sys 0m0.078s
ファイル一覧表示
time ls -laR /path/to/mount > /dev/null
1 . EFSの場合
real 0m0.071s user 0m0.003s sys 0m0.003s
2 . S3(s3fs)の場合
real 0m0.707s user 0m0.019s
3 . S3(goofys)の場合
real 0m1.073s user 0m0.028s sys 0m0.061s
まとめ
アバウトな検証ですけどざっくりと知るぶんには十分でしょうか。
goofysはやはりはやいですがs3fsも読み取り速度あがったんですかね?こんなに早かったイメージないんですが。。
でもEFSが東京リージョンで利用できる今、S3をマウントさせてまで使う必要性はないかな。
マネージドサービスですし、なにより導入が簡単です。なんだかんだでS3使うにはインストールに必要なモジュールが多いです。 EFSならユーティリティーツールで一発です。
もうちょっと踏み込んでやるならログをEFSに吐き出して書き込めきれるかとかスクリプト置いて読み込めるかとか画像とかとかやるべきでしょう。I/O的にはそこそこ大丈夫なきもしますが。
とりあえずはこのくらいで。