AWSストレージ概観

AWS で使えるローカルストレージと NFS ストレージを一通り試してみました。
GCP 編はこちら

About

ベンチマークは fio コマンドで取得した。
機械学習のワークロードで扱う機会が多い、CSV のような小さめのテキストファイルとマルチメディアファイルを想定して 4k と 32m のデータで測定した。

なお、ストレージタイプごとの傾向をざっくりと知りたかったので性能を引き出すような設定や調整は行なっていない。
また以下の理由で IaaS のストレージを厳密に測定してもあまり意味はないと考えている。

  • IaaS のリソースはシェアされているので他のユーザー(テナント)の影響を受ける
  • 非公開な仕様が特に告知なく更新される(バス幅や各種ストレージの物理仕様など)

試したストレージは以下。

Results

以下の通り Terraform による IaC で provisioning した。
https://github.com/mazgi/terraform-aws-simple-vpc/tree/v2019.06.2/examples/multiple-volumes

またi3enインスタンスを使って測定したのでNitroアーキテクチャでの結果となる。

結果はこちら。
https://gist.github.com/mazgi/fa855f576aca50ff0f204f6386c275dc

結果をテーブルにまとめた。

EBS

io1 はたしかに、

more than 16,000 IOPS or 250 MiB/s of throughput per volume

書いてある通りの性能が出ている。

i3en についてくる NVMe SSD も速い。
ボリュームサイズが 1,250 GB の倍数で自動的に決まってしまう制約はあるが使えるシチュエーションはそれなりにありそう。
4k randread が妙に遅いのでこれは実行タイミングで何かあったのかもしれない。

typer/wrand/seqIOPS 4k,32mBW/s 4k,32m
gp2rrand3100412.1MiB129MiB
gp2wrand179147165KiB134MiB
gp2rseq3100412.1MiB129MiB
gp2wseq186347453KiB134MiB
io1rrand17.2k1367.2MiB429MiB
io1wrand2253159014KiB484MiB
io1rseq17.3k1367.6MiB428MiB
io1wseq2422159690KiB483MiB
NVMe (i3en)rrand20.8k1081.1MiB350MiB
NVMe (i3en)wrand33.2k5130MiB165MiB
NVMe (i3en)rseq45.1k10176MiB346MiB
NVMe (i3en)wseq33.0k5133MiB165MiB

EFS

AWS のマネージド NFS サービスである EFS は案外選択肢が豊富で、2 つの Performance Mode と 2 つの Throughput Mode を選べるため、 2 * 2 = 4 通りのボリュームを設定できる。

  • Performance Mode: General Purpose or Max I/O
  • Throughput Modes: Bursting or Provisioned
    • Bursting => 使用容量が増えるとスループットが引き上げられるモード、今回は空の状態でベンチマークを実行したので最低ラインのスループットなはず
    • Provisioned => 使用容量に関わらず課金でスループットを買えるモード、今回のベンチマークは最大値である 1024 で測定

Performance Mode の違いはよくわからなかった。
ほとんどのシチュエーションでは General Purpose を使っておけば良さそう。
(Performance Mode は EFS ボリューム作成後に変更できない)

Throughput Mode は EFS ボリュームを作った後でも変更できるので、お金に余裕があるときは Provisioned で始めて容量が増えたら Bursting に変える方法が使えそう。

typer/wrand/seqIOPS 4k,32mBW/s 4k,32m
GP (bursting)rrand89433580KiB101MiB
GP (bursting)wrand25031003KiB104MiB
GP (bursting)rseq90033604KiB101MiB
GP (bursting)wseq25821034KiB95.4MiB
GP (provisioned)rrand91983680KiB258MiB
GP (provisioned)wrand25361014KiB204MiB
GP (provisioned)rseq102184085KiB258MiB
GP (provisioned)wseq27661105KiB202MiB
Max I/O (bursting)rrand66532662KiB104MiB
Max I/O (bursting)wrand1873748KiB102MiB
Max I/O (bursting)rseq77533103KiB104MiB
Max I/O (bursting)wseq26331054KiB103MiB
Max I/O (provisioned)rrand76283052KiB257MiB
Max I/O (provisioned)wrand26541061KiB153MiB
Max I/O (provisioned)rseq73482940KiB258MiB
Max I/O (provisioned)wseq26151048KiB161MiB

That’s all

AWS のストレージは本当に種類が多くて選択に迷っていたので一度全部試してみたかった。

今回、「インターネットや AI を活用し、世の中にデライトを届けていく」dena.aiの提供でベンチマーク実行させていただきスッキリしました。感謝 🙏