欢迎访问 内存溢出 —— 独立后端与系统工程技术博客

专注于分布式系统、Linux内核、数据库存储与后端工程实践

eBPF 可观测性:tc 钩子与 bpftrace 动态追踪内核延迟

发表于:|最后更新:|分类:Linux与内核|阅读:7909 次

eBPF 不仅用于网络加速,也是内核可观测性的利器。通过挂载到 kprobe、tracepoint 或 tc(traffic control) 钩子上的 eBPF 程序,可以在不修改内核源码、不重启服务的情况下实时采集函数调用延迟与丢包统计。

一、bpftrace 一行命令定位块 I/O 延迟

bash
# 追踪块设备 I/O 完成事件,输出延迟超过 10ms 的请求
bpftrace -e '
tracepoint:block:block_rq_complete
/args->nr_sector > 0/
{
    @start[args->dev] = nsecs;
}
tracepoint:block:block_rq_complete
{
    $lat = nsecs - @start[args->dev];
    if ($lat > 10000000) {
        printf("slow I/O dev=%d latency=%d us\n", args->dev, $lat / 1000);
    }
    delete(@start[args->dev]);
}'