AWS EFSのパフォーマンス設定についてのメモ

AWS EFSをバーストモードで使っていたら、クレジットを使い果たしそうになるという事態になった。 プロビジョンドスループットのモードに設定して事なきを得たが、プロビジョンドスループットは、東京リージョンで、 1MB/s あたり7.2USDかかる。

こうなった原因は、サイズ0のファイルを置いて、 複数台のEC2インスタンスからtouch するだけに使っていたため。

EFSのボリューム使用サイズが10GiB以下の場合、ベースラインスループットは0.5MiB/sなのに大して、バーストスループットは100MiB/sであり、 こういう使い方をしていると、盛大にクレジットを消費していくことがわかった。

プロビジョンドスループットモードに変更して気をつけないといけないのは、バーストできないということで、10MiB/s確保する設定にした場合、ここで頭打ちとなる。 バースト時に100MiB/sで動けていたのに対して、大きくスループットが落ちるという点で困るケースがありそう。

EFSはワークロードに合わせて、細やかなパフォーマンス設定が必要になるイメージ。 今回なんかは、プロビジョンドスループットモードにするより、バーストモードのまま、使用サイズによってベースラインスループットを上げる方が、 コスト、パフォーマンスともメリットがありそう。

試しに、EFS を 256GiB 使用した状態にして、 tc コマンドで帯域制限をかけ、 dd で書き込んだ際の消費クレジットのメトリクスを観察すると、 ベースラインスループットが 12.5MiB/sに上げられたようで、10MB/s で書き込むとクレジットは減らないが、15MB/s で書き込むとクレジットが減った。

tc コマンド使い方

$ tc qdisc add dev eth0 root tbf limit 30Mb buffer 1Mb rate 10Mbps
$ LANG=C dd of=/mnt/efs/dummy1 if=/dev/zero bs=16M count=16
16+0 records in
16+0 records out
268435456 bytes (268 MB) copied, 26.9938 s, 9.9 MB/s
$ sudo tc qdisc del dev eth0 root