クラウドディスクのベンチマーク #2 SSD編

この記事は Alibaba Cloud の日本サイト の環境(ドキュメントやアカウント、そのアカウントでの検証結果)に基づいて記載しています。 日本サイトと国際サイトでは各プロダクトごとに提供機能が一部異なることがあります(そのほとんどは国際サイトの方が日本サイトよりも多機能になっている)。記事の内容は適宜最新化する予定です。

ECSで利用するブロックディスク”SSD クラウドディスク”について、性能限界を求めて色々挑戦してみます。 1台のECSで 84,200 IOPS、 1809MB/s のスループットを確認出来ました。

Ultra クラウドディスクのベンチマークは以下の記事で紹介しています。

システム構成は以下の感じです。 8つのSSD クラウドディスクを1台のECSに接続し、LVMでストライピングします。 OSはAliyun Linuxを使っています。

なお、OSにAliyun Linuxを使っている理由ですが

  • テスト内容に対してAliyun Linuxを使う必然性はない
  • このような機会でしか扱わないので意図的に利用してノウハウを蓄積(そのノウハウが活用される場面は遠い将来かもしれません)
  • Aliyun LinuxはRed Hatクローンなので扱いやすい

最初に結論

SSD クラウドディスク 8個によるストライピング構成でFIOによるベンチマークを実施しました。

  • 1台のECSインスタンスとして4kブロックサイズのランダムWriteで
    34,700 IOPS、同じ4kのランダムReadで84,200 IOPSを確認
  • IOPSは最大で84,200 IOPSを計測。 理論性能の200,000 IOPS (25,000 IOPS×8 ディスク)には及びませんが、Ultra クラウドディスクの23,500 IOPSの3倍以上の結果です
  • スループットは最大で 1809MB/sを計測。 こちらも理論性能の2400 MB/s (300MB/s×8ディスク) には及びませんが十分かと。 
  • 全体としてソフトウェアのストライピングですし、特にチューニングもかけていないので十分な性能ではないでしょうか。 仮想化オーバヘッドもありますし。

ECSインスタンスの購入

CPUやメモリがボトルネックとならないよう、そこそこのスペックのタイプファミリーを選びます。 具体的には8 vCPU、32GBメモリのecs.g5.2xlargeを利用します。

1ディスクあたりの最大性能25,000を利用するために、774GBを容量に指定します。同じディスクを8個購入します。 

検証目的では”インスタンスと共にリリース”がチェックされていることを必ず確認しましょう。 チェックが無いとECSインスタンスをリリースしても、クラウドディスクは残り課金が継続します。

インスタンスが起動しました。

クラウドディスクの状況を確認します。 774GBのSSD クラウドディスクが8個出来上がっていることが確認出来ます。

システムの構築

今回、システム構築手順の紹介は省略します。 Ultraクラウドディスクのテストと同じ手順で構築しています。

  1. LVM向けにパーティション設定
  2. LVMでPhsical Volume、Volume Group、Logical Volume作成
  3. XFSでフォーマット
  4. FIOインストール

ボリュームをマウントした状態は以下。/benchmarkにmountしています。

[root@benchmark benchmark]# df -m
Filesystem 1M-blocks Used Available Use% Mounted on
devtmpfs 16077 0 16077 0% /dev
tmpfs 16088 0 16088 0% /dev/shm
tmpfs 16088 1 16087 1% /run
tmpfs 16088 0 16088 0% /sys/fs/cgroup
/dev/vda1 503837 1754 476467 1% /
tmpfs 3218 0 3218 0% /run/user/0
/dev/mapper/bigriver-lv–bigriver 5240840 34 5240807 1% /benchmark

FIOによるベンチマーク

テスト#1 Random Write (4k)

[root@benchmark benchmark]# fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Rand_Write_Testing
~省略~
write: IOPS=34.7k, BW=136MiB/s (142MB/s)(10.0GiB/75513msec)
~省略

テスト#2 Random Write (64k)

[root@benchmark benchmark]# fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=64k -size=10G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Rand_Write_Testing
~省略~
write: IOPS=16.1k, BW=1003MiB/s (1052MB/s)(10.0GiB/10208msec)
~省略~

テスト#3 Random Read (4k)

[root@benchmark benchmark]# fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=1000 -group_reporting -filename =iotest -name=Rand_Read_Testing
~省略~
read: IOPS=84.2k, BW=329MiB/s (345MB/s)(10.0GiB/31123msec)
~省略~ 

テスト#4 Random Read (64k)

[root@benchmark benchmark]# fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=64k -size=10G -numjobs=1 -runtime=1000 -group_reporting -filename =iotest -name=Rand_Read_Testing
~省略~
read: IOPS=27.6k, BW=1726MiB/s (1809MB/s)(10.0GiB/5934msec)
~省略~

テスト#5 Sequential Write (64k)

[root@benchmark benchmark]# fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=64k -size=10G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Write_PPS_Testing
~省略~ 
write: IOPS=16.0k, BW=1000MiB/s (1049MB/s)(10.0GiB/10235msec)
~省略~ 

テスト#6 Sequential Read (64k)

[root@benchmark benchmark]# fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=64k -size=10G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Read_PPS_Testing
~省略~ 
read: IOPS=26.7k, BW=1669MiB/s (1750MB/s)(10.0GiB/6136msec)
~省略~ 

まとめ

SSD クラウドディスク 8個によるストライピング構成でFIOによるベンチマークを実施しました。

  • IOPSは最大で84,200 IOPSを計測。 理論性能の200,000 IOPS (25,000 IOPS×8 ディスク)には及びませんが、十分な性能ではないでしょうか。Ultra クラウドディスクで行った同様のテストの結果 “23,500 IOPS” の3倍以上の実測値です
  • スループットは最大で 1809MB/sを計測。 こちらも理論性能の2400 MB/s (300MB/s×8ディスク) には及びませんが十分かと。
  • 1台のECSインスタンスとして4kブロックサイズのランダムWriteで
    34,700 IOPS、同じ4kのランダムReadで84,200 IOPSを発揮できることを確認出来ました。 

以上