📘 Ftrace 内核调度·性能
30 章 · 从入门到实战
🧑🎓 配色 · 轻松学
1
Ftrace初探
⚡ 第一个trace
什么是Ftrace?内核追踪的“瑞士军刀”,我的第一个trace命令。
2
Ftrace架构
🧩 组件&文件系统
核心组件 (function/function_graph/event tracer) 与 tracefs。
3
环境准备
⚙️ 编译&挂载
编译内核开启Ftrace选项,挂载tracefs,检查系统支持。
4
function tracer
🔍 调用链
追踪所有内核函数调用,理解调用链,使用set_ftrace_filter。
5
function_graph tracer
📈 可视化
可视化函数调用图,分析函数执行时间与嵌套深度。
6
动态插桩
⚡ mcount/fentry
Ftrace如何实现零开销?聊聊mcount与fentry机制。
7
trace_printk
🆘 救命稻草
轻量级内核日志,我的调试“救命稻草”。
8
event tracer
🎯 系统调用/中断
追踪系统调用、调度、中断等内核事件,使用events目录。
9
kprobe & uprobe
🔬 动态探针
动态探针,追踪任意函数与用户态程序。
10
trace_marker
✏️ 用户态联动
在用户态代码中插入追踪点,实现用户态与内核态联动。
11
调度器基础
⏱️ CFS/vruntime
CFS调度器原理,vruntime与红黑树,调度延迟。
12
追踪调度实体
🔄 sched_switch
使用sched_switch事件,查看进程切换的“来龙去脉”。
13
调度延迟分析
⏰ wakeup tracer
使用wakeup tracer追踪进程唤醒到调度执行的延迟。
14
CPU负载均衡
⚖️ 任务迁移
追踪负载均衡过程,分析CPU间任务迁移。
15
实时性分析
🚫 preemptirqsoff
使用preemptirqsoff tracer追踪关抢占与关中断时间。
16
性能瓶颈定位
🐢 长耗时函数
使用function_graph tracer定位长耗时函数。
17
I/O调度追踪
💾 block事件
使用block事件追踪块设备I/O请求,分析I/O瓶颈。
18
内存管理追踪
🧠 mm事件
使用mm事件追踪缺页中断、内存分配与回收。
19
网络性能追踪
🌐 net事件
使用net事件追踪网络包收发,分析软中断处理时间。
20
中断上下文分析
⚡ irq事件
使用irq事件追踪硬中断与软中断,分析中断延迟。
21
trace-cmd
🎬 录制/回放
命令行工具,录制与回放trace数据,适合生产环境。
22
Kernelshark
🦈 图形分析
图形化分析工具,可视化trace数据,一眼看出问题。
23
perf + Ftrace
🎯 协同使用
perf stat采样与Ftrace事件追踪的协同使用。
24
eBPF vs Ftrace
⚔️ 对比
两种技术的异同,何时选择Ftrace?
25
实战·MySQL惊群
🐬 调度延迟
定位MySQL数据库的“惊群”效应与调度延迟。
26
实战·Nginx软中断
🌊 不均衡
分析Nginx高并发下的CPU软中断不均衡问题。
27
实战·Redis阻塞
🧵 内存分配
追踪Redis主线程阻塞,定位内存分配瓶颈。
28
实战·Docker限流
🐳 CPU节流
分析Docker容器内的调度延迟与CPU限流。
29
Ftrace脚本化
🐍 Python/Shell
使用Python/shell脚本自动化Ftrace采集与分析。
30
总结与进阶
🚀 eBPF崛起
Ftrace的局限性与未来,eBPF的崛起,我的学习建议。