EN JA
KTR(4)
KTR(4) FreeBSD Kernel Interfaces Manual KTR(4)

名称

ktrカーネルトレース機能

書式

options KTR
options ALQ
options KTR_ALQ
options KTR_COMPILE=(KTR_LOCK|KTR_INTR|KTR_PROC)
options KTR_CPUMASK=0x3
options KTR_ENTRIES=8192
options KTR_MASK=(KTR_INTR|KTR_PROC)
options KTR_VERBOSE

解説

ktr 機能は、デバッグするとき、後で検査することができるように、カーネルが実行している間、カーネルイベントをログに記録できるようにします。 ktr を有効にする唯一の強制的なオプションは、“ options KTR”です。

KTR_ENTRIES オプションは、イベントのバッファのサイズを設定します。現在実行しているカーネルにおけるバッファのサイズは、sysctl debug.ktr.entries を通して見つけることができます。デフォルトでは、バッファは、1024 のエントリを含んでいます。

イベントマスキング

イベントレベルは、過度でやり過ぎの冗長なロギングの整備を有効にするかまたは無効にすることができます。まず最初に、イベントのマスクは、実際にカーネルにコンパイルされるイベントを制限する KTR_COMPILE オプションを通してコンパイル時に指定されます。このオプションのデフォルト値は、すべてのイベントを有効にします。

次に、カーネルが走っている間にログに記録された実際のイベントは、ランタイムイベントマスクによってさらにマスクすることができます。 KTR_MASK オプションは、ランタイムイベントマスクのデフォルト値を設定します。また、ランタイムイベントマスクは、 debug.ktr.mask 環境変数を通して loader(8) によって設定することができます。 debug.ktr.mask sysctl を通してブート後にそれを調べて、設定することもできます。デフォルトでは、ランタイムマスクは、あらゆるトレースをブロックするために設定されます。イベントマスクビットの定義は、 < sys/ktr.h> で見つけることができます。

その上に、 KTR_CPUMASK オプションによってデフォルト値を変えることができる CPU イベントマスクがあります。 KTR_CPUMASK への 2 つ以上のパラメータが使用されるとき、それらが空白類によって区切られないことは、重要です。 CPU には、ログに記録されるときに生じるイベントのためにこのビットマスク中の論理的な ID セットに対応するビットがなければなりません。このマスクは、 debug.ktr.cpumask 環境変数を通して loader(8) によって設定することができます。 debug.ktr.cpumask sysctl を通してブート後にそれを調べて、設定することもできます。デフォルトで、 KTR_CPUMASK で指定された CPU だけがイベントをログ記録します。詳細については、 sys/conf/NOTES を参照してください。

冗長モード

デフォルトでは、イベントは、後の検査のために内部のバッファにログが記録されるだけですが、冗長なフラグが設定されるなら、それらは、またカーネルコンソールにダンプされます。このフラグは、 debug.ktr.verbose 環境変数を通して loader でも設定でき、または debug.ktr.verbose sysctl を通してブート後にそれを調べて、設定することもできます。フラグがデフォルトの 0 に設定されるなら、冗長な出力は、無効にされます。フラグが 1 に設定されるなら、ログメッセージの内容と CPU 番号がカーネルコンソールに印刷されます。フラグが 1 より大きいなら、イベントのファイル名と行番号は、ログメッセージと CPU 番号を加えてコンソールへ出力されます。 KTR_VERBOSE オプションは、フラグを 1 に設定します。

イベントの調査

KTR バッファは、 show ktr [ /vV]コマンドを通して ddb(4) 内から調査することができます。このコマンドは、トレースバッファの内容を一度に 1 ページ表示します。“ --more--”プロンプトで、Enter キーを入力すればもうひとつのエントリとプロンプトを再び表示します。スペースバー (空白) を入力すればもう 1 ページのエントリを表示します。たのいかなるキーも終了しま。デフォルトで、タイムスタンプ、ファイル名、および行番号は、各ログのエントリと共に表示されません。 /v 修飾子が指定されるなら、それらは、通常の出力に加えて表示されます。 /V 修飾子が指定されるなら、通常の出力に加えて、タイムスタンプが表示されます。イベントが逆の年代順に表示されることに注意してください。すなわち、最新のイベントは、最初に表示されます。

ktr をディスクにログ記録する

KTR_ALQ オプションは、 ktrdump(8) ユーティリティを使用して、後の解析のためにディスクに ktr エントリをログに記録するために使用することができます。このオプションは、 ALQ オプションに依存します。トレースメッセージの潜在的に高いボリュームのために、トレースマスクは、慎重に選択されるべきです。この機能は、一群の sysctls 通して設定されます。
debug.ktr.alq_file
ktr がログを記録しようとしているファイルを表示するか、設定します。デフォルトで、その値は、 /tmp/ktr.out です。 ktr が有効にされている間にファイル名が変更されるなら、それは、次の呼び出しまで効果がありません。
debug.ktr.alq_enable
1 に設定されるなら、ディスクへの ktr エントリのログ記録を有効にします。これを 0 に設定すると、ディクスクへのログ記録は、終了し、通常の ktr リングバッファへのログ黒くに戻ります。データは、ディスクにログ記録している間に、リングバッファに送られません。
debug.ktr.alq_max
ディスクに記録されるエントリの最大数で、0 は、無限です。記録された特に高い頻度のエントリの数を制限するためにこれは、役立ちます。
debug.ktr.alq_depth
書き込みバッファ中のエントリの数を決定します。これは、それらがディスクに書き込まれる前にエントリを保持するバッファで、 KTR_ENTRIES オプションの値をデフォルトとします。
debug.ktr.alq_failed
書き込みバッファのオーバフローのためにエントリの書き込みに失敗した回数を記録します。ログに記録された ktr メッセージの頻度がキューの深さを追い越すなら、これは、起こるかもしれません。
debug.ktr.alq_cnt
現在ディスクに書き込まれているエントリの数を記録します。

関連項目

ktrdump(8), alq(9), ktr(9)

歴史

KTR カーネルトレース機能は、 BSD/OS 3.0 ではじめて登場し、 FreeBSD 5.0 に取り込まれました。
October 20, 2012 FreeBSD