以前、CrystalDiskMark 4.0の紹介を含め、SQLServerのI/Oサブシステムパフォーマンスの分析に関する記事でストレージサブシステムのメトリックとテストの基本について説明しました。 CrystalDiskMarkは最近、テストにMicrosoft DiskSpdを使用するように書き直されました。これにより、最初のストレージサブシステムのテスト作業にとってさらに価値のあるツールになります。 DiskSpdは、さまざまなディスク要求パターンを生成するために必要な機能を提供します。これは、SQLIOなどの古いベンチマークツールよりもはるかに柔軟性があり、I/Oパフォーマンスの問題の診断と分析に非常に役立ちます。 CrystalDiskMarkで利用可能なレベルよりも高いレベルの制御が必要な場合の合成ストレージサブシステムのテストに非常に役立ちます。
次に、CrystalDiskMark 4.0を使用せずに、MicrosoftDiskSpdを実際に使用してストレージサブシステムをテストする方法についてもう少し詳しく説明します。これを行うには、DiskSpdをダウンロードして解凍する必要があります。簡単にするために、私は常に目的のdiskspd.exe実行可能ファイルを適切な実行可能フォルダー(amd64fre、armfre、またはx86fre)からC:\DiskSpd
のような短く単純なパスにコピーします。 。ほとんどの場合、amd64freフォルダーから64ビットバージョンのDiskSpdが必要になります。
diskpd.exe実行可能ファイルを使用できるようになったら、管理者権限でコマンドプロンプトを開き([管理者として実行]を選択)、diskspd.exeファイルをコピーしたディレクトリに移動する必要があります。
>最初に使用するコマンドラインパラメータの一部を次に示します。
パラメータ | 説明 |
-b | I / Oのブロックサイズ。(K / M / G)として指定されます。たとえば、–b8Kは8KBのブロックサイズを意味し、SQLServerに関連しています |
-d | テスト期間(秒単位)。通常、30〜60秒のテストは、有効な結果を得るのに十分な長さです。 |
-o | ターゲットごと、ワーカースレッドごとの未処理のI / O(キューの深さを意味する) |
-t | テストファイルターゲットごとのワーカースレッド |
-h | オペレーティングシステムレベルでのソフトウェアキャッシュとハードウェア書き込みキャッシュを無効にします。これは、SQLServerをテストするための良いアイデアです |
-r | ランダムまたはシーケンシャルフラグ。 –rを使用すると、ランダムテストが実行されます。それ以外の場合は、順次テストが実行されます。 |
-w | 書き込みパーセンテージ。たとえば、–w25は25%の書き込み、75%の読み取りを意味します |
-Z | (K / M / G)として指定されたワークロードテスト書き込みソースバッファーサイズ。書き込み用のランダムデータを提供するために使用されます。これは、SQLServerのテストに適しています |
-L | テスト中にレイテンシ情報をキャプチャします。これは、SQLServerをテストするための非常に良いアイデアです |
-c | (K / M / G)として指定された指定サイズのワークロードファイルを作成します |
表1:DiskSpdの基本的なコマンドラインパラメーター
また、行の最後に、テストファイルの場所と結果のファイル名を指定することもできます。コマンドラインの例を次に示します。
diskpd –b8K –d30 –o4 –t8 –h –r –w25 –L –Z1G –c20G T:\ iotest.dat> DiskSpeedResults.txtこのサンプルコマンドラインは、T:ドライブにある20GBのテストファイルを使用して、書き込みと読み取りの比率が25%、ブロックサイズが8Kの30秒のランダムI/Oテストを実行します。 8つのワーカースレッドを使用し、それぞれに4つの未処理のI/Oと1GBの書き込みエントロピー値シードがあります。テストの結果は、DiskSpeedResults.txtというテキストファイルに保存されます。これは、SQLServerOLTPワークロードに適した一連のパラメーターです。
図1:DiskSpdのコマンドラインの例
テストの実行は、デフォルトの5秒のウォームアップ時間(測定が実際に開始される前)で開始され、その後、実際のテストは、デフォルトのクールダウン時間が0秒で、指定された時間(秒単位)で実行されます。テストが終了すると、DiskSpdはテストの説明と詳細な結果を提供します。デフォルトでは、これは、指定したファイル名を使用したテキストファイル内の単純なテキスト要約になります。このファイル名は、diskspd実行可能ファイルと同じディレクトリにあります。
ワークステーションで実行したこの特定のテストの結果は次のようになります。
図2:DiskSpdテスト結果の例
結果の最初のセクションでは、テストに使用された正確なコマンドラインを示し、次に、テストの実行に使用されたすべての入力パラメーター(実際のコマンドラインで指定されていない可能性のあるデフォルト値を含む)を指定します。 )。次に、実際のテスト時間、スレッド数、および論理プロセッサ数から始まるテスト結果が表示されます。 CPUセクションには、テスト間隔における、ユーザー時間とカーネル時間など、各論理プロセッサのCPU使用率が表示されます。
次に、テスト結果のより興味深い部分を示します。合計バイト数、合計I / O、MB /秒、1秒あたりのI / O(IOPS)、およびミリ秒単位の平均遅延を取得します。これらの結果はスレッドごとに分けられ(この場合は4つ)、合計IO、読み取りIO、および書き込みIOの結果に別々のセクションがあります。ほとんどの場合、各スレッドの結果は非常に似ているはずです。最初に各測定値の絶対値に焦点を合わせるのではなく、(コマンドラインでテストファイルの場所を変更した後)異なる論理ドライブで同じテストを実行したときの値を比較するのが好きです。これにより、パフォーマンスを比較できます。論理ドライブごとに。
テスト結果の最後のセクションはさらに興味深いものです。これは、ミリ秒単位の最小値からミリ秒単位の最大値まで、読み取り、書き込み、および合計遅延に分けられた、遅延テスト結果の分布のパーセンタイル分析を示しています。 %-ile列の「nines」は9の数を示します。ここで、3-ninesは99.9を意味し、4-ninesは99.99を意味します。高いパーセンタイル行の値が同じである理由は、このテストが総操作数が比較的少ない。より高いパーセンタイルを正確に特徴付けたい場合は、より多くの個別のI/O操作を生成するより長い期間のテストを実行する必要があります。
これらの結果で探したいのは、値が大きくジャンプするポイントです。たとえば、このテストでは、読み取りの99%のレイテンシが1.832ミリ秒以下であることがわかります。
図3:レイテンシーの結果の分布
ご覧のとおり、基本的なパラメーターの意味とその使用方法を理解すれば、DiskSpdの実行は実際には非常に簡単です。 DiskSpdは、昔ながらのコマンドラインから実行できるだけでなく、PowerShellを使用して実行することもできます。 DiskSpdは、SQLIOから取得するよりもはるかに詳細な情報も提供します。 DiskSpdを使用する上でより複雑な部分は、結果の分析と解釈です。これについては、今後の記事で取り上げます。