Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

WindowsでストレージのパフォーマンスとIOPSを測定する方法【Perfmon・DiskSpd・PowerShell】

既存または設計中のストレージシステムの性能を評価するうえで最も重要な指標の一つがIOPS(Input/Output Operations Per Second)です。簡単に言えば、IOPSとは単位時間あたりにストレージやディスク、ファイルシステムに対して実行される読み書き操作の回数のことです。この数値が大きいほどストレージの性能が高いことを示します。ただし正確な評価のためには、IOPSだけでなくレイテンシ(遅延時間)やスループットなど、他の性能特性と併せて総合的に判断することが重要です。

本記事では、Windows環境でストレージのパフォーマンス(IOPS、レイテンシ、スループット)を測定する複数の方法を紹介します。ローカルのHDDやSSDはもちろん、SMBネットワーク共有フォルダ、CSVボリューム、SAN/iSCSIストレージ上のLUNなどにも同じ手順を適用できます。

パフォーマンスモニターのディスクカウンターでストレージI/Oを計測する

Windowsに標準搭載されているパフォーマンスモニター(Performance Monitor / Perfmon)のディスクパフォーマンスカウンターを使えば、現在のストレージI/O負荷をおおよそ把握できます。データ収集の手順は以下の通りです。

  1. Perfmonを起動します。
  2. 新しいデータコレクターセットを作成し、「手動で作成する」を選択します。
  3. 「データログを作成する」→「パフォーマンスカウンター」にチェックを入れます。
  4. 新しく作成したデータコレクターセットのプロパティで、Physical Diskオブジェクトに対して以下のカウンターを追加します(特定のディスクのみ、またはすべてのローカルディスクを選択可能です)。
    • Avg. Disk Sec./Transfer
    • Avg. Disk Queue Length
    • Avg. Disk Bytes/Transfer
    • Disk Bytes/sec
    • Disk Transfers/sec
    • Split IO/sec
  5. その他の収集設定も変更できます。デフォルトでは15秒間隔でサンプリングされます。リアルタイムでディスク性能を確認したい場合は、「監視ツール」→「パフォーマンスモニター」セクションに上記カウンターを追加してください。
  6. 「開始」を選択してデータ収集を開始し、分析に十分な情報が集まるまで待ちます。その後、データコレクターセットを右クリックして「停止」を選択します。
  7. 収集したパフォーマンスデータを確認するには、「Perfmon → レポート → ユーザー定義 → Data_Disk_IO → 最新のセット」へ移動します。デフォルトではグラフ形式で表示されます。
  8. Ctrl + Gキーでレポート表示に切り替えることもできます。

Perfmonで収集したカウンター値はどのように解釈すればよいのでしょうか。ディスク/ストレージ性能を素早く分析するには、少なくとも以下の5つのカウンターに注目します。なお、分析時には現在の物理ディスク構成(RAIDやストライピングの有無、ディスクの数と種類、キャッシュサイズなど)を理解しておくことが望ましいです。

  • Disk sec/Transfer — ストレージデバイスやディスクに対する1回の読み書き操作にかかる時間(ディスクレイテンシ)。25ms(0.025秒)を超えるようであれば、ディスクアレイがI/O要求に追いついていない兆候です。高負荷サーバーでは10ms以内に抑えるべきとされています。
  • Disk Transfers/sec — (IOPS)1秒あたりの読み書き操作数。ディスクアクセスの集中度を示す主要な指標です。ディスク種別ごとの参考IOPS値は記事末尾の表を参照してください。
  • Disk Bytes/Sec — 1秒あたりのディスク合計スループット(読み取り+書き込み)。最大値はディスクの種類に依存し、一般的なHDDで150〜250MB/s、SSDでは500MB〜10GB/s程度です。
  • Split IO/sec — ディスク断片化の指標となる値で、OSが1つのI/O操作を複数のディスク要求に分割せざるを得ない状況を表します。アプリケーションが1回の転送には大きすぎるブロックを要求していることの兆候である場合もあります。
  • Avg. Disk Queue Length — キューに滞留している読み書き要求の平均数。単一ディスクの場合はキュー長が2を超えないのが理想です。4台構成のRAIDアレイならしきい値は8となります。

DiskSpdでディスク性能とIOPSをテストする

ディスク(ストレージ)システムに負荷をかけて性能を測定するツールとして、Microsoftは公式にDiskSpd(https://aka.ms/diskspd)ユーティリティを推奨しています。コマンドラインツールであり、指定したドライブをターゲットにマルチスレッドでI/O操作を実行できます。特定サーバーの最大読み書き速度やIOPSを測定する際によく利用しており、ストレージ側の性能測定にも使えます(その場合はDiskSpdがストレージへの負荷生成器として動作します)。

DiskSpdはインストール不要で、アーカイブをダウンロードしてローカルディスクに展開するだけです。x64システムではamd64freフォルダ内のdiskspd.exeを使用してください。

ディスク性能テストでは以下のようなコマンドを使用します。

diskspd.exe –c50G -d300 -r -w40 -t8 -o32 -b64K -Sh -L E:\diskpsdtmp.dat > DiskSpeedResults.txt

注意: diskspd.exeの実行中は、テスト対象システムのディスクとCPUにかなりの負荷がかかります。本番環境でユーザーへの影響を避けるため、ピーク時間帯の実行は避けてください。

  • -c50G — テストファイルサイズ50GB(ストレージコントローラーのキャッシュに収まらないよう、大きめのサイズを推奨)
  • -d300 — テスト時間(秒)
  • -r — ランダム読み書きを実行(シーケンシャルアクセスをテストする場合は-sを指定)
  • -t8 — スレッド数
  • -w40 — 書き込みと読み取りの比率(40%書き込み/60%読み取り)
  • -o32 — キューの深さ
  • -b64K — ブロックサイズ
  • -Sh — キャッシュを使用しない
  • -L — レイテンシを測定
  • E:\diskpsdtmp.dat — テストファイルのパス

ストレステスト完了後、出力されたテーブルから平均的なストレージ性能値を読み取れます。筆者のテストでは以下の結果(Total IOテーブル)が得られました。

  • MiB/s — 241(約252MB/sで悪くない水準)
  • IOPS — 3866(十分な性能)
  • 平均レイテンシ — 66.206ms(かなり大きめの遅延)

Read IOセクションとWrite IOセクションを見れば、読み取り専用・書き込み専用の個別値も取得できます。複数のディスクやストレージLUNをDiskSpdでテストして比較すれば、用途に応じた最適な性能を持つアレイを選定することも可能です。

PowerShellでIOPS・スループット・レイテンシを測定する方法

Microsoft MVPのMikael Nystrom氏が公開しているPowerShellスクリプトを使う方法もあります。これはファイルストレージ性能テストツールSQLIO.exeのラッパーとして機能するものです。

補足: Microsoftは2015年12月にSQLIOのサポート終了を発表し、より汎用的なDiskspdへの移行を促すため、配布ファイルをサイトから削除しました。そのためsqlio.exeは自身で探すか、スクリプト同梱のアーカイブから入手してください。

SQLIO.exeとDiskPerformance.ps1の2ファイルを含むアーカイブをダウンロードし、任意のフォルダに展開します。

PowerShellスクリプトでディスク性能とIOPSを評価する実行例は以下の通りです。

.\DiskPerformance.ps1 -TestFileName test.dat –TestFileSizeInGB 1 -TestFilepath C:\temp -TestMode Get-LargeIO -FastMode True -RemoveTestFile True -OutputFormat Out-GridView

主な引数の意味は次の通りです。

  • –TestFileName test.dat — FSUTILツールで作成されるテストファイルの名前
  • –TestFileSizeInGB 1 — テストファイルサイズ。1.5、10、50、100、500、1000GBから選択可能。ストレージシステムのキャッシュサイズより大きくしないと、ディスクではなくキャッシュのIOPSを測ってしまうので注意
  • -TestFilepath C:\Temp — 測定対象ディスクとテストファイル作成先フォルダを指定。SMBネットワーク共有フォルダへのUNCパスも指定可能
  • -TestMode Get-LargeIO — I/O測定モードは2種類。Get-SmallIOはIOPS測定用(ランダムアクセス・8KBブロック)、Get-LargeIOは転送速度測定用(シーケンシャルアクセス・512KBブロック)
  • -FastMode True — Fastモードでは各テスト10秒で実行。Falseの場合は60秒かかる
  • -RemoveTestFile True — テスト終了後にテストファイルを削除
  • -OutputFormat Out-GridView — 結果表示形式。PowerShellコンソール(Format-Table)または別ウィンドウのグリッド表示(Out-Gridview)から選択

筆者の検証環境(SAN接続のHP MSA 2040上のVMFSデータストアにあるvmdk仮想ディスク)では、平均IOPS約15,000、スループット約5Gbit/sという結果が得られました。

ディスク種別ごとの参考IOPS値

タイプIOPS
SSD(SLC)6000
SSD(MLC)1000
15K RPM HDD175〜200
10K RPM HDD125〜150
7.2K RPM HDD50〜75
10K RPM×6台のRAID51000

主要Microsoftサービスに必要なIOPSの目安

代表的なMicrosoftサービスに求められるディスク性能(IOPS)の推奨値も参考までに紹介します。

  1. Microsoft Exchange 2010:ユーザー5,000人(1人あたり1日75通受信・30通送信)の場合、最低3,750IOPSが必要。
  2. Microsoft SQL Server 2008:毎秒3,500SQLトランザクション(TPS)を処理する場合、28,000IOPSが必要。
  3. 一般的なWindowsアプリケーションサーバー:ユーザー10〜100人規模で10〜40IOPS程度。
  1. Windows 10/8/7/XPでディスク容量を分析して空き容量を増やす方法

    パソコンの動作を改善したいなら、まずハードウェアではなくディスクの空き容量に注目してみましょう。実は、ディスク容量の不足はパソコンの動作を大幅に遅くする原因になります。気づかないうちにストレージがいっぱいになり、「十分なディスク領域がありません」というポップアップが表示されて初めて異変に気づくケースも少なくありません。 このような問題に直面している場合は、Disk Analyzer Proの活用がおすすめです。Windowsのディスク使用状況全体をスキャン・分析し、空き容量を確保するための操作をサポートしてくれるユーティリティアプリです。 Windowsのディスク容量を分析できる「Disk

  2. Windows 10でパスワードリセットディスクを作成・使用する方法

    セキュリティへの関心が高まる昨今、PCには強固なログインパスワードを設定する人が増えています。セキュリティ確保の観点からは必要不可欠な対策ですが、その反面、数多くのパスワードをすべて記憶しておくのは容易ではありません。 そんな中、Windows 10のPCにログインしようとしてEnterキーを押した瞬間、「パスワードが正しくありません」というメッセージが表示された経験はありませんか。考えられる組み合わせをすべて試してもログインできず、残された唯一の解決策がWindowsのパスワードリセットというケースも少なくありません。 そこで次に浮かぶ疑問は、「既存のログインパスワードを入力せずに、どうやっ