AXI 違反のためカーネルがハングする - 2023.2 日本語

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2023-12-13
Version
2023.2 日本語
カーネルとメモリ コントローラー間の AXI トランザクションが無効であるため、カーネルがハングする可能性があります。これらの問題をデバッグするには、カーネルをインストルメント化する必要があります。
  1. Vitis コア開発キットには、v++ リンク (--link) 時に適用可能なインストルメンテーション オプションが 2 つあります。これらのオプションは両方ともインプリメンテーションにハードウェアが追加されるので、リソース使用率に基づいてインストルメンテーションを制限する必要があることがあります。
    1. 軽量 AXI プロトコル チェッカー (lapc) を追加します。これらのプロトコル チェッカーは、--debug オプション で説明するように、-–debug.protocol オプションで追加されます。次の構文を使用します。
      --debug.protocol <compute_unit_name>:<interface_name>
      通常、<interface_name> の使用はオプションです。指定しない場合、CU のすべてのポートが解析されます。プロトコル チェッカーが挿入されるように定義するには、--debug.protocol オプションを使用します。このオプションでは、<compute_unit_name> および <interface_name> のいずれかまたは両方に、キーワード all を使用できます。
      注記: 1 つのコマンド ラインまたはコンフィギュレーション ファイルに複数の --debug.xxx オプションを指定できます。
    2. パフォーマンス モニター (am, aim, asm) を追加すると、詳細な通信統計 (カウンター) のリストがイネーブルになります。これはパフォーマンス解析に最も役立ち、未処理のポート アクティビティのデバッグにおいて有益な情報を得ることができます。パフォーマンス モニターを追加するには、--profile オプション で説明するように、--profile オプションを使用します。--profile オプションの基本的な構文は、次のとおりです。
      --profile.data <krnl_name>|all:<cu_name>|all:<intrfc_name>|all:<counters>|all
      パフォーマンス モニターを接続する特定のインターフェイスを決定するには、3 つのフィールドが必要ですが、リソース消費が問題ではない場合は、all キーワードを使用すると、1 つのオプションで既存のカーネル、演算ユニット、インターフェイスすべてを監視できるよう設定できます。または、kernel_namecu_name、および interface_name を明示的に指定してインストルメンテーションを制限します。
      最後のオプション <counters>|all は、大型デザインで情報の収集を counters に制限するか、all (デフォルト) を指定して実際のトレース情報が収集されるようにします。
      注記: 1 つのコマンド ラインまたはコンフィギュレーション ファイルに複数の --profile オプションを指定できます。
      [profile]
      dataernel1:cu1:m_axi_gmem0 
      dataernel1:cu1:m_axi_gmem1 
      dataernel2:cu2:m_axi_gmem
      
  2. アプリケーションをビルドし直したら、追加した AIM IP および LAPC IP を含め、xclbin を使用してホスト アプリケーションを実行し直します。
  3. アプリケーションがハングしたら、xbutil examine を使用してエラーや異常を確認します。
  4. 次のように AIM 出力を確認します。
    • 次のコマンドを数回実行して、動いているカウンターがあるかを確認します。カウンターが動いている場合、カーネルはアクティブです。
      xbutil examine -d <bdf> -r debug-ip-status -e aim
      ヒント: AIM 出力のテストは、GDB デバッグでも xstatus aim コマンドを使用してサポートされます。
    • カウンターが止まっている場合、未処理のカウントが 0 より大きいということは、AXI トランザクションにハングしているものがある可能性があります。
  5. 次のように LAPC 出力を確認します。
    • 次のコマンドを実行して、AXI 違反がないかどうかを確認します。
      xbutil examine -d <bdf> -r debug-ip-status -e lapc
      ヒント: LAPC 出力のテストは、GDB デバッグでも xstatus lapc コマンドを使用してサポートされます。
    • AXI 違反がある場合は、カーネル インプリメンテーションに問題があることを意味します。