CrystalDiskMarkでWindowsの性能ベンチマークを試す

記事タイトルとURLをコピーする

こんにちは、技術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 をクリック。

CrystalDiskMarkダウンロード

Sizuku Editionに気を取られつつも、Standard EditionのINSTALLER (Vista-)をクリック。

Standard Edition > INSTALLER (Vista-)

ダウンロードが始まり、しばらくすると完了します。

ダウンロード完了後、実行 クリック

実行 クリック

同意する > 次へ

次へ クリック

次へ クリック

インストール クリック

インストールが完了するとウィンドウが表示されます。

ウィンドウ

機能

使える機能は以下の通りです。

  • テスト回数

    テスト回数

  • テストサイズ

    テストサイズ

  • テストドライブ

    テストドライブ

  • 表示単位

    表示単位

  • 設定

    設定

  • プロファイル

    プロファイル

  • テーマ

    テーマ

テスト方法

All をクリックすると選択した設定値でテストが開始されます。

All クリック

All が Stopに切り替わり、表示されている値が上がり始めました。

Stopに切り替わってテスト処理が始まる

項目ごとにテストが実行され、約4分程度経過後にテストが完了しました。

テスト完了

指標解説

SEQ1M

SEQ1M

SEQ1Mとは、「Sequential 1MB」という意味で、1MBの連続したデータブロックを読み書きするテストを指します。

これらはシーケンシャルアクセスに関するテストの指標ということになります。

RND4K

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 変更

IOPS変更
3000から6000へ変更しました。

変更確認

テスト計測

テスト完了

RND4K Q32T1は変更前の倍の計測値となりました。 IOPSを元の3000から倍の6000へ変更したことでこの数値も倍増していることがわかります。

IOPSを最大値の16000へ変更

IOPSを最大値の16000へ変更するとどうなるか検証しました。

注意点

直近の変更から最低6時間は期間を空けないと再度変更ができないです。

最大値:16000へ変更
直近の変更から6時間空けないと変更できない

また、IOPSについては、

docs.aws.amazon.com

パフォーマンス (IOPS) の変更は、設定の変更内容に応じて、完了するまでに数分から数時間かかる場合があります。

とあるので、変更後すぐに完了するとは限りません。

6時間は待てないため、別のドライブ(EBSボリューム)を選択して計測します。 同じスループット・IOPS設定の場合でボリュームサイズの差異は、性能には影響を与えないことは確認済みです。

スループット:125、IOPS:3000
スループット:400、IOPS:16000
変更確認

テスト計測

テスト完了

RND4KのQ32T1の性能は向上しましたが、Q1T1の性能は向上しませんでした。 gp3のストレージタイプで16000の最大IOPS設定の場合はこの性能が限界のようです。

ボリュームタイプ変更

ボリュームタイプをgp3からより高性能なio2へ変更してみます。

io2のボリュームタイプは、高性能を必要とするワークロード向けのプロビジョンドIOPS SSDボリュームです。

ボリュームタイプについて、詳しくは以下の公式ドキュメントを参照ください。

docs.aws.amazon.com

プロビジョンド IOPS SSD (io2)
変更確認

テスト計測

テスト完了

スループットとIOPSの設定値はそのままで、ボリュームタイプをgp3からio2へ変更するだけでシーケンシャルアクセスの性能が約6倍近く高くなりました。 io2すごい。

一方で、ランダムアクセスの性能はシーケンシャルアクセスほどの向上は見られないことがわかりました。

ボリュームタイプ変更&IOPS変更

ボリュームタイプをio2へ変更した上で、IOPSも設定値を上げるとランダムアクセスQ1T1の性能も上がるかどうかを検証しました。

ボリュームタイプ:io2、IOPS:18000
変更確認

テスト計測

テスト結果
ランダムアクセスのQ32T1の性能は向上しましたが、Q1T1の性能はやはり向上せず、限界のようです。

まとめ

ボリュームタイプをgp3からio2へ変更することでIOPSはそのままでも、シーケンシャルアクセスに関してはかなりの性能向上を見込めることが改めてわかりました。

一方で、ランダムアクセスの単一スレッドの処理速度に関してはストレージタイプを変更してもIOPSを上げても一定以上の効果は見込めませんでした。 より高速なワークロードを必要とする場合はOSレイヤーでストレージキャッシュのような仕組みを検討する必要がありそうです。

以上、どなたかの参考になれば幸いです。

折戸 亮太(執筆記事の一覧)

2021年10月1日入社
クラウドインテグレーション部技術1課

屋根裏エンジニア