osg*_*sgx 13 linux profiling wait perf
Brendan D. Gregg(DTrace书的作者)有一个有趣的分析变体:"Off-CPU"分析(和Off-CPU Flame Graph ; 幻灯片2013,p112-137),以查看线程或应用程序被阻止的位置(是不是由CPU执行,而是等待I/O,页面故障处理程序或由于CPU资源而导致的计划外停机:
这一次揭示了哪些代码路径在CPU外被阻塞和等待,以及准确的持续时间.这与传统的分析不同,后者通常以给定的间隔对线程的活动进行采样,并且(通常)只检查线程是否在CPU上执行工作.
他还可以将Off-CPU配置文件数据和On-CPU配置文件结合在一起:http://www.brendangregg.com/FlameGraphs/hotcoldflamegraphs.html
Gregg给出的示例是使用的dtrace,这在Linux OS中通常不可用.但是有一些类似的工具(ktap,systemtap,perf)和perf我认为最广泛的安装基础.通常perf生成On-CPU配置文件(这些功能在CPU上执行得更频繁).
perf成Linux中的分析工具?PS:来自LISA13,p124的幻灯片中有关于CPU外部火焰图的systemtap变体的链接:" Yichun Zhang创建了这些,并且已经在Linux上使用SystemTap来收集专业数据.请参阅:• http:// agentzh .org/misc/slides/off-cpu-flame-graphs.pdf " "(2013年8月23日的CloudFlare啤酒会议)
我发布的perf技术[1]是一个高开销的解决方法,直到perf有BPF支持这样做.
目前,在Linux上生成CPU外火焰图的最低成本方法是在4.6+内核(具有BPF堆栈跟踪支持)和bcc/BPF上.我为它编写了一个工具,offcputime [2],可以使用-f选项运行"折叠输出",适合输入flamegraph.pl.这个offcputime工具在内核内容中完成所有计时和堆栈计数,并转储随后用符号打印的报告.
有一天,我希望perf本身也能够做到这一点:运行一个BPF程序来执行内核计数和转储报告.
在此期间,我们可以使用bcc/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
Brendan Gregg 发表了关于 Off-cpu 火焰图生成的说明: http://www.brendangregg.com/blog/2015-02-26/linux-perf-off-cpu-flame-graph.html 和https://github。 com/brendangregg/FlameGraph/issues/47#
Off-CPU 时间火焰图可以解决(比如说)60% 的问题,其余问题则需要遍历线程唤醒来查找根本原因。我在关于火焰图的 LISA13 演讲(幻灯片、youtube )中解释了脱离 CPU 时间火焰图、唤醒问题以及其他工作。
在这里,我将展示一种使用 Linux perf_events 绘制脱离 CPU 时间火焰图的方法。
# perf record -e sched:sched_stat_sleep -e sched:sched_switch \
-e sched:sched_process_exit -a -g -o perf.data.raw sleep 1
# perf inject -v -s -i perf.data.raw -o perf.data
# perf script -f comm,pid,tid,cpu,time,period,event,ip,sym,dso,trace | awk '
NF > 4 { exec = $1; period_ms = int($5 / 1000000) }
NF > 1 && NF <= 4 && period_ms > 0 { print $2 }
NF < 2 && period_ms > 0 { printf "%s\n%d\n\n", exec, period_ms }' | \
./stackcollapse.pl | \
./flamegraph.pl --countname=ms --title="Off-CPU Time Flame Graph" --colors=io > offcpu.svg
Run Code Online (Sandbox Code Playgroud)
Gregg 的 stackcollapse.pl 和 Flamegraph.pl 用于绘制火焰图。
3.17 内核及更新版本使用了 perf 选项...
| 归档时间: |
|
| 查看次数: |
3522 次 |
| 最近记录: |