跟踪、观测与 eBPF

这页讲的是:系统出了问题,不是只能靠猜。Linux 内核提供了大量跟踪和观测能力,帮助我们看清性能瓶颈、延迟路径、错误来源,以及运行时到底发生了什么。

这块是什么

跟踪与观测,讲的是如何在不盲猜的前提下观察系统。printk、tracepoint、perf、ftrace、eBPF 等工具和机制,帮助我们理解:哪个函数耗时、哪个路径抖动、哪个事件频繁发生、哪个子系统在拖慢整机。

可以把这一块理解成“系统的体检和透视工具箱”:不是替系统干活,而是帮你看清系统正在怎么干活。

它负责什么

记录系统发生了什么

  • 打印日志
  • 记录事件
  • 观察路径上的关键节点
  • 让问题不再只靠主观猜测

分析性能和延迟

  • 找出热点路径
  • 定位等待时间
  • 识别抖动来源
  • 帮助理解吞吐和延迟的真实瓶颈

按需扩展运行时观测

  • 使用 tracepoint、perf、eBPF 等机制
  • 在不改主逻辑的情况下观察系统
  • 更灵活地采集运行信息
  • 让“观测能力”本身也具备可编程性

为什么观测很难但又必须做

挑战你现在怎么理解为什么必须重视
系统很复杂一个问题可能跨调度、内存、网络、驱动多个模块。不观测,你很容易只盯住症状而看不到真正路径。
问题常常是动态的很多性能抖动或偶发故障只在运行中出现。静态看代码不一定能还原现场。
观测本身也要控制代价不是所有观测都能无限细,过重的观测会反过来影响系统。好的观测要在信息量和扰动成本之间平衡。
需要跨层理解光看日志、光看 CPU、光看某个函数都可能不够。你需要把多个模块的迹象串起来解释。

关键概念

概念现在怎么理解
printk最基础的内核日志输出方式,适合看系统显式报告了什么。
tracepoint内核预留的观测点,方便在关键位置采集事件。
perf常用于性能分析、热点定位和采样观察的工具链。
ftrace用于观察函数调用和执行路径的内核跟踪能力。
eBPF让你在较受控的前提下给系统增加运行时观测和处理逻辑的机制。

为什么重要

常见误解

它不负责什么

和其他模块的关系

相关模块关系
调度器很多性能与延迟问题需要观察任务切换和 CPU 时间分配。
内存管理卡顿、回收、OOM 等问题往往必须通过观测来定位真实压力路径。
网络丢包、抖动、延迟异常常需要事件级和路径级跟踪。
安全 / eBPFeBPF 把观测能力和某些运行时扩展能力连接起来。

你现在可以先把观测手段按粗细分层

观测层次更像在回答什么问题什么时候最先想到它
日志系统明确报告了什么事件和状态。当你先想知道“发生了没有”时。
事件点与路径跟踪某条关键路径到底经过了哪些节点。当你知道有问题,但还不知道路上卡在哪时。
性能采样CPU 时间、热点函数和等待时间主要花在何处。当你感觉“慢”,却还不知道慢在谁身上时。
可编程观测怎样在运行期按需采集更贴近当前问题的现场信息。当现成日志和固定观测点不够用时,eBPF 这类能力就开始显得特别有价值。

读完这页后,你应该能回答

后面适合继续问:eBPF 和传统跟踪工具各自擅长什么?为什么同一个问题常常要结合多个观测角度?观测结果应该怎样反过来帮助理解调度、内存和网络?