# linux-performance **Repository Path**: xiaozaiye/linux-performance ## Basic Information - **Project Name**: linux-performance - **Description**: 主要放置Linux系统学习过程中使用的一些性能评估工具的使用以及环境搭建方式 perf bcc bpftrace 火焰图 blktrace 各种实验 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: ziel - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-27 - **Last Updated**: 2026-07-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 第一部分:必须掌握的工具(第一优先级) | 工具 | 学习优先级 | 作用 | 官方文档 | Github | | :----- | ------------ | ------ | ---------- | :------- | | perf | ⭐⭐⭐⭐⭐ | CPU/Profile/PMU | Linux kernel docs | perf源码(kernel/tools/perf) | | FlameGraph | ⭐⭐⭐⭐⭐ | 性能热点分析 | Brendan Gregg | FlameGraph | | ftrace | ⭐⭐⭐⭐⭐ | 内核函数Trace | kernel docs | kernel源码 | | trace-cmd | ⭐⭐⭐⭐ | ftrace前端 | trace-cmd docs | trace-cmd | | bpftrace | ⭐⭐⭐⭐⭐ | eBPF脚本 | bpftrace官方 | bpftrace | | BCC | ⭐⭐⭐⭐⭐ | eBPF工具集 | BCC官方 | iovisor/bcc | | bpftool | ⭐⭐⭐⭐ | 查看BPF程序 | kernel docs | kernel | | blktrace | ⭐⭐⭐⭐ | Block IO分析 | blktrace docs | blktrace | |strace | ⭐⭐⭐⭐⭐ | syscall分析 | man | strace | |ltrace | ⭐⭐⭐ | libc分析 | man | ltrace | ### 第四部分:除了这些,还必须掌握哪些工具 #### 第一梯队(必须) perf FlameGraph strace ltrace ftrace trace-cmd bpftrace BCC bpftool blktrace #### 第二梯队(内核开发) pahole(查看 BTF/DWARF) dwarves addr2line nm objdump readelf gdb crash drgn kgdb kdump #### 第三梯队(Block) fio blktrace iostat iotop blkparse btt #### 第四梯队(网络) tcpdump tshark ss ip ethtool tc bpftool net #### 第五梯队(调度) perf sched sched_ext runqlat(BCC) offcputime(BCC) wakeuptime(BCC) #### 第六梯队(内存) slabtop vmstat sar numastat page-types kmemleak #### 第七梯队(文件系统) fs_mark fsstress xfs_io debugfs xfs_db ### 第五部分:如果目标是 Linux 内核工程师,我建议的学习顺序 不要按工具分类,而是按内核子系统学习,每学习一个子系统,就把相关工具全部串起来。 CPU 与调度器 perf FlameGraph ftrace bpftrace runqlat offcputime 系统调用 strace trace-cmd bpftrace opensnoop execsnoop 内存管理 perf mem vmstat kmem slabtop pagefault 分析 块设备 fio blktrace biosnoop biolatency blkparse 网络 tcpdump ss perf tc tcpconnect tcplife 结合你之前制定的 Linux 内核学习计划,我建议在正式阅读调度器、内存管理和块层源码之前,先完成 perf → FlameGraph → ftrace → bpftrace → BCC 这一套工具链的实践。这套工具会贯穿后续几乎所有内核开发和性能分析工作。 ``` 第一阶段:CPU Profiling(已经完成) ──────────────────────────────────── ✅ perf stat ✅ perf record ✅ perf report ✅ FlameGraph 知道: CPU 花在哪里。 ──────────────────────────────────── 第二阶段:Syscall Tracing(现在) ──────────────────────────────────── ✅ strace ➡️ perf trace 知道: CPU 为什么进入内核。 每个 syscall 花了多少时间。 ──────────────────────────────────── 第三阶段:Kernel Tracing(下一步) ──────────────────────────────────── ➡️ ftrace 知道: 进入内核以后, 到底执行了哪些内核函数。 ──────────────────────────────────── 第四阶段:Dynamic Tracing ──────────────────────────────────── ➡️ bpftrace ➡️ BCC 知道: 不用修改内核, 动态观察任何函数、 任何事件、 任何进程。 ──────────────────────────────────── 第五阶段:libbpf / CO-RE(最后) ──────────────────────────────────── 自己写 eBPF 工具。 ```