インテル® VTune™ プロファイラーの入出力解析を使用して、ユーザーレベルのコードをハードウェアで実行される I/O 操作に一致させます。
この解析モードでは、ハードウェア・イベントベース・サンプリング収集とシステム全体の Ftrace* 収集 を使用して、ストレージ・サブシステムとハードウェア・イベントを組み合わせた一貫したビューと、ユーザーレベルのソースコードとハードウェアによって実行される I/O 操作を簡単に対応付ける方法を提供します。
この解析アクティビティーは、カーネル・ブロック・ドライバー・サブシステムによって生成されるデータに依存します。ユーザー空間のストレージドライバーを使用する場合など、プラットフォームで非標準のブロック・ドライバー・サブシステムが使用されている場合、この解析タイプでは I/O メトリックを使用できません。
インテル® VTune™ プロファイラーは、カーネル I/O 解析に次のシステム全体のメトリックを使用します。
I/O 待機 — このシステム全体のメトリックは、スレッドが I/O 待機状態であり CPU コアがアイドル状態であった時間を表します。
I/O キューの深さ — このメトリックは、ストレージデバイスに送信された I/O 要求の数を示します。キュー内の要求数がゼロである場合、スケジュールされた要求がなく、ディスクが全くアクセスされていないことを意味します。
I/O データ転送 — このメトリックは、ストレージを読み書きしたバイト数を示します。
ページフォールト — このメトリックは、システムで発生したページフォルトの回数を示します。これは、メモリーマップされたファイルへのアクセスを解析する際に役立ちます。
CPU アクティビティー — このメトリックは、システムが以下に示す状態である時間を定義します。
アイドルステート — CPU コアがアイドル。
アクティブステート — CPU コアがスレッドを実行中。
I/O 待機 — CPU コアはアイドル状態ですが、ディスクへのアクセスによってブロックされているスレッドがこのコアで実行されている可能性があることを示します。
インテル® VTune™ プロファイラーによって収集されるすべての I/O メトリック (I/O 待機時間、I/O 待機、I/O キューの深度など) は、システム全体で収集され、ターゲット固有ではありません。
I/O 待機時間の解析は、[サマリー] ウィンドウから開始します。このウィンドウは、ターゲットシステムのパフォーマンス概要を示し、アプリケーションが I/O 依存であるか判断するのに役立つ I/O 待機時間 メトリックを提供します。
I/O 待機時間メトリックは、システムにアイドル状態のコアがある場合に、スレッドが I/O 待機状態である時間を示します。この場合、スレッド数がシステムのアイドル状態のコア数を上回ることはありません。集約された I/O 待機時間メトリックは、[ボトムアップ] ウィンドウの [タイムライン] ペインで利用可能な I/O 待機メトリックを統合します。
カーネル・サブシステムによるストレージ要求の処理速度を見積もるには、ディスク入出力分布図を参照してください。[操作タイプ] ドロップダウン・メニューを使用して、注目する I/O 操作のタイプを選択します。例えば、I/O ライトの場合、0.06 秒を超えて実行された 2~4 のストレージ要求は、低速として分類されます。
このタイプの I/O 要求の詳細を見るには、[ボトムアップ] ウィンドウに切り替えます。
[ボトムアップ] ウィンドウでは、タイムラインで注目する領域を選択して右クリックし、[選択してズームインおよびフィルターイン] コンテキスト・メニューを使用します。[サマリー] 分布図が更新され、選択した時間範囲のデータが表示されます。
この例では、アプリケーションが実行された 6 秒時点で 2~4 回の低速書き込み要求が行われています。
注目する領域にズームインすることで、すべてのメトリックを詳しく調査し、I/O 待機時間が長い原因を理解できます、
インテル® VTune™ プロファイラーはスレッドの I/O アクセスで発生した [I/O 待機] タイプのコンテキスト・スイッチ (スレッド領域の青いバー) を収集し、システム全体の [I/O 待機] メトリックを [CPU アクティビティー] 領域で提供します。このデータを使用して、I/O と計算処理のインバランスを識別します。
システム全体の I/O 待機は、システムコアがアイドル状態であり、I/O アクセスに起因するコンテキスト・スイッチにスレッドがある時間を示します。このメトリックを使用して、ストレージメディアへのパフォーマンスの依存性を予測します。
例えば、100% の [I/O 待機] メトリック値は、システムのすべてのコアがアイドル状態ですが、I/O 要求によってブロックされているスレッドがあることを意味します。この問題を解決するには、I/O タスクと並行して計算スレッドを実行するようにアプリケーションのロジックを変更します。もう一つの方法は高速なストレージを使用することです。
0% の [I/O 待機] メトリック値は次のいずれかを意味します。
ストレージアクセスでブロックされているスレッド数に関係なく、すべての CPU コアがアプリケーションのコードをアクティブに実行しています。
ストレージアクセスでブロックされているスレッドはありません。
[I/O キューの深さ] 領域を調査して、ストレージデバイスに送信された I/O 要求の数を確認します。特出した表示は要求の最大数を示します。[I/O キューの深さ] グラフのゼロ値の期間は、アプリケーションがストレージが全く使用しなかったことを示します。
低速の I/O パケットがスケジュールされた正確な時点を特定するには、I/O キューの深さメトリックの低速マーカーを有効にします。
高い帯域幅の場所を特定するには、ストレージデバイスのリード及びライトバイト数を示す [I/O データ転送] 領域を解析します。
インテル® VTune™ プロファイラーは、すべてのユーザー空間の I/O 関数をインストルメントします。低速な I/O 要求をインストルメントされたユーザー空間のアクティブに関連付けます。それには、API 呼び出しに関連するすべての呼び出しスタックを調査します。
特定の I/O 呼び出しのタスク時間コールスタックを表示するには、タイムラインで必要な [I/O API] マーカーを選択して [コールスタック] ペインでスタックを確認します。