メモリ アクセス違反および Valgrind - 2023.2 日本語

AI エンジン ツールおよびフロー ユーザー ガイド (UG1076)

Document ID
UG1076
Release Date
2023-12-04
Version
2023.2 日本語

メモリ アクセス違反は、カーネルがオブジェクトの範囲外に対して読み出しまたは書き込みを実行したり、または初期化されていないメモリを読み出したりすると発生します。これは、シミュレータのクラッシュまたはハングなど、複数の方法で現れます。また、シミュレータの結果が再現不可能なものになることもあります。x86simulator --valgrind オプションを使用すると、カーネル ソース コードのメモリ アクセス違反が検出されます。

注記: この機能を使用するには、Valgrind がインストールされている必要があります。AMD では、Valgrind バージョン 3.16.1 およびそれ以上を使用することをお勧めします。

このオプションは、Valgrind を使用した x86 シミュレーション中にカーネル ソース コードのメモリ アクセス違反を検出します。次のアクセス違反を検出できます。

  • 範囲外の書き込み
  • 範囲外の読み出し
  • 初期化されていないメモリの読み出し

このオプションを使用するには、次の 2 つの方法があります。

x86simulator --valgrind
アクセス違反検出をオンにしてシミュレーションを実行します。シミュレーションの最後に、Valgrind でアクセス違反に関するレポートが表示されます。何もない場合は、レポートの最後に「ERROR SUMMARY: 0 errors from 0 contexts」と表示されます。それ以外の場合は、検出された各アクセス違反がレポートにリストされます。これには、スタック トレースが含まれており、アクセス違反が発生したカーネル ソース コードの行番号がハイライトされます。
x86simulator --valgrind-gdb
アクセス違反検出をオンにしてシミュレーションを実行し、GDB を使用してデバッグします。シミュレーションが GDB に表示され、main() で停止します。この時点で、追加のブレークポイントを設定できます。続行すると、アクセス違反が検出されたときにシミュレーションが停止します。この時点で、ローカル変数およびスタックを調べて、問題を診断できます。

いずれの場合も、flag --valgrind-args='list of arguments for valgrind' を使用して Valgrind コマンドに引数を追加できます。次に例を示します。

--valgrind-args='-v --leak-check=no --track-origins=yes'

これではメモリ リークは検出されず、アクセス違反が検出されたときにスタック全体が表示されます。

注記: Valgrind オプションを使用して x86simulator を実行すると、シミュレーション実行時間が長くなります。