このページの目次
トレースとデバッグ
カバー範囲: ftrace (function/function_graph) → tracepoints → kprobes → perf events → eBPF トレース (bpftrace/bcc) → kdump/crash → KGDB → printk とダイナミックデバッグ カーネルバージョン: 2.6 ~ 6.x
ftrace: カーネル内蔵トレーサー
Function Tracer
# 利用可能なトレーサーの一覧を表示
# function: すべての関数呼び出しをトレース (オーバーヘッドが非常に高いので、デバッグ専用)
Function Graph: 実行時間を伴う
# 出力例:
# 0) | tcp_v4_rcv() {
# 0) 0.234 us | tcp_checksum_complete();
# 0) 0.567 us | tcp_v4_do_rcv() {
# 0) 1.234 us | tcp_rcv_established();
# 0) 2.345 us | }
# 0) 3.456 us | }
動的 ftrace: 実行時にオン/オフ
# 動的関数プローブ (debugfs を介して):
Tracepoints: 安定したプローブポイント
# 利用可能なすべての tracepoint
# sched/ syscalls/ net/ block/ irq/ timer/ ...
# すべての exec 呼び出しをトレース:
# スケジューラーをトレース:
# ブロック I/O をトレース:
Perf Events: ハードウェアパフォーマンスカウンター
# perf stat: プログラム実行中のハードウェアカウンターを統計
# perf record: サンプリング (プロファイリンググラフの生成元)
# perf top: リアルタイムのホットスポット
# ハードウェアイベント:
# cycles, instructions, cache-references, cache-misses,
# branch-instructions, branch-misses, bus-cycles,
# stalled-cycles-frontend, stalled-cycles-backend
eBPF トレース: bpftrace
# bpftrace: DTrace スタイルの高レベルトレース言語
# 一行トレース:
# ヒストグラム:
# 集計:
bcc ツールセット
# bcc: Python + BPF のプリコンパイル済みツールセット (/usr/share/bcc/tools/)
printk とダイナミックデバッグ
printk ログレベル
// include/linux/kern_levels.h
// 実行時にコンソールログレベルを制御:
echo 4 > /proc/sys/kernel/printk // ERROR 以上のみを表示
Dynamic Debug (dyndbg)
# 実行時に特定のモジュールのデバッグ出力を有効化 (再コンパイル不要)
# 現在有効なダイナミックデバッグエントリを表示
|
kdump: クラッシュダンプ
# 1. キャプチャ用カーネルをロード (ブート時または実行時)
# 2. panic をトリガー → キャプチャ用カーネルが起動 → vmcore が生成
# 3. 解析:
# crash コマンド:
KGDB: カーネルデバッガー
シリアル経由でカーネルのリモートデバッグ (gdb server に類似):
→ ブレークポイントの設定、ステップ実行、レジスタの読み取り、メモリ読み取り
→ ただし、開発/デバッグ環境でのみ使用可能 (特殊な設定が必要)
有効化: kgdboc=ttyS0,115200 kgdbwait (ブートパラメータ)
接続: gdb vmlinux → target remote /dev/ttyS0
実践: パフォーマンス問題の診断手順
1. perf top で CPU のホットスポットを確認
2. bpftrace/bcc でレイテンシ分布を確認 (biolatency, runqlat, tcpretrans)
3. ftrace function_graph で重要パスの呼び出し時間をトレース
4. tracepoint で仮説を検証 (例: sched_switch の頻度が高すぎるか?)
5. eBPF でカスタムツールを記述 (必要な場合)
参考
- ソースコード:
kernel/trace/,kernel/kexec_core.c,kernel/printk/ - 書籍: 「BPF Performance Tools」(Brendan Gregg 著)、「Systems Performance」(同著者)
- ツール: perf, bpftrace, bcc, crash, trace-cmd (ftrace のフロントエンド)
キーワード: ftrace, function_graph, tracepoint, kprobe, perf, bpftrace, bcc, kdump, crash, dynamic debug, KGDB