我发表的perf技术[1]是一个高开销的解决方法,直到perf对此提供BPF支持为止。
目前,在Linux上生成CPU外火焰图的成本最低的方法是在4.6+内核(具有BPF堆栈跟踪支持)上,并且具有bcc /
BPF。我为此编写了一个工具offcputime [2],该工具可以与-
f选项一起运行以用于“折叠输出”,适合于将其输入flamegraph.pl。这个offcputime工具对内核内容中的所有内容进行计时和堆栈计数,并转储报告,然后用符号打印。
我希望有一天,perf本身也将能够做到这一点:运行一个BPF程序,该程序执行内核内计数和报告转储。
同时,我们可以使用密件抄送/
BPF。如果由于某种原因不能使用bcc,则可以立即使用该offcputime程序并将其用C编写。Linux源代码中提供了一个更复杂的版本,如samples
/ bpf / offwaketime *。有了Linux上的新BPF功能,只要有意愿,就有办法。
[1] http://www.brendangregg.com/blog/2015-02-26/linux-perf-off-cpu-flame-
graph.html
[2]
https://github.com/iovisor/bcc/blob/master/tools/offcputime_example.txt



