适用人群:嵌入式开发者、内核工程师、系统调优人员
目标:掌握 Linux 内核调试与性能分析工具全景,知其然更知其所以然。
Linux 内核是多线程、高并发、设备交互密集的复杂系统,调试难点包括:
因此,必须依靠专业调试与性能工具。
工具大致可按以下维度分类:
功能:使用 gdb 远程调试正在运行的内核;
特点:
优点:
缺点:
使用场景:嵌入式开发板初期 Bring-up、kernel panic 复现。
功能:分析系统崩溃时的内核转储(vmcore);
使用方法:
crash /usr/lib/debug/vmlinux /var/crash/vmcore
进行分析;优点:
缺点:
使用场景:生产环境系统崩溃排查。
echo function > /sys/kernel/debug/tracing/current_tracer
cat /sys/kernel/debug/tracing/trace
优点:
缺点:
使用场景:调度跟踪、函数时延。
perf record -g ./app
perf report
优点:
缺点:
适用场景:系统调优、内核热路径分析。
功能:使用脚本语言探测内核行为;
特点:
优点:
缺点:
场景:深度分析场景,如 IO 延迟、频繁调度等。
execsnoop
opensnoop
biosnoop
runqlat
优点:
缺点:
适用场景:生产环境诊断、系统延迟根因分析。
trace-cmd record -e sched_switch
kernelshark trace.dat
优点:
缺点:
适用场景:多核调度观察、延迟分析。
perf record -F 99 -a -g -- sleep 30
perf script | ./stackcollapse-perf.pl | ./flamegraph.pl > out.svg
优点:
缺点:
适用场景:用户空间/内核空间热点函数分析。
blktrace -d /dev/sda -o - | blkparse -
优点:
缺点:
场景:SSD 性能瓶颈分析、大数据系统调优。
工具 | 类型 | 特点/优势 | 场景 | 难度 |
---|---|---|---|---|
perf | 性能采样 | 原生支持,调用栈、CPU热点分析 | 内核热点函数、性能调优 | ★★★ |
ftrace | 调度跟踪 | 内核原生命令,轻量级 | 调度路径、函数调用链分析 | ★★ |
crash | 崩溃分析 | vmcore 分析,常配合 kdump | panic 后追查崩溃原因 | ★★★ |
kgdb | 动态调试 | 支持 gdb 远程调试 | 模块调试、bring-up 阶段 | ★★★ |
eBPF/BCC | 现代探测 | 零侵入、高性能,脚本灵活 | 实时调试、高可用系统诊断 | ★★★★ |
SystemTap | 插桩分析 | 类似脚本语言,深入定制分析 | 自定义函数分析、IO路径分析 | ★★★★ |
blktrace | 块设备追踪 | IO路径精准重现 | 磁盘/SSD 读写瓶颈分析 | ★★★ |
FlameGraph | 可视化 | 图形化热点分析 | 性能优化、调用路径压缩分析 | ★★ |
KernelShark | 可视化 | trace-cmd 的图形界面 | 多核调度可视化分析 | ★★ |
✅ eBPF/BCC 正在成为主流:
✅ perf 与 FlameGraph 仍然经典实用:
❌ SystemTap 与 latencytop 热度下降:
perf
、ftrace
、trace-cmd
入手;eBPF/BCC
脚本、内核符号调试;kdump + crash
,调优用 perf + eBPF
;视频教程请关注 B 站:“嵌入式 Jerry”