DISKSPDでリポジトリディスクの性能をシミュレート【Veeam Backup & Replication】


ストレージの読み書き性能は、製品によってまったく異なっています。
バックアップ保存先のストレージは、目的に耐えうる性能を持っているでしょうか。
DISKSPDを使えば、リポジトリに使用しているサーバやNASのディスクの性能を確認できます。

cmd_diskspd

DISKSPDはMicrosoft社が、MITライセンスのもとオープンソースで開発しているコマンドラインツールです。(ソースコードはGithub上で確認可能です。)
CrystalDiskMarkといった著名なベンチマークソフトでもコアとして使用されています

DISKSPDは下記のMicrosoftのサイトからダウンロード可能です。
Diskspd, a Robust Storage Testing Tool, Now Publically Available

Veeamは64bitマシンにインストールされているので、amd64freフォルダ内のdiskspd.exeを使用します。

diskspd_amd64fre

ストレージに対し、指定された時間分に設定された形で読み書きを行い、その間の処理結果を表示します。基本的に、数字が大きければ性能がいいということになります。
オプションは豊富で、読み書きの割合やブロックサイズの指定、シーケンシャルIOかランダムIOかの選択なども可能です。

書き込みのみの増分バックアップや、読み書き両方が発生する差分バックアップ、読み込みだけのリストアなどの状況を想定してシミュレートできるので、これを使えば適切なバックアップモードや、あるいはリポジトリの性能に合わせたバックアップ保存先の割り振りが可能です。

  • シミュレート時はI/Oに負荷がかかっていない状況で行ってください。
    そうしない場合、正確な計測ができなくなります。
  • これはシミュレーションであるため、実際のVeeamの動作時には異なる結果となる可能性があります。

diskspdのパラメータは以下の通りとなります。

diskspd.exe [オプション] ターゲットストレージ1 [ターゲットストレージ2...]

ターゲットストレージは以下のとおりに指定します。ターゲットストレージは複数指定できるので、複数のジョブの同時実行をシミュレート可能です。

ドライブレターボリューム D:\testfile.dat
CIFS/SMB共有(NAS等)上のファイル \\nas\share\testfile.dat
ドライブとしてマウントされた
NFS共有上のファイル
N:\testfile.dat
ディスク単位 #X

※Xにはディスク管理で表示されているディスク番号を入力します。ローカルディスク、iSCSIを問いません。
また、オンライン・オフラインを問いません。このモードでは、ディスクで直接読み書きを行います。

  • ブロックサイズ-bで指定します。
    Veeamにおいてはこの値はジョブのstorage optimization設定に依存します。
    Localでは512K、WANでは128K、LANでは256K、Local+では4Mを指定することでシミュレート可能です。storage_optimization_squared

    ※ただし、リポジトリの設定でDecompress backup data blocks before storingオプションを有効化している場合、これらの数値を倍にしてください。
    decompress_squared

  • ファイルサイズ-cで指定します。
    1GBもあれば十分にI/Oのシミュレートが可能です。あまり低い値を指定するとハードウェアなどでキャッシュされてしまい、不正確な結果が出力されてしまいます。
  • テスト時間-dで指定します。
    最小でも10分間実施してください。指定は秒数単位なので-d600となります。
  • Windowsおよびハードウェアのキャッシュ機能は-hオプションをつけて無効化することを推奨します
    Veeamでは信頼性確保のためにキャッシュ機能を使用していません。
    キャッシュ機能を使用すると、レイジーライトが発生してしまうためです。
  • 発生させるI/Oのうち書き込みの割合を指定するには-wオプションを使用します。百分率で指定し、残余の部分は読み込みのI/Oとなります。
  • -rオプションを使うことで、ランダムI/Oを発生させます。-r4Kというように指定するすると、4KBでランダムI/Oを発生させます。

上記基本オプションを踏まえたうえで、Veeamのバックアップジョブのシミュレートをする設定を例示します。

Active Fullおよび増分バックアップ

diskspd.exe -c1G -b512K -w100 -h -d600 D:\testfile.dat
ファイルサイズ1GB、ブロックサイズ512K(Local)、書き込み率100%、キャッシュ無効化、テスト時間10分、テスト用ファイル保存先

  • -wオプションで100を指定すると、書き込み率が100%、読み込み率が0%となります。デフォルトでシーケンシャルI/Oを起こします。

テスト用ファイル保存先に同名のファイルがないことを確認してください。無警告で上書きされてしまいます。


差分バックアップ
diskspd.exe -c1G -b512K -w67 -r4K -h -d600 D:\testfile.dat
ファイルサイズ1GB、ブロックサイズ512K(Local)、書き込み率67%(読み込み率33%)、4KBのランダムI/O、キャッシュ無効化、テスト時間10分、テスト用ファイル保存先

  • -w67を指定することにより、差分バックアップジョブで発生する書き込み2回、読み込み1回の操作をシミュレートします。
  • -r4Kを指定することにより、4KBのランダムIOを発生させ、より現実的なシミュレーションを行います。

テスト終了後に結果が出力されますが、Total IO MB/sの数値は3で割ってください。なぜなら、すべての処理されたブロックに対し、Veeamは3回I/O操作を行う必要があり、それにより実行速度が3倍遅くなるためです。


転換オプション付き(Transform previous backup chains into rollbacks)
diskspd.exe -c1G -b512K -w50 -r4K -h -d600 D:\testfile.dat
ファイルサイズ1GB、ブロックサイズ512K(Local)、書き込み率50%(読み込み率50%)、4KBのランダムI/O、キャッシュ無効化、テスト時間10分、テスト用ファイル保存先

  • -w50を指定することで、バックアップファイル転換中に発生する書き込み2回、読み込み2回の操作をシミュレートします。
  • -r4Kを指定することにより、4KBのランダムIOを発生させ、より現実的なシミュレーションを行います。

テスト終了後に結果が出力されますが、Total IO MB/sの数値は4で割ってください。なぜなら、すべての処理されたブロックに対し、Veeamは4回I/O操作を行う必要があり、それにより実行速度が4倍遅くなるためです。


フルリストアまたはSureBackup

これは特に重複排除アプライアンスからのリストアで有用です。

最悪のシナリオは、バックアップファイル内部が重度のフラグメンテーションを起こして、大量のランダムリードI/Oを発生させているケースです。

diskspd.exe -b512K -r4K -h -d600 \\nas\share\VeeamBackups\Job\Job2014-01-23T012345.vbk
ブロックサイズ512K(Local)、4KBのランダムI/O、キャッシュ無効化、テスト時間10分、読み込む対象のバックアップファイル

  • -r4Kを指定することにより、4KBのランダムIOを発生させ、より現実的なシミュレーションを行います。
最良のシナリオは、バックアップファイル内部にフラグメンテーションがなく(つまり並列処理がまったく行われていない)、直線的なリードI/Oを発生させるケースです。

diskspd.exe -b512K -h -d600 \\nas\share\VeeamBackups\Job\Job2014-01-23T012345.vbk
ブロックサイズ512K(Local)、キャッシュ無効化、テスト時間10分、読み込む対象のバックアップファイル

双方のケースで、ターゲットとして既存のvbkファイルを選択する必要があります。読み込み操作のみが行われるのでファイルが破損する可能性はありません。


ダイレクトディスクアクセスの速度
diskspd.exe -h -d600 #X
キャッシュ無効化、テスト時間10分、対象のディスク番号

これはどのデータも上書きしないため、安全なテストです。またオフラインディスクに対しても動作します。これにより、Direct SAN accessやホットアドモードにおいて発生する最大の読み込み速度を測ることが可能です。

※ただし、実際の挙動においては、これにVDDKのオーバーヘッドも加算して考慮する必要があります。


結果は表形式で出力されます。リダイレクトを使い結果をテキストファイルで出力することも可能です。
以下の、赤枠で囲ったTotal IO・Read IO・Write IOの数値を確認します。数値が大きければ性能が良いということになります。
※他のソフトウェアによる処理などにより結果が左右されることがあるため、このテスト時には極力diskspdのみを動作させます。
result2


最後に、このツールに関連したQAを紹介します。

Q:
diskspdはNASのストレステストに使用できますか?
A:
できません。SMB共有との接続が失われると、diskspdは停止します。Wiresharkを使用するほうが適切です。

Q:
Active fullの処理は開始した段階では早いのですが、だんだん遅くなっていきます。
リポジトリはWindows Server 2008です。(R2ではありません)
windows_server_2008_repository
A:
これはWindows Server 2008のパフォーマンス問題によるものです。
2008 R2以上にアップグレードする、またはそれらのマシンにプロキシを展開してください。
CIFSリポジトリの場合、ゲートウェイおよびプロキシとして他の2008 R2サーバの使用を推奨します。
この問題自体は、diskspdを数時間実行することで検証することが可能です。
リソースモニタを使えば書き込みレートがゆっくりと低下していくのが確認できます。

Q:
どのテストを行っても4GB/s近い、かなり高いIO値を記録します。-hフラグを使ってもです。何が起きていますか?
A:
Hyper-V仮想マシン上で、仮想ディスク(.vhdx)のパフォーマンステスト目的で、diskspdを実行したときによく発生します。
データはHyper-Vホストにキャッシュされています。代わりに、.vhdxが位置しているデータストアにテストを実施してください。

関連トピックス

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください