Windows でストレージパフォーマンス (IOPS、レイテンシ、スループット) を測定する方法
ストレージの性能が期待通りかどうか疑問に思ったことがあるなら、それはあなただけではありません。時々、何かが遅く感じたり、SSDが高性能なSANと比べてどうなのか試してみたくなったりするでしょう。本当の秘訣は、高価なハードウェアテスト機器を使わずに、IOPS、レイテンシ、スループットを測定することです。幸いなことに、Windowsには、内部を覗き見できる組み込みツールといくつかの優れた方法が用意されています。このガイドでは、シンプルなカウンターからより複雑なコマンドラインテストまで、いくつかの方法を説明します。これにより、ディスクが過剰に稼働しているのか、キューリクエストで溢れているのかを判断できます。
さらに、これらの数値の読み方を知っておくと、トラブルシューティングや、コストパフォーマンスを確かめるのに役立ちます。ローカルSSD、ネットワーク共有フォルダ、SANボリュームなど、どんなテストをする場合でも、これらの方法を使えばストレージの健全性と速度をかなり正確に把握できるはずです。
Windows のディスク パフォーマンス カウンターを使用してストレージ I/O をキャプチャする
パフォーマンスモニターを使用してストレージのIOPSとレイテンシを確認する方法
ちょっと奇妙に聞こえるかもしれませんが、Windows パフォーマンス モニター (Perfmon) は、頼りになるけれどちょっとしたチェックにとても便利な、あの昔からの友人のようなものです。ディスク転送速度 (Disk sec/Transfer) やディスク転送回数 (Disk Transfers/sec) といったパフォーマンス カウンターを記録するデータ コレクター セットを設定できます。その仕組みは以下のとおりです。
- 理由: ストレージが処理している負荷の量をリアルタイムまたは記録されたスナップショットで継続的に提供します。これは、ディスクの速度低下の問題をデバッグしたり、アップグレードを検証したりする場合に重要です。
- 状況: ディスクが遅いと感じられる場合、または興味を持ってピーク時の読み込み時間を測定しようとしている場合に適用されます。
- 期待される結果: 実行すると、ディスクのレイテンシ、IOPS、スループットなど、重要なメトリックを示すグラフまたはレポートが表示されます。
- パフォーマンス モニターを開きます(スタート メニューに「perfmon」と入力します)。
- 新しいデータ コレクター セットを作成し ([データ コレクター セット]を右クリック> [新規] > [データ コレクター セット] の順に選択)、[手動で作成] を選択します。
- 名前を付けて、[データ ログの作成] > [パフォーマンス カウンター]を選択します。
- プロパティで、[追加]をクリックして、物理ディスクオブジェクト の下にカウンターを追加します。
- 平均ディスク秒/転送
- 平均ディスクキューの長さ
- 平均ディスクバイト/転送
- ディスクバイト/秒
- ディスク転送数/秒
- 分割IO/秒
- サンプル間隔を設定します。デフォルトは 15 秒ですが、よりリアルタイムの分析情報を得るには、5 秒などに設定します (システムが対応できる場合)。
- コレクターを起動し ([開始]をクリック)、しばらく実行します (安定したデータを収集するには少なくとも数分間)。
- コレクターセットを右クリックし、「停止」を選択します。データを表示するには、「レポート」 > 「ユーザー定義」 >「コレクターセット名」に進みます。デフォルトではグラフが表示されますが、 でレポートモードに切り替えることができますCtrl + G。
さて、いよいよ楽しい部分です。これらのカウンターを分析するのです。パフォーマンスがおかしいと感じたら、特にディスク転送秒数に注目してください(SSDの場合は10ミリ秒以下が理想的ですが、回転式ディスクの場合は25ミリ秒以下でも問題ありません)。ディスク転送秒数とキューの長さが高い場合、ドライブがオーバータイムで動作していることを示しています。これはボトルネックを追跡する際に非常に役立つ情報です。
プロのヒント: カウンターをストレージ構成に合わせてください
例えば、RAIDアレイやSSDキャッシュを使用している場合は、個々のディスクのパフォーマンスを必ず確認してください。RAIDタイプ、キャッシュサイズ、ディスクタイプなどの設定を理解することで、数値をより正確に解釈できるようになります。また、設定によっては、特に他のワークロードが実行中の場合、これらのカウンターが大きく変動することがあります。
DiskSpd: ストレステストとディスクパフォーマンスの測定
DiskSpd を使ってディスク速度と IOPS を詳しく調べる
DiskSpdはWindowsに組み込まれていませんが、特にストレステストや最大スループットの測定には強く推奨されます。Microsoftのコマンドラインツールで、ストレージの限界まで負荷をかけたり、定格パフォーマンスを確認したりしたい場合に非常に便利です。
少し設定が必要ですが、ZIPファイルをダウンロード(インストール不要)し、解凍してPowerShellまたはコマンドプロンプトからコマンドを実行するだけです。以下は、ディスクの実速度を測るために私が使用した典型的なコマンドです。
diskspd.exe –c50G -d300 -r -w40 -t8 -o32 -b64K -Sh -L E:\diskpsdtmp.dat > DiskSpeedResults.txt
これはかなり大きな負荷を発生させるため、多少の速度低下を許容できる場合を除き、勤務時間中にメインサーバーで実行しないでください。その動作を簡単に説明します。
- -c50G : 50GBのテストファイルを作成します。キャッシュ制限を超えないよう、大きなファイルを使用してください。
- -d300 : 5 分間 (300 秒) テストします。
- -r : 実際のデータアクセスをより代表するランダム I/O。
- -w40 : 操作の 40% が書き込み、60% が読み取りです。ワークロードに応じて調整します。
- -t8 : 8 スレッドなので、マルチコア システムに負荷をかけることができます。
- -o32 : キューの深さ – SAN がより多くの並列処理をサポートする場合は増加します。
- -b64K : ブロック サイズ – ブロックが大きいほど速度が速くなる傾向があります。
- -Sh : 生の数値を取得するために OS キャッシュを無効にします。
- -L : テスト中のレイテンシを測定します。
`DiskSpeedResults.txt` に出力され、MiB/秒単位のスループット、IOPS、平均レイテンシが確認できます。これは、ディスクの比較やアップグレードの計画に非常に役立ちます。
PowerShell を最大限に活用する: クイック IOPS とレイテンシ チェック
ディスクパフォーマンス監視用の PowerShell スクリプト
簡単なスニペットとして、Mikael Nystrom氏による古いSQLIOツールを利用するPowerShellスクリプトがあります。MicrosoftはSQLIOの公式サポートを終了しましたが、スクリプトとツールはまだオンラインで見つけることができます。少し探すだけで見つかります。
sqlio.exeとスクリプトDiskPerformance.ps1を抽出したら、次のようなコマンドを実行できます。
.\DiskPerformance.ps1 -TestFileName test.dat –TestFileSizeInGB 1 -TestFilepath C:\temp -TestMode Get-LargeIO -FastMode True -RemoveTestFile True -OutputFormat Out-GridView
このコマンドは、`C:\temp` に1GBのテストファイルを作成し、10秒の高速モードで速度テストを実行し、結果をグラフで表示します。Perfmonやストレステストを使わずに、ディスクの性能のスナップショットを取得できる便利な方法です。
このツールは大きな負荷を生成する可能性があるため、ユーザーを混乱させたくない場合は、またはパフォーマンスが本当に維持されるかどうかを確認したい場合を除き、ピーク時や実稼働システムでの実行は避けるようにしてください。
まとめ
- 特にディスクのボトルネックが疑われる場合は、継続的な監視に Perfmon カウンターを使用します。
- ストレス テストと生のパフォーマンス測定には DiskSpd をお試しください。ベンチマークに最適です。
- 簡単なテストには PowerShell スクリプトを活用しますが、ライブ システムでの負荷には注意してください。
まとめ
ディスクパフォーマンスの把握は必ずしも簡単ではなく、数値が少し分かりにくいこともあります。しかし、Perfmon、DiskSpd、そして優れたPowerShellスクリプトといったツールを使えば、ストレージの真の能力をほぼ完璧に把握できます。ボトルネックのトラブルシューティングや容量計画においては、実際のパフォーマンス数値を見ることに勝るものはありません。特にストレステスト中は、ワークロードを注意深く監視し、ハードウェア構成を考慮してデータを解釈してください。これで、推測に費やす時間を数時間短縮できるかもしれません。