AWSストレージ概観
AWS で使えるローカルストレージと NFS ストレージを一通り試してみました。
GCP 編はこちら。
About
ベンチマークは fio コマンドで取得した。
機械学習のワークロードで扱う機会が多い、CSV のような小さめのテキストファイルとマルチメディアファイルを想定して 4k と 32m のデータで測定した。
なお、ストレージタイプごとの傾向をざっくりと知りたかったので性能を引き出すような設定や調整は行なっていない。
また以下の理由で IaaS のストレージを厳密に測定してもあまり意味はないと考えている。
- IaaS のリソースはシェアされているので他のユーザー(テナント)の影響を受ける
- 非公開な仕様が特に告知なく更新される(バス幅や各種ストレージの物理仕様など)
試したストレージは以下。
- Amazon EBS Volume(ローカルブロックデバイス)
gp2
: 汎用, SSDio1
: Highest-performance SSD- HDD(
st1
,sc1
)は試さなかった
- Amazon EFS Performance(マネージド NFS サービス)
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 が妙に遅いのでこれは実行タイミングで何かあったのかもしれない。
type | r/w | rand/seq | IOPS 4k | ,32m | BW/s 4k | ,32m |
---|---|---|---|---|---|---|
gp2 | r | rand | 3100 | 4 | 12.1MiB | 129MiB |
gp2 | w | rand | 1791 | 4 | 7165KiB | 134MiB |
gp2 | r | seq | 3100 | 4 | 12.1MiB | 129MiB |
gp2 | w | seq | 1863 | 4 | 7453KiB | 134MiB |
io1 | r | rand | 17.2k | 13 | 67.2MiB | 429MiB |
io1 | w | rand | 2253 | 15 | 9014KiB | 484MiB |
io1 | r | seq | 17.3k | 13 | 67.6MiB | 428MiB |
io1 | w | seq | 2422 | 15 | 9690KiB | 483MiB |
NVMe (i3en) | r | rand | 20.8k | 10 | 81.1MiB | 350MiB |
NVMe (i3en) | w | rand | 33.2k | 5 | 130MiB | 165MiB |
NVMe (i3en) | r | seq | 45.1k | 10 | 176MiB | 346MiB |
NVMe (i3en) | w | seq | 33.0k | 5 | 133MiB | 165MiB |
EFS
AWS のマネージド NFS サービスである EFS は案外選択肢が豊富で、2 つの Performance Mode
と 2 つの Throughput Mode
を選べるため、 2 * 2 = 4
通りのボリュームを設定できる。
- Performance Mode:
General Purpose
orMax I/O
- Throughput Modes:
Bursting
orProvisioned
Bursting
=> 使用容量が増えるとスループットが引き上げられるモード、今回は空の状態でベンチマークを実行したので最低ラインのスループットなはずProvisioned
=> 使用容量に関わらず課金でスループットを買えるモード、今回のベンチマークは最大値である1024
で測定
Performance Mode の違いはよくわからなかった。
ほとんどのシチュエーションでは General Purpose を使っておけば良さそう。
(Performance Mode は EFS ボリューム作成後に変更できない)
Throughput Mode は EFS ボリュームを作った後でも変更できるので、お金に余裕があるときは Provisioned
で始めて容量が増えたら Bursting
に変える方法が使えそう。
type | r/w | rand/seq | IOPS 4k | ,32m | BW/s 4k | ,32m |
---|---|---|---|---|---|---|
GP (bursting) | r | rand | 894 | 3 | 3580KiB | 101MiB |
GP (bursting) | w | rand | 250 | 3 | 1003KiB | 104MiB |
GP (bursting) | r | seq | 900 | 3 | 3604KiB | 101MiB |
GP (bursting) | w | seq | 258 | 2 | 1034KiB | 95.4MiB |
GP (provisioned) | r | rand | 919 | 8 | 3680KiB | 258MiB |
GP (provisioned) | w | rand | 253 | 6 | 1014KiB | 204MiB |
GP (provisioned) | r | seq | 1021 | 8 | 4085KiB | 258MiB |
GP (provisioned) | w | seq | 276 | 6 | 1105KiB | 202MiB |
Max I/O (bursting) | r | rand | 665 | 3 | 2662KiB | 104MiB |
Max I/O (bursting) | w | rand | 187 | 3 | 748KiB | 102MiB |
Max I/O (bursting) | r | seq | 775 | 3 | 3103KiB | 104MiB |
Max I/O (bursting) | w | seq | 263 | 3 | 1054KiB | 103MiB |
Max I/O (provisioned) | r | rand | 762 | 8 | 3052KiB | 257MiB |
Max I/O (provisioned) | w | rand | 265 | 4 | 1061KiB | 153MiB |
Max I/O (provisioned) | r | seq | 734 | 8 | 2940KiB | 258MiB |
Max I/O (provisioned) | w | seq | 261 | 5 | 1048KiB | 161MiB |
That’s all
AWS のストレージは本当に種類が多くて選択に迷っていたので一度全部試してみたかった。
今回、「インターネットや AI を活用し、世の中にデライトを届けていく」dena.aiの提供でベンチマーク実行させていただきスッキリしました。感謝 🙏