こんにちは、技術1課の折戸です。
最近、旭山動物園に私と同じ「オリト」の名前がついたパパライオンがいると知ったのでいつか会いに行ってみたいと思っています。
概要
タイトルそのままですが、 CrystalDiskMarkというツールを使ってWindowsのディスクの性能ベンチマークを試したので記録として記事にしました。
前提
- AMI:Windows_Server-2019-Japanese-Full-Base-2023.11.15
- インスタンスタイプ:m6i.large
EBSボリュームタイプ:gp3(記事内で途中から変更します)
ディスクとドライブ
CrystalDiskMarkとは
CrystalDiskMarkとは、コンピュータのストレージデバイス(HDD、SSD、USBメモリなど)の性能を測定するためのベンチマークツールです。
テストを実行し、ストレージの読み書き速度を測定することができます。
AWS公式ドキュメントにも紹介されています。 docs.aws.amazon.com
性能ベンチマークの検証手順
CrystalDiskMark ダウンロード
ブラウザで https://crystalmark.info/en/software/crystaldiskmark/
へアクセスし、Download をクリック。
Sizuku Editionに気を取られつつも、Standard EditionのINSTALLER (Vista-)をクリック。
ダウンロードが始まり、しばらくすると完了します。
ダウンロード完了後、実行 クリック
インストールが完了するとウィンドウが表示されます。
機能
使える機能は以下の通りです。
テスト回数
テストサイズ
テストドライブ
表示単位
設定
プロファイル
テーマ
テスト方法
All をクリックすると選択した設定値でテストが開始されます。
All が Stopに切り替わり、表示されている値が上がり始めました。
項目ごとにテストが実行され、約4分程度経過後にテストが完了しました。
指標解説
SEQ1M
SEQ1Mとは、「Sequential 1MB」という意味で、1MBの連続したデータブロックを読み書きするテストを指します。
これらはシーケンシャルアクセスに関するテストの指標ということになります。
RND4K
RND4Kとは、「Random 4KB」という意味で、4KBの小さなデータブロックをランダムに読み書きするテストを指します。これらはランダムアクセスに関するテストの指標ということになります。
Q8T1、Q1T1、Q32T1
Qは「Queue Depth」という意味で、Q8であれば8つのI/O(入出力)要求が同時にキューに入っている状態でのテストを指します。 キューの深さ(Queue Depth)は、ストレージが同時に処理できるI/O要求の数を示します。Qの数が多ければ多いほど、より複数の要求が同時に発生していることになります。 Tは「Thread」という意味で、T1であれば1つのスレッドを使用してテストを実行することを意味します。スレッド数は、テスト中に同時に実行される独立した操作の数です。
EBSの設定値を変更して計測してみる
EBS設定値を変更してどのくらい性能向上するかを比較してみます。
スループット 変更
まずはスループットの値を変更してみます。
現在の値
スループット 変更
125から400へ変更しました。10秒ほどでコンソール上から確認することができます。
テスト計測 初回と同じく約4分で完了しました。
IOPS 変更
今度は、IOPSの値を変更してみます。
IOPS 変更
3000から6000へ変更しました。テスト計測
RND4K Q32T1は変更前の倍の計測値となりました。 IOPSを元の3000から倍の6000へ変更したことでこの数値も倍増していることがわかります。
IOPSを最大値の16000へ変更
IOPSを最大値の16000へ変更するとどうなるか検証しました。
注意点
直近の変更から最低6時間は期間を空けないと再度変更ができないです。
また、IOPSについては、
パフォーマンス (IOPS) の変更は、設定の変更内容に応じて、完了するまでに数分から数時間かかる場合があります。
とあるので、変更後すぐに完了するとは限りません。
6時間は待てないため、別のドライブ(EBSボリューム)を選択して計測します。 同じスループット・IOPS設定の場合でボリュームサイズの差異は、性能には影響を与えないことは確認済みです。
テスト計測
RND4KのQ32T1の性能は向上しましたが、Q1T1の性能は向上しませんでした。 gp3のストレージタイプで16000の最大IOPS設定の場合はこの性能が限界のようです。
ボリュームタイプ変更
ボリュームタイプをgp3からより高性能なio2へ変更してみます。
io2のボリュームタイプは、高性能を必要とするワークロード向けのプロビジョンドIOPS SSDボリュームです。
ボリュームタイプについて、詳しくは以下の公式ドキュメントを参照ください。
テスト計測
スループットとIOPSの設定値はそのままで、ボリュームタイプをgp3からio2へ変更するだけでシーケンシャルアクセスの性能が約6倍近く高くなりました。 io2すごい。
一方で、ランダムアクセスの性能はシーケンシャルアクセスほどの向上は見られないことがわかりました。
ボリュームタイプ変更&IOPS変更
ボリュームタイプをio2へ変更した上で、IOPSも設定値を上げるとランダムアクセスQ1T1の性能も上がるかどうかを検証しました。
テスト計測
ランダムアクセスのQ32T1の性能は向上しましたが、Q1T1の性能はやはり向上せず、限界のようです。まとめ
ボリュームタイプをgp3からio2へ変更することでIOPSはそのままでも、シーケンシャルアクセスに関してはかなりの性能向上を見込めることが改めてわかりました。
一方で、ランダムアクセスの単一スレッドの処理速度に関してはストレージタイプを変更してもIOPSを上げても一定以上の効果は見込めませんでした。 より高速なワークロードを必要とする場合はOSレイヤーでストレージキャッシュのような仕組みを検討する必要がありそうです。
以上、どなたかの参考になれば幸いです。