新しいストレージ最適化インスタンス I3 でNVMeをベンチマークしてみました

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

大栗です。

先日新しいストレージ最適化インスタンスとして I3 ファミリーが利用可能になりました。旧世代の I2ではSATA接続のSSDでしたが、I3ではNVMeとなっています。SATAと比較したNVMeの違いとして並列アクセスに強いという部分があるので並列度を変えてベンチマークを取得してみました。

「i3」新しいストレージ最適化インスタンスが利用可能になりました

ベンチマークの環境

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

Amazon EC2 » User Guide for Linux Instances » Amazon EC2 Instances » Instance Types » Storage Optimized Instances

東京リージョンのインスタンスで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の使用を検討した方が良いと思われます。