トレース機能は、カーネル コードをインストルメント化したり gdb
を使用したりする必要なしに、シミュレーション ハングのデバッグに使用されます。トレース機能は、外部テストベンチでは使用できません。2 つの使用モデルがあります。
最初の使用モデルは、外部テストベンチを使用しないスタンドアロン x86 シミュレーションに適用されます。x86 シミュレータでデッドロックが検出されると、デザインがデッドロック状態になったことを示すメッセージが表示され、シミュレーションが終了し、トレース オプションをイネーブルにしてシミュレーションを再実行することが推奨されます。トレース オプションをイネーブルにしてシミュレーションを再度実行すると、シミュレーション中に発生したイベントに関するテキスト レポートが生成されます。このレポートは、デッドロックの根本的な原因を特定するのに役立ちます。根本的な原因は、シミュレーション プラットフォームのデータ ファイルの入力データが不十分であるというような単純なものから、より複雑なものがあります。
2 番目の使用モデルは、--trace
および --timeout=secs
オプションをイネーブルにしたシミュレーションに適用されます。タイムアウトに達すると、シミュレータが終了し、トレース レポートが生成されます。最初の使用モデルと同様に、トレース レポートを解析すると、デッドロックの根本的な原因を特定するのに役立ちます。
次のオプションがあります。
-
--trace
: シミュレーションの最後に完全なトレース レポートを生成します。 -
--trace-print
: シミュレーションの実行中にコンソールに出力が表示されるようにします。
トレース レポートの内容
トレース レポートには、x86 シミュレータでのデザインのシミュレーション中に発生したイベントのシーケンスが表示されます。生成されたファイルの名前は x86simulator_output/trace/x86sim_event_trace.data.txt
です。記録されるイベントの種類は、次のとおりです。
- カーネル反復の開始
- カーネル反復の終了
- ストリーム ストールの開始 (データ不足のためにブロックされたカーネルのストリーム ポートからの読み出しの開始)
- ストリーム ストールの終了 (ブロックされていたストリーム ポートからの読み出しが回復した時点)
- ロック ストールの開始 (ロックできないウィンドウ ポートを取得しようとし始めた時点)
- ロック ストールの終了 (ブロックされていたウィンドウ ポートの取得が回復した時点)
--trace-print と --trace の出力の比較
--trace-print
の出力は、--trace
で生成されるファイルのようにきちんとフォーマットされていません。シミュレーションで何が起こっているかをすばやく確認する場合、または --timeout=secs
ではなく CTRL-C
でシミュレーションを終了する場合は、--trace-print
を使用します。
--trace-print
の出力の列には、次の情報が表示されます:
- タイムスタンプ:
x86sim_event_trace.data.txt
と同じです。 - カーネルの内部名 (
x86sim_event_trace.data.txt
ではユーザー名を使用)。 - イベント タイプ。
- イベント タイプによって意味が異なる数値。ロックまたはストリーム ストールを待機しているポートをエンコードします。反復イベントの開始の反復番号をエンコードします。