[AWS] AWSのストレージサービスって表記通りのパフォーマンス出てます???調べてみた!

先に結論を言うと、表記通りのパフォーマンスが出てます!解散!

はじめに

AWSで提供されているストレージサービスのスループットやIOPSがちゃんと表記通りになってるかきちんと確認したことはありますか?

EBSやEFSなんかはあくまでネットワーク通信を用いてデータのやり取りを行なっているため、通信回線などの何らかのボトルネック要因があると性能通りの性能が発揮できないなんてことはあるかもしれませんね。

ではEBSとEC2及びネットワーク帯域によるバランスが取れている状態であれば、EBSはきちんと表記通りの性能が出ているのでしょうか

昔主流であったEBS(Magnetic)では性能はベストエフォート型だったため、最近のgb2/gb3がどうなのか気になったのでパフォーマンステストをしてみることにしました。

ベンチマークコマンド

今回はfioコマンドとddコマンドの2種類でベンチマークをとることにしました。

fioコマンドではブロックサイズを小さく(–bs=4k)することでIOPSを測定しますが、このままだとスループットが上限まで出ないのでスループット測定ようにブロックサイズを大きく設定(–bs=128k)した状態でも実行しました。

# ランダム書き込み(IOPS測定用)
$ sudo fio --directory=<ディレクトリのパス> --name fio_test_file --direct=1 --rw=randwrite --bs=4k --size=1G --numjobs=4 --time_based --runtime=180 --group_reporting --norandommap

# ランダム読み込み(IOPS測定用)
$ sudo fio --directory=<ディレクトリのパス> --name fio_test_file --direct=1 --rw=randread --bs=4k --size=1G --numjobs=4 --time_based --runtime=180 --group_reporting --norandommap

# ランダム書き込み(スループット測定用)
$ sudo fio --directory=<ディレクトリのパス> --name fio_test_file --direct=1 --rw=randwrite --bs=128k --size=1G --numjobs=4 --time_based --runtime=180 --group_reporting --norandommap

# DD書き込み
$ dd if=/dev/zero of=<ディレクトリのパス> bs=1M count=3000

# DD読み込み
$ dd if=<> of=/dev/null

検証環境

◆c5a.2xlarge
CPU: AMD EPYC 7R32 * 8コア
EBS : gp3 / 3000IOPS / スループット125MiB/s

以前にfioコマンドとddコマンドでベンチマークをした際にt2.microでコマンドを投げたところインスタンス性能がボトルネックになってしまっていたので、今回はある程度大きなサイズをつかます。

ベンチマーク結果

最初に結論を述べていますが、fioコマンドの結果では表記通りのパフォーマンスが出ていることがわかります。

ただしddコマンドの実行結果では、スループット以上の速度でデータ転送が行われていることがわかります。
fioコマンドはベンチマークとして最適なコマンドなのですが、対してddコマンドは性能評価のためのコマンドではありません
ddコマンドでは何かうまく並列処理などが行われて1秒間辺りのデータ転送量が高くなったのかも(?)しれませんね。

EFSの読み込みスループットも本来なら300MiB/sになってほしいのですが、ddコマンドの測定では3倍になってます。
ただしddコマンドを実行した際に時々300MB/sの時もあるんで謎です。

実は次回にはOCIのストレージと比較をしようと思っています。
ddコマンドはその比較のためにも実行していました。
そのため、ここでのddコマンドの結果についてはあくまでも正確なスループットではなく参考値として捉えてください。

おわりに

今回はEBS(gp3)とEFSのIOPS及びスループットを測定してみました。
実は記事にした内容以外にもさまざまなパターンでベンチマークを実施したのですが、結論としては表記通りのパフォーマンスが期待できるものと思って差し支えありません。

もちろんEBSをマウントするEC2インスタンスのスペックが極端に低かったり、何らかのプロセスによりネットワーク帯域が占有されているなどのボトルネック要因があると表記通りの性能を発揮できないと思われます。

きちんとバランスの取れた構成である限りは問題ないと思われますので、もしもパフォーマンスが出ていなければボトルネック要因を疑ってみるのが良いかもしれませんね。

次回の記事ではOCIのストレージサービスでも同様の検証を行おうと思っております。
興味があればぜひぜひ見にきてくださいね!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)