インテル® VTune™ プロファイラー・ユーザーガイド
インテル® VTune™ プロファイラーの入出力解析で提供されるプラットフォーム・レベルのメトリックを理解します。
入出力解析タイプは、プラットフォーム・レベルの解析向けに次のメトリックを提供します。
PCIe* とプラットフォーム・レベル IO トラフィック
DRAM 帯域幅
インテル® Ultra Path インターコネクト (インテル® UPI) 利用率
これらメトリックを使用して、次のことを行うことができます。
PCIe* トラフィック解析
DRAM 帯域幅の消費を監視
非効率なリモートソケットのアクセスによって引き起こされる I/O パフォーマンスの問題を特定
アウトバウンド PCIe* トラフィックの原因を特定
このようなパフォーマンスの問題を特定するには、次のオプションを有効にして入出力解析を実行します。
FreeBSD* では、入出力解析は MMIO アクセスを除くすべてのプラットフォーム・レベルのメトリックをサポートします。前提条件と制限事項については、入出力解析のトピックを参照してください。
データ収集が完了すると、インテル® VTune™ プロファイラーはデフォルトで [サマリー] ウィンドウを開きます。
[サマリー] ウィンドウの [プラットフォーム図] セクションから調査を開始します。[プラットフォーム図] には、PCIe* 、インテル® UPI リンク、DRAM および物理コアのシステムトポロジーと利用率メトリックが表示されます。
[プラットフォーム図] は、インテル® マイクロアーキテクチャー (開発コード名 Skylake) ベースの最大 4 ソケットのサーバー・プラットフォーム以降で利用できます。
物理的な PCIe* デバイスは、PCI バスとデバイス番号からなる短縮名で表示されます。デバイスのツールチップには、デバイスの完全名、リンク機能、ステータスが表示されます。デバイスのイメージ画像にカーソルを合わせると詳細情報が表示されます。
プラットフォーム図は、スループットが制限される原因となる可能性があるデバイス状態の問題を示しています。典型的な問題は、設定されたリンク速度/幅がデバイスの最大速度/幅と一致しないことです。
各デバイスのリンクは、使用可能な物理的な帯域幅とデータ転送に消費される帯域幅の比率を表す有効なリンク利用率メトリックに分類されます。このメトリックは、プロトコルのオーバーヘッド (TLP ヘッダー、DLLP、物理エンコード) を考慮せず、ペイロードの観点からのリンク利用率が反映されます。そのため 100% になることはありません。しかし、これはリンクが飽和状態からどのくらい離れているかを知る手がかりになります。最大理論帯域幅は、デバイスのツールチップに表示されるデバイスのリンク機能に対して計算されます。
プラットフォーム図は、[解析の設定] で [DRAM の最大帯域幅を評価] チェックボックスを選択すると [最大 DRAM 帯域幅] を表示します。それ以外は、[平均 DRAM 利用率] を示します。
平均 UPI利用率メトリックは、送信の観点から UPI 利用率を示します。プラットフォーム図では、パッケージのペアを接続する UPI リンク数に関わりなく、単一のソケット間接続が示されます。複数のリンクが存在する場合、最大値が示されます。
各ソケットの上部に表示される [平均物理コア利用率] メトリックには、解析されるアプリケーションの計算による物理コアの利用率が示されます。
トポロジーと利用率を調査したら、プラットフォームのパフォーマンス詳細にドリルダウンします。
プラットフォーム上の PCIe* トラフィックを照査するには、[サマリー] ウィンドウの [PCIe* トラフィックのサマリー] セクションから始めます。これらの上位レベルのメトリックは、インバウンドとアウトバウンドの PCIe* トラフィックの合計を反映します。
インバウンド PCIe* 帯域幅は、 システムメモリーにライトとリードを行う PCIe* デバイスによって引き起こされます。これらメトリックは、インテル® マイクロアーキテクチャー開発コード名 Sandy Bridge EP 以降を搭載するサーバー・プラットフォームでのみ利用できます。
インバウンド PCIe* リード — PCIe* デバイスはプラットフォーム・メモリーから読み取りを行います。
インバウンド PCIe* ライト — PCIe* デバイスはプラットフォーム・メモリーに書き込みを行います。
アウトバウンド PCIe* 帯域幅は、PCIe* デバイスのメモリーまたはレジスターに対するコア・トランザクションによって引き起こされます。通常、コアはメモリーマップド I/O (MMIO) アドレス空間を介してデバイスメモリーにアクセスします。これらメトリックは、インテル® マイクロアーキテクチャー開発コード名 Broadwell EP 以降を搭載するサーバー・プラットフォームでのみ利用できます。
アウトバウンド PCIe* リード — コアはデバイスのレジスターから読み取ります。
アウトバウンド PCIe* ライト — コアはデバイスのレジスターに書き込みます。
インテル® マイクロアーキテクチャー開発コード名 Skylake 以降を搭載するサーバー・プラットフォームでは、インバウンドとアウトバウンド PCIe* 帯域幅メトリックをデバイスごとに収集できます。デバイスごとのメトリック属性を取得するには、サンプリング・ドライバーをロードするか、カーネルバージョン 5.10 以降で Linux* perf ベースの収集を行う、または root 権限でインテル® VTune™ プロファイラーを実行します。
[ボトムアップ] または [プラットフォーム] タブのタイムラインで、デバイスごとに インバウンドとアウトバウンドの PCIe* 帯域幅 を時系列に解析できます。
アプリケーションがインテル® DDIO を効率良く利用しているか理解するには、PCIe* トラフィックのサマリー セクションの 2 階層目のメトリックを調査します。
インバウンド PCIe* 要求の L3 ヒット/ミス比率は、IO デバイスからシステムメモリーへの要求のうち、L3 キャッシュにヒットしたものとミスしたものの比率を表します。
インテル® DDIO の利用効率の詳細については、インテル® データダイレクト I/O テクノロジーの有効な利用 (クックブックのレシピ) を参照してください。
L3 ヒット/ミスのメトリックは、インテル® Xeon® プロセッサー・開発コード名 Haswell 以降で利用できます。サンプリング・ドライバーのロードは必須です。
インバウンド PCIe* リード/ライトグループの平均レイテンシーメトリックは、 プラットフォームが単一のキャッシュラインのインバウンドのリード/ライト要求の処理に費やす平均時間を示します。
コア/IO 競合比率は、CPU コアと I/O コントローラー間でキャッシュラインの競合が発生したインバウンドの PCIe* 書き込み要求の一部を示します。このような競合は、キャッシュラインのスヌーピングが原因で発生します。これにより、特定の条件下で I/O コントローラーがそのキャッシュラインの所有権を失う可能性があります。これにより、I/O コントローラーはそのキャッシュラインを再取得します。この問題は、ポーリング通信モデルを採用するアプリケーションで発生する可能性があり、その結果スループットとレイテンシーが適切ではなくなります。この問題を解決するには、UEFI/BIOS の統合 I/O 設定の [Snoop Response Hold Off] オプションを調整することを検討してください (オプション名はプラットフォームの製造元によって異なります)。
インバウンド PCIe* リード/ライトの平均レイテンシー、およびコア/IO 競合メトリックは、インテル® Xeon® プロセッサー開発コード名 Skylake 以降で利用できます。サンプリング・ドライバーのロードは必須です。
[ボトムアップ] ペインの [パッケージ/M2PCIe*] グループを使用して、デバイスごとのインバウンドとアウトバウンド・トラフィック、L3 にヒットおよびミスしたインバウンド要求、平均レイテンシー、およびコア/IO 競合を内訳を取得できます。
[サマリー] タブの PCIe* トラフィックのサマリー セクションに表示されるアウトバウンド PCIe* トラフィックは、PCIe* デバイスのメモリーとレジスターをコアが読み書きすることで発生します。
通常、コアはメモリーマップド I/O (MMIO) アドレス空間を介して PCIe* デバイスのメモリーにアクセスします。PCIe* デバイスにマッピングされた MMIO アドレス空間のロードまたはストア操作によって、それぞれ PCIe* のリードまたはライトのアウトバウンド・トランザクションが発生します。そのようなロードとストアは、PCIe* デバイスのアクセス・レイテンシーの影響を受けるため、かなりコストがかかります。そのため、高いパフォーマンスを達成するには、このようなアクセスを最小限にする必要があります。
[解析の設定] で [MMIO アクセスを特定] オプションを有効にして、アウトバウンド・トラフィックのソースを検出します。MMIO アクセスのセクションから、特定の PCIe* デバイスの MMIO リード と MMIO ライト を実行する関数を検索します。
[ボトムアップ] ペインを使用して、メモリーマップド PCIe* デバイスのアクセス元を特定します。コールスタックを調査して、[ソースとアセンブリー] ビューにドリルダウンします。
関数名をダブルクリックすると、[ソース] または [アセンブリー] ビューに移動し、MMIO の読み取りと書込みを行うコードをソース行レベルで検出できます。
MMIO アクセスデータは、[MMIO アクセスを特定] チェックボックスを選択している場合にのみ収集されます。しかし、いくつかの制限があります。
この機能は、インテル® マイクロアーキテクチャー (開発コード名 Skylake) ベースのサーバー・プラットフォーム以降で利用できます。
[プロセスにアタッチ] と [アプリケーションを起動] 収集モードでのみサポートされます。
アプリケーションのトポロジーが最適でない場合、DRAM とインテル® QuickPath インターコネクト (インテル® QPI) またはインテル® Ultra Path インターコネクト (インテル® UPI) のソケット間でトラフィックが発生し、パフォーマンスを制限する可能性があります。
[プラットフォーム] タブを使用して、インバウンドの PCIe* トラフィックと DRAM およびソケット間のインターコネクト帯域幅を関連付けることができます。
インテル® VTune™ プロファイラーはチャンネルごとのDRAM 帯域幅の内訳を示します。
UPI トラフィック向けに 2 つのメトリックが用意されています。
UPI リンクごとに UPI メトリックの内訳を取得できます。プロセッサーの仕様を参考にして、プロセッサーの各ソケットで有効な UPI リンク数を確認してください。
UPI リンク名は、接続されているソケットと I/O コントローラーを示し、システムのトポロジーを明確にします。
以下は、インテル® マイクロアーキテクチャー開発コード名 Skylake をベースとするインテル® プロセッサーを搭載する、4 ソケットのサーバー・プラットフォームで収集された結果の例です。データは、ソケット 3 に接続されたリンクで帯域幅がはるかに高い、UPI トラフィックのインバランス状態を示しています。