新しいストレージ最適化インスタンス I3 でNVMeをベンチマークしてみました
大栗です。
先日新しいストレージ最適化インスタンスとして I3 ファミリーが利用可能になりました。旧世代の I2ではSATA接続のSSDでしたが、I3ではNVMeとなっています。SATAと比較したNVMeの違いとして並列アクセスに強いという部分があるので並列度を変えてベンチマークを取得してみました。
ベンチマークの環境
EC2環境
- リージョン: 東京(ap-northeast-1)
- OS: Amazon Linux AMI 2016.09.1.20170119 x86_64 HVM GP2 (ami-56d4ad31)
- インスタンスタイプ
- i3.xlarge
- i2.xlarge
- ファイルシステム: ext4
ベンチマークツール
- 使用ソフト: fio
- アーキテクチャ: x86_64
- バージョン: 2.1.5-1.5.amzn1
実行コマンドは以下のオプションで実行して、同一インスタンスで5回計測します。
オプション | 設定値 | 備考 |
---|---|---|
ioengine | sync | 同期I/O |
iodepth | 16 | |
size | 100M | |
direct | 1 | O_DIRECTで実行 |
group_reporting | グループ単位での結果出力 | |
bs | 4k | ドキュメントのIOスペックの前提 |
directory | 任意 | |
name | 任意 | |
output | 任意 | |
rw | read(シーケンシャルリード), write(シーケンシャルライト), randread(ランダムリード), randwrite(ランダムライト) |
実行するI/Oの種類 |
numjobs | 1,2,4,8,16,32,64,128の各々 | 同時に実行するジョブの数 |
計測結果
rw=read(シーケンシャルリード)
numjobs | i2.xlarge (IOPS) | i3.xlarge (IOPS) | 性能比 (i3/i2) |
---|---|---|---|
1 | 6916.4 | 28809.8 | 416.5% |
2 | 8100.6 | 35748.4 | 441.3% |
4 | 13829.4 | 45165.6 | 326.6% |
8 | 21621.8 | 69657 | 322.2% |
16 | 30078 | 123816 | 411.6% |
32 | 36089.2 | 203814.8 | 564.8% |
64 | 37190 | 212328.4 | 570.9% |
128 | 38237.4 | 209226.4 | 547.2% |
rw=write(シーケンシャルライト)
numjobs | i2.xlarge (IOPS) | i3.xlarge (IOPS) | 性能比 (i3/i2) |
---|---|---|---|
1 | 7256.8 | 21374.8 | 294.5% |
2 | 12192 | 23606.2 | 193.6% |
4 | 18136 | 21817.8 | 120.3% |
8 | 26260.4 | 20170 | 76.8% |
16 | 31288.6 | 19603 | 62.7% |
32 | 33777 | 19181.6 | 56.8% |
64 | 33653.2 | 18935 | 56.3% |
128 | 35289.4 | 18840.4 | 53.4% |
rw=randread(ランダムリード)
numjobs | i2.xlarge (IOPS) | i3.xlarge (IOPS) | 性能比 (i3/i2) |
---|---|---|---|
1 | 5439.4 | 10428.4 | 191.7% |
2 | 9780 | 20425 | 208.8% |
4 | 16099.6 | 39708.4 | 246.6% |
8 | 26403.2 | 74461.2 | 282.0% |
16 | 37554.4 | 130996.4 | 348.8% |
32 | 44384.4 | 207918.8 | 468.5% |
64 | 45394.4 | 214318.2 | 472.1% |
128 | 45142.8 | 209299.4 | 463.6% |
rw=randwrite(ランダムライト)
numjobs | i2.xlarge (IOPS) | i3.xlarge (IOPS) | 性能比 (i3/i2) |
---|---|---|---|
1 | 8091.4 | 23167.2 | 286.3% |
2 | 14003 | 24027.4 | 171.6% |
4 | 23147.4 | 22089 | 95.4% |
8 | 33653.4 | 20180.4 | 60.0% |
16 | 41419.2 | 19602.4 | 47.3% |
32 | 42895.8 | 19178.4 | 44.7% |
64 | 42668.2 | 18933.6 | 44.4% |
128 | 42769.2 | 18851.4 | 44.1% |
考察
読み込みではシーケンシャル、ランダム共に32並列でほぼ限界値まで性能を発揮して、書き込みではシーケンシャル、ランダム共に1並列でほぼ限界値まで性能を発揮し並列度が上がってもあまり性能の劣化が見られませんでした。
i2.xlarge との性能差に着目すると、読み込みはランダムよりシーケンシャルの方が優位で、書き込みもランダムよりシーケンシャルの方が優位な結果が出ています。
読み込み性能は i2.xlarge と比較すると i3.xlarge は圧倒的に性能が良く、書き込みは並列度が低い時には i3.xlarge の方が並列度が高い時には i2.xlarge の方が良くなっています。これは同ランクのインスタンスタイプではi2ファミリーの方が書き込み性能の上限が2倍程度高いためです。しかし、i2とi3では価格差が3倍程度異なるため、書き込み性能が必要な場合は1つ上のサイズのi3インスタンスを使用してもコストが安くなります。
インスタンスサイズ | ランダムリードIOPS | 初回書き込みIOPS |
---|---|---|
i2.xlarge | 35,000 | 35,000 |
i2.2xlarge | 75,000 | 75,000 |
i2.4xlarge | 175,000 | 155,000 |
i2.8xlarge | 365,000 | 315,000 |
i3.large | 100,125 | 9,375 |
i3.xlarge | 206,250 | 18,750 |
i3.2xlarge | 412,500 | 37,500 |
i3.4xlarge | 825,000 | 75,000 |
i3.8xlarge | 1,650,000 | 150,000 |
i3.16xlarge | 3,300,000 | 300,000 |
東京リージョンのインスタンスで1,000,000IOPS当たりのコストを比較すると、同一コストで読み込み性能は12〜16倍、書き込み性能は1.3〜1.5倍程度良くなっています。
インスタンスタイプ | 1M Read IOPS当たりの価格 | 1M Write IOPS当たりの価格 |
---|---|---|
i2.xlarge | $28.60 | $28.60 |
i2.2xlarge | $26.68 | $26.68 |
i2.4xlarge | $22.87 | $25.82 |
i2.8xlarge | $21.93 | $25.41 |
i3.large | $1.83 | $19.52 |
i3.xlarge | $1.77 | $19.52 |
i3.2xlarge | $1.77 | $19.52 |
i3.4xlarge | $1.77 | $19.52 |
i3.8xlarge | $1.77 | $19.52 |
i3.16xlarge | $1.77 | $19.52 |
さいごに
NVMeに対応したドライバがあるOSでは明らかにI3が低価格と言えます。新規でI2を使用する必要はないと言って良いでしょう。使用できるNVMeはインスタンスストアのため Stop/Start で内容が消えてしまいますが、高IOPSが必要な環境ではI3の使用を検討した方が良いと思われます。