AWS FargateからEFSのパフォーマンスをテストする

Amazon EKS

WordPress を AWS Fargate と EFS の組み合わせで動作させてみたところ、全体的に動作が遅く感じたので、Fargate から EFS のパフォーマンスをテストしてみました。

目次

  1. 検証用の Fargate と EFS をセットアップする
  2. ランダム書き込みのベンチマークテストを実行する
  3. ランダム読み込みのベンチマークテストを実行する
  4. 今回の 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 も低すぎた可能性があります。条件を変えて確認をしようと思います。

-技術ブログ
-