How to use linux `perf` tool to generate “Off-CPU” profile

前端 未结 2 1967
自闭症患者
自闭症患者 2020-12-24 08:45

Brendan D. Gregg (author of DTrace book) has interesting variant of profiling: the \"Off-CPU\" profiling (and Off-CPU Flame Graph; slides 2013, p112-137) to see, where the t

2条回答
  •  遥遥无期
    2020-12-24 09:28

    The perf technique I published[1] was a high-overhead workaround, until perf has BPF support for doing this.

    Right now, the lowest cost way of generating an off-CPU flame graph on Linux is on a 4.6+ kernel (which has BPF stack trace support), and with bcc/BPF. I wrote a tool for it, offcputime[2], which can be run with a -f option for "folded output", suitable for feeding into flamegraph.pl. This offcputime tool does the timing and stack counting all in kernel content, and dumps a report that is then printed with symbols.

    One day, I expect that perf itself will be able to do this as well: run a BPF program that does the in-kernel counting, and dumping of a report.

    In the meantime, we can use bcc/BPF. If for some reason you can't use bcc, you can, right now, take that offcputime program and write it in C. A more complicated version is available in the Linux source, as samples/bpf/offwaketime*. With the new BPF features on Linux, if there's a will, there's a way.

    [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

提交回复
热议问题