AWSのElasticFileSystemの速度について

エフ
2022-11-30
2022-11-30

弊社ではAWSサービスで負荷分散のための複数台構成をとるときに
ファイル共有のために、それぞれのEC2にコンテンツ領域としてEFSをファイルマウントすることが多いのですが、
そのファイルシステムの速度について検証してみました。

まずはコマンドで生成した100MBのファイルについて
FTPのアップロードとダウンロードの速度を計測してみました。

比較対象として

・AWS EC2 EFSマウント
・AWS EC2 腹持ちのEBS
・AWS EC2 別EC2のEBSをNFSマウント
・弊社の自社サーバー VPS HDD構成

上記の4つについて検証いたしました。
結果は以下の通り

■AWS EC2 EFSマウント
アップロード
8816.94Kbyte/sec

ダウンロード
4961.59Kbyte/sec

■AWS EC2 腹持ちのEBS
アップロード
9442.28Kbyte/sec

ダウンロード
6244.77Kbyte/sec


■AWS EC2 別EC2のEBSをNFSマウント
アップロード
8700.50Kbyte/sec

ダウンロード
6597.74Kbyte/sec


■弊社の自社サーバー VPS HDD構成
アップロード
7754.40Kbyte/sec

ダウンロード
5593.05Kbyte/sec


うーん。100MBのワンファイルのためか、どの環境もそこまで違いは出ませんね。
このぐらいの差であれば、使用していて特に違和感もなさそう。


ではちょっと視点を変えてみましょう。
NFSマウント等は細かいファイルの書き込みなどが弱いと聞いたことがあります。

そこで以下のPHPファイルをそれぞれの環境に設置いたしました。

------------------------------------------------------------------
<?php
$time_start = microtime(true);

$log = __DIR__ ."/test.log";

file_put_contents($log, "");

for ($i = 1; $i <= 10000; $i++) {
$a = fopen($log, "a");
@fwrite($a, "ABCDEFG");
fclose($a);
}

echo "\n";
echo "---time-----------";
$time = microtime(true) - $time_start;
echo "{$time} 秒";
------------------------------------------------------------------

Web経由で上記ファイルにアクセスすることで、「ABCDEFG」を10000回ファイルに書き出し
その時間を計測いたします。


さてそれぞれの環境での計測結果が以下です。念のため5回ずつ実施しました。


■AWS EC2 EFSマウント
62.559815168381 秒
62.874764919281 秒
63.49289393425 秒
62.133101940155 秒
63.294054031372 秒


■AWS EC2 腹持ちのEBS
0.070847988128662 秒
0.070764064788818 秒
0.070941925048828 秒
0.070507049560547 秒
0.070966005325317 秒


■AWS EC2 別EC2のEBSをNFSマウント
14.847743988037 秒
12.784628868103 秒
13.536318778992 秒
12.677500963211 秒
12.700269937515 秒


■弊社の自社サーバー VPS HDD構成
0.13513493537903 秒
0.12462306022644 秒
0.16060209274292 秒
0.14376091957092 秒
0.14943814277649 秒


やばいです。想定以上の差が出ました。
EC2の腹持ちのEBSや、弊社サーバーだとほぼ一瞬で完了しますが、
EFSだと1分以上かかります。
やはり細かい書き込みを大量にするには向いていないようです。
EFS自体は複数台構成のファイル共有には便利なシステムですが、コンテンツ内容によっては
構成として向いてないかもしれません。

回避手段として、少しマシになるのが、別建てのEC2のEBSにNFSマウントする方法。
NFSマウントしたためにやはり15秒ほどかかっていますが、それでもEFSよりはましになってますね。

今後も検証や検討が必要になりそうです。本日はここまで。