SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Diskpsd についてのメモ

leave a comment

国内では、CrystalDiskMark で使用されていることで有名かと思いますが、Microsoft から DiskSpd というストレージのベンチマーク用のプログラムが公開されています。
◇CrystalDiskMark 4 リリースにあたって
英語にはなりますが、いくつか公開されていますのでメモを残しておきたいと思います。
日本語ですと以下の情報でしょうか。
DiskSpd が凄い!!
Re:NVMe SSD使用時のCrystalDiskMark 4.0.3の不具合
DISKSPDでリポジトリディスクの性能をシミュレート【Veeam Backup & Replication】
海外の情報ですと、以下になるかと。
Automating Storage Benchmarking with DiskSpd and PowerShell
DiskSpd, PowerShell and storage performance: measuring IOPs, throughput and latency for both local disks and SMB file shares

DiskSpd は SQL Server 向けの I/O 測定にも使用することができます。
計測時に、FILE_FLAG_NO_BUFFERING / FILE_FLAG_WRITE_THROUGH のフラグ設定をすることができますので、このオプションを設定することで、SQL Server を想定した I/O 測定を実施することができます。。

SQL Server では、SQLIOSim というツールがありますが、このツールの解説にこれらのフラグについても触れられています。SQLIOSim ユーティリティを使用して、ディスク サブシステム上の SQL Server の動作をシミュレートする方法

NoBuffering
true
FILE_FLAG_NO_BUFFERING オプションを使用します。
FILE_FLAG_NO_BUFFERING を使用して SQL Server がデータベース ・ ファイルを開きます = true です。FILE_FLAG_NO_BUFFERING を使用して、いくつかのユーティリティとサービス、分析サービスの場合は、false を = =。サーバーを十分にテストするには、設定ごとに 1 つのテストを実行します。
ライトスルー
true
せずに FILE_FLAG_WRITE_THROUGH オプションを使用します。
せずに FILE_FLAG_WRITE_THROUGH を使用して SQL Server がデータベース ・ ファイルを開きます = true です。ただし、いくつかのユーティリティとサービス、データベースでファイルを開くせずに FILE_FLAG_WRITE_THROUGH を使用して false を = =。SQL Server Analysis Services がせずに FILE_FLAG_WRITE_THROUGH を使用してデータベース ファイルを開き、false を = =。サーバーを十分にテストするには、設定ごとに 1 つのテストを実行します。

SQLIOSim を使用した場合、これらのフラグは Ture になっていることが記載されています。
SQL Server では、中間キャッシュをスルーしてディスクに書き込みを行うため、FILE_FLAG_WRITE_THROUGH が有効になっていることが INF: SQL Server でディスク ドライブのキャッシュを使う。 に記載されています。
# 古い SQL Server の情報ですが、最新の SQL Server についても同様の動作です。
基本的なコマンドとしては以下のような形でしょうか。

シーケンシャルリード
Diskspd.exe -c1G -b256K -F1 -o1 -L -h -s -d60  E:\test.dat
シーケンシャルライト
Diskspd.exe -c1G -b256K -F1 -o1 -L -h -s -w100 -d60 E:\test.dat
ランダムリード
Diskspd.exe -c1G -b256K -F1 -o1 -L -h -r  -d60 E:\test.dat
ランダムライト
Diskspd.exe -c1G -b256K -F1 -o1 -h -L -r -w100 -d60 E:\test.dat
複数ファイル
Diskspd.exe -c1G -b256K -F1 -o1 -h -L -s  -d60 E:\test.dat F:\test.dat
環境によってはシーケンシャルは -s ではなく-si で設定する必要がある。

 
SQL Server 向けの設定としては、 -h オプションを使用して、上述のフラグを有効にした状態で測定します。
複数ファイルに対して負荷を発生させる場合、「-F」「-t」のどちらを使用するかでスレッド数が異なってきます。
-F の場合はトータルで指定したスレッド数になるように I/O を発生させますが、-t については各ファイルについて指定したスレッド数で I/O を発生させますので、4 スレッドと設定し、2 ファイルに対して I/O を発生させた場合は、

  • -F : ファイル A : スレッド 0,1,2,3 / ファイル B : スレッド 0,1,2,3 = 合計 4 スレッド
  • -t : ファイルA : スレッド 0,1,2,3 / ファイル B :スレッド4,5,6,7 = 合計 8 スレッド

となります。
設定については XML に記載することができます。
Diskspd は添付のドキュメントが充実しており、その中に XSD が入っていますが、そこから XML を生成するのは大変ですので、「-Rxml」のオプションを設定して実行し、実行結果に出力される XML を使用したほうが楽かと。 までを XML として使用すれば、同様のテストを複数回するときに設定を外部ファイルとしておくことができます。

Diskspd.exe -c1G -b256K -t4 -o1 -h  -s -Rxml -d1 E:\test.dat
<Profile>
<Progress>0</Progress>
<ResultFormat>xml</ResultFormat>
<Verbose>false</Verbose>
<TimeSpans>
<TimeSpan>
<CompletionRoutines>false</CompletionRoutines>
<MeasureLatency>false</MeasureLatency>
<CalculateIopsStdDev>false</CalculateIopsStdDev>
<DisableAffinity>false</DisableAffinity>
<GroupAffinity>false</GroupAffinity>
<Duration>1</Duration>
<Warmup>5</Warmup>
<Cooldown>0</Cooldown>
<ThreadCount>0</ThreadCount>
<IoBucketDuration>1000</IoBucketDuration>
<RandSeed>0</RandSeed>
<Targets>
<Target>
<Path>E:\test.dat</Path>
<BlockSize>262144</BlockSize>
<BaseFileOffset>0</BaseFileOffset>
<SequentialScan>false</SequentialScan>
<RandomAccess>false</RandomAccess>
<UseLargePages>false</UseLargePages>
<DisableAllCache>true</DisableAllCache>
<WriteBufferContent>
<Pattern>sequential</Pattern>
</WriteBufferContent>
<ParallelAsyncIO>false</ParallelAsyncIO>
<FileSize>1073741824</FileSize>
<StrideSize>262144</StrideSize>
<InterlockedSequential>false</InterlockedSequential>
<ThreadStride>0</ThreadStride>
<MaxFileSize>0</MaxFileSize>
<RequestCount>1</RequestCount>
<WriteRatio>0</WriteRatio>
<Throughput>0</Throughput>
<ThreadsPerFile>4</ThreadsPerFile>
<IOPriority>3</IOPriority>
</Target>
</Targets>
</TimeSpan>
</TimeSpans>
</Profile>

 
近々使う予定があるのでメモとして。

Share

Written by Masayuki.Ozawa

8月 17th, 2015 at 12:04 am

Posted in SQL Server

Tagged with

Leave a Reply