WordPress を AWS Fargate と EFS の組み合わせで動作させてみたところ、全体的に動作が遅く感じたので、Fargate から EFS のパフォーマンスをテストしてみました。
目次
- 検証用の Fargate と EFS をセットアップする
- ランダム書き込みのベンチマークテストを実行する
- ランダム読み込みのベンチマークテストを実行する
- 今回の EFS の条件では、ランダムの読み書きの性能はそれほど高くないのかもしれない
検証用の Fargate と EFS をセットアップする
検証用として以下を設定しました。一番安い料金パターンを想定しました。
- Fargate
- Platform version 1.4.0
- vCPU: 0.25
- Memory: 0.5 GB
- EFS
- Performance mode: General Purpose
- Throughput mode: Bursting
- Availability zone: Regional
- EFS に保存されているデータは WordPress 6.6.2 インストール後に作成されたファイル
ランダム書き込みのベンチマークテストを実行する
Fargate で起動するタスクのコンテナに SystemManager を使ってログインします。
以下のようにfio
コマンドで以下のようにランダム書き込みのテストを実行します。
fio --directory=./ --name fio_write_test_file --ioengine=psync --direct=1 --rw=randwrite --bs=16k --size=1G --numjobs=1 --time_based --runtime=180 --group_reporting --norandommap
平均 IOPS は 118 で、帯域幅は 1939kB/s でした。
write: IOPS=118, BW=1893KiB/s (1939kB/s)(333MiB/180002msec); 0 zone resets
平均レイテンシは 8.44 ミリ秒となっています。
clat (msec): min=5, max=259, avg= 8.44, stdev= 2.55
lat (msec): min=5, max=259, avg= 8.44, stdev= 2.55
書き込みの総データ量は 180 秒 で 349 MBでした。
io=333MiB (349MB)
結果全体です。
fio_write_test_file: (g=0): rw=randwrite, bs=(R) 16.0KiB-16.0KiB, (W) 16.0KiB-16.0KiB, (T) 16.0KiB-16.0KiB, ioengine=psync, iodepth=1
fio-3.30
Starting 1 process
fio_write_test_file: Laying out IO file (1 file / 1024MiB)
Jobs: 1 (f=1): [w(1)][100.0%][w=1968KiB/s][w=123 IOPS][eta 00m:00s]
fio_write_test_file: (groupid=0, jobs=1): err= 0: pid=3905: Sun Sep 29 06:11:59 2024
write: IOPS=118, BW=1893KiB/s (1939kB/s)(333MiB/180002msec); 0 zone resets
clat (msec): min=5, max=259, avg= 8.44, stdev= 2.55
lat (msec): min=5, max=259, avg= 8.44, stdev= 2.55
clat percentiles (usec):
| 1.00th=[ 6128], 5.00th=[ 6521], 10.00th=[ 6718], 20.00th=[ 7111],
| 30.00th=[ 7439], 40.00th=[ 7767], 50.00th=[ 8094], 60.00th=[ 8455],
| 70.00th=[ 8717], 80.00th=[ 9241], 90.00th=[10290], 95.00th=[11600],
| 99.00th=[15664], 99.50th=[17433], 99.90th=[22938], 99.95th=[27657],
| 99.99th=[40633]
bw ( KiB/s): min= 896, max= 2112, per=99.98%, avg=1893.90, stdev=121.47, samples=359
iops : min= 56, max= 132, avg=118.34, stdev= 7.59, samples=359
lat (msec) : 10=87.69%, 20=12.06%, 50=0.24%, 500=0.01%
cpu : usr=0.20%, sys=0.34%, ctx=21511, majf=0, minf=7
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 rwts: total=0,21300,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
WRITE: bw=1893KiB/s (1939kB/s), 1893KiB/s-1893KiB/s (1939kB/s-1939kB/s), io=333MiB (349MB), run=180002-180002msec
ランダム読み込みのベンチマークテストを実行する
続いて、ランダム読み込みのテストを実行します。
fio --directory=./ --name fio_read_test_file --direct=1 --rw=randread --bs=16k --size=1G --numjobs=1 --time_based --runtime=180 --group_reporting --norandommap
平均 IOPS は 372 で、帯域幅は 6,096 kB/s でした。
read: IOPS=1342, BW=5371KiB/s (5500kB/s)(315MiB/60001msec)
平均レイテンシは 2.68ミリ秒でした。
clat (usec): min=505, max=27013, avg=2678.69, stdev=1539.90
lat (usec): min=505, max=27013, avg=2679.30, stdev=1540.07
読み込みの総データ量は 180 秒で 1,097 MB でした。
io=1046MiB (1097MB)
結果全体です。
fio_read_test_file: (g=0): rw=randread, bs=(R) 16.0KiB-16.0KiB, (W) 16.0KiB-16.0KiB, (T) 16.0KiB-16.0KiB, ioengine=psync, iodepth=1
fio-3.30
Starting 1 process
fio_read_test_file: Laying out IO file (1 file / 1024MiB)
Jobs: 1 (f=1): [f(1)][100.0%][r=7847KiB/s][r=490 IOPS][eta 00m:00s]
fio_read_test_file: (groupid=0, jobs=1): err= 0: pid=3935: Sun Sep 29 06:26:02 2024
read: IOPS=372, BW=5953KiB/s (6096kB/s)(1046MiB/180003msec)
clat (usec): min=505, max=27013, avg=2678.69, stdev=1539.90
lat (usec): min=505, max=27013, avg=2679.30, stdev=1540.07
clat percentiles (usec):
| 1.00th=[ 578], 5.00th=[ 619], 10.00th=[ 652], 20.00th=[ 758],
| 30.00th=[ 2442], 40.00th=[ 2671], 50.00th=[ 2900], 60.00th=[ 3064],
| 70.00th=[ 3261], 80.00th=[ 3490], 90.00th=[ 4146], 95.00th=[ 4752],
| 99.00th=[ 7635], 99.50th=[ 9110], 99.90th=[12649], 99.95th=[14484],
| 99.99th=[22152]
bw ( KiB/s): min= 4160, max= 9408, per=99.96%, avg=5951.43, stdev=1151.85, samples=359
iops : min= 260, max= 588, avg=371.94, stdev=71.99, samples=359
lat (usec) : 750=19.37%, 1000=5.76%
lat (msec) : 2=1.98%, 4=60.85%, 10=11.71%, 20=0.32%, 50=0.01%
cpu : usr=0.43%, sys=0.59%, ctx=67409, majf=1, minf=12
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 rwts: total=66975,0,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
READ: bw=5953KiB/s (6096kB/s), 5953KiB/s-5953KiB/s (6096kB/s-6096kB/s), io=1046MiB (1097MB), run=180003-180003msec
今回の EFS の条件では、ランダムの読み書きの性能はそれほど高くないのかもしれない
EFS のパフォーマンスのテストとして fio のオプションが適切ではない可能性もありますが、全体的に数値が低めに出ました。
EFS はデータ量やオプションによって性能が変わるようです。詳細は Amazon EFS performance - Amazon Elastic File System を参照。Fargate の CPU も低すぎた可能性があります。条件を変えて確認をしようと思います。