章节摘要:工具界面之下,所有性能数据只有两种来源——采样(按节拍抽查)和追踪(逐事件记录),而证据本体无非是调用栈与硬件计数器。本章讲清这两套机制的原理,并解释 eBPF 为什么能成为内核里的"法证实验室"。读完本章你看任何新工具,都能立刻判断它属于哪类、证据可信到什么程度。
工具会过时,机制不会。看懂采集机制,新工具到手只需要五分钟。
抽查和盯梢的数据完整性差异、统计偏差,以及为什么两者必须配合。
栈帧回溯怎么走、帧指针的坑、PMC 能提供微架构级铁证。
验证器、映射表、挂载点,以及它如何做到生产级低扰动。
2.1 定框架(数据怎么采:抽查 vs 全记录) │ ▼ 2.2 讲内容(采到的是什么:调用栈 + 计数器) │ ▼ 2.3 给平台(在哪采最安全:内核态 eBPF)
采集机制是取证工具的地基:采样拿到的是统计画像,追踪拿到的是事件流,两者互补而非互替。本章三节分别覆盖手法的分野(采样偏差与漏检估算)、证据的物理来源(三种栈回溯实现与 PMU 硬件事件)、以及内核态采集实验室 eBPF。日常速记:
# 快速判断用哪类手法 perf record -F 99 -g -p $PID -- sleep 10 # 统计画像:找大热点 bpftrace -e 'tracepoint:syscalls:sys_enter_* /comm=="app"/ { @[probe] = count(); }' # 事件流:追短路径与阻塞点
先修心态再修工具:任何探针都有开销,选型前先问"这个怀疑点需要统计证据还是逐事件证据"。统计证据(谁最烧 CPU、哪条路径最常走)用采样;逐事件证据(单次 IO 延迟、锁持有时间、丢包瞬间)用追踪;需要不进业务线程、在内核态旁路观察的,用 eBPF。有内核基础的读者重点看 eBPF 一节的验证器排错思路——那是把 bpftrace 从演示脚本变成生产探针的分水岭;应用开发者优先读栈回溯一节,帧指针与 DWARF 的取舍直接影响日常火焰图的可信度。
采样与追踪的取舍可以浓缩成五个维度:证据形态(统计分布对事件序列)、开销量级(常驻可忽略对按需付费)、适用问题(热点与占比对时序与因果)、实现位置(信号器/PMU 对探针/tracepoint)、失效模式(漏检短事件对探针本身扰动时序)。五个维度上没有全胜的一方,因此真实的采集体系都是两者的拼装:采样负责广域巡逻,追踪负责定点抓捕,硬件计数器负责把"慢"翻译成微架构事件,eBPF 负责让这一切尽量不惊动被观测者。理解了这层分工,后面章节里每个工具的用法都不再是孤立的命令,而是这套拼装体系里的一个零件——这也是把采集机制单独成章的原因。