テクニカルペーパー:オーバーフローによるCitrix Provisioning RAMキャッシュの分析

このテクニカルペーパーでは、ディスクへのオーバーフローが発生する機能 RAM キャッシュを使用する場合の RAM キャッシュサイズを正確に決定する方法について説明します。

ディスクへのオーバーフローを伴うRAMキャッシュはCitrix Provisioning(PVS)の機能であり、vDiskへの書き込みは最初にWindowsのページングされていないプールのRAMに書き込まれます。
ユーザーが指定したRAMキャッシュサイズが指定されたサイズに達すると、PVSはRAMキャッシュの内容をディスクにフラッシュして、新しいデータ用のスペースを作ります。
RAM キャッシュサイズは、ワークロードパターンやその他のバリエーションに基づいて変動します。PoolMon は、pooltag VhdRを検索して、現在の RAM キャッシュ使用量のスナップショットを撮るツールです。

このPVS機能の詳細については、 オーバーフローを伴うRAMキャッシュの使用についてこちらを参照してください

重要

この記事で説明するツールは、Provisioning Services に関する高度な知識を持つ管理者向けです。この情報は、Process Monitor (ProcMon) などの一般的に使用されるツールやプロセスを使用するだけでは不十分な、パフォーマンス関連の問題のデバッグに役立ちます。この情報により、PVSドライバーの機能をよりよく理解できます。

メモリプールモニター

PoolMon (poolmon.exe) は、Microsoft のメモリプール監視ツールを指します。
OS によって収集されたデータ (システムページングされたカーネルプールとページングされていないカーネルプールからのメモリ割り当て、およびターミナルサービスセッションに使用されたメモリプール) を表示するために使用されます。このデータは、プール割り当てタグによってグループ化されます。

非ページプールメモリでは、 PoolMon ツールを使用して、 VhdRで表されるプールタグの存在を確認できます。VhdRは RAM キャッシュの割り当てに使用されます。このタグは、プールタグVhdLとともに、ページングされていないプールメモリの RAM キャッシュに関連するデータを分析するのに役立つスクリプトを作成するときに役立ちます。

ヒント

開発者やテスターは通常、PoolMon を使用して、ドライバーの作成時やドライバーコードの変更時のメモリリークを検出したり、ドライバーのストレステストを行ったりします。
また、テストプロセスの各段階で PoolMon を使用して、ドライバのメモリ割り当てと空き操作のパターンを検証することもできます。これには、ドライバが任意の時点でどのくらいのプールメモリを使用しているかを判断する場合も含まれます。メモリプールモニターの使用方法の詳細については、 Microsoft のマニュアルを参照してください

Windows パフォーマンスアナライザの使用

Windows パフォーマンスアナライザー (WPA) は、Windows パフォーマンスレコーダー (WPR) によって記録されるイベント (特に Windows のイベントトレーシング) に関連するグラフやデータテーブルを作成できるツールです。
WPAを使用すると、PVSドライバー、ストレージスタック、およびVHDXディスクへの書き込み時に発生するパフォーマンス関連の問題に関連する問題をデバッグする際に、パフォーマンスのボトルネックを特定できます。
これらのツールを使用すると、評価を実行し、分析用のイベントトレースログファイルを開くことができます。 Windows パフォーマンス・アナライザの詳細については、Microsoft 開発者ネットワークのサイトを参照してください。

Windows パフォーマンスアナライザとProvisioning Services しくみ

PVSは、Windows用イベントトレーシング(ETW)メカニズムによってキャプチャされたイベントを生成します。この機能により、ユーザーモードアプリケーションとカーネルモードドライバーによって発生したイベントをトレースしてログに記録することができます。ETW は Windows OS に実装され、開発者が一連のイベントトレース機能を使用するための簡単な方法を提供します。詳細については、 こちらを参照してください

Windows パフォーマンスアナライザのインストール

WPA をマスターイメージにインストールする必要があります。

WPA は Windows デスクトップ OS 用の最新の SDK の一部です。WPA と WPR の両方を含むパフォーマンスツールキットを選択的にインストールできます。

Windows SDK

WPA と WPR をインストールしたら、WPR を使用して PVS ディスクとファイル I/O アクティビティをシミュレートします。このトラフィックが作成されたら、WPA を使用してデータを分析します。これらのアクションを実行するには:

  1. ターゲットデバイスで WPR を起動し、[ プロファイルの追加] をクリックします。
  2. 「プロファイルの追加」画面で、PVS 固有のテンプレートまたはプロファイルを参照します。これにより、PVSイベントプロバイダーによって生成されたイベントを受け取ることができます。使用するプロファイルは、 こちらから入手できます。プロファイルをインポートしたら、WPR 画面に戻り、分析したい追加オプションを選択し、[ 開始 ] ボタンをクリックします:

    WPR

オプションを追加して [ 開始] をクリックすると、PVSアクティビティをシミュレートできます。
この例では、小さなメモリバッファ (128 MB) を持つ新しい書き込みキャッシュが作成されます。より大きなファイル(279 MB)をC:\Users\User\Documents\test.binにコピーして、PVSドライバーに非ページプールにデータを書き込ませ、フェイルオーバーが発生したときに何が起こるかを確認します。これにより、ローカルディスクへの書き込みが開始されます(たとえば、D:\vdiskdif.vhdx)。 ファイルをコピーしてバッファの容量を強制的に超えたら、WPR でキャプチャプロセスを停止し、WPA を使用して結果を開くことができます。

  1. WPA を使用してグラフエクスプローラーを開き、「 システムアクティビティ 」を展開して「 汎用イベント」を選択します。
    次の画面を例として使用して、WriteDataセクションとWriteRamDataセクションの内容を確認してください。この情報には、D: ドライブ上の VHDX ファイル (348 ファイル) を含む 、C:\vDisk (2419 files)に書き込まれているファイルの正確な数が表示されます:

    WPR

ヒント

WriteData は RAM にキャッシュされており、ディスクにフラッシュされていないため、表示されている値よりも小さくなっています。

  1. グラフエクスプローラ画面に戻り 、[ ファイル IO ] と [ タイプ別カウント] を展開します。
    次の図は、I/O (ファイル数) の削減と、C:\Users\User\Documents\test.binと書き込みキャッシュファイルD:\vdiskdif.vhdxへの書き込みからスピルオーバーが発生するまでの時間を示しています。 このデータを使用すると、潜在的なパフォーマンスのボトルネックを確認し、PVSフィルタードライバーに問題があるかどうかを効果的に除外できます:

    WPR

  2. ファイル数と書き込み間隔 (ログファイルとスピルオーバー書き込みキャッシュの間) を確認したら、デバッグプロセスをさらに進めて、ディスクオフセットを使用してデータが最初に書き込まれる場所 (および書き込まれる場所) を把握できます。
    Windows パフォーマンスアナライザーで、グラフエクスプローラーを開き、[ システムアクティビティ ] を展開し、[ 汎用イベント] を選択します。
    列ビューを変更して、WPA ツールがさまざまなストレージレイヤーのデータ遷移を表示できるようにします。
    さらにデバッグするには、PVS環境に戻り、RAMキャッシュバッファを0 MBに設定してから、レコーダー(WPR)およびアナライザー(WPA)ツールを再実行します。
    以下の図は、ディスクへのスピルオーバーがどのように発生するかを示しています:

    WPR

テクニカルペーパー:オーバーフローによるCitrix Provisioning RAMキャッシュの分析