如果我们想绘制系统在运行上述a.out进程的时候的off-cpu火焰图,我们可以先采集调度数据30秒,得到out.stacks: sudo offcputime-bpfcc -df -p `pgrep -nx a.out` 30 > out.stacks 接下来,我们进入clone下来的FlameGraph项目目录,用flamegraph.pl绘制火焰图: ./flamegraph.pl --color=io --title="Off-CPU ...
Off-CPU火焰图 和On-CPU火焰图类似,我们可以借助其来找热点,然后进行针对性优化。 总结 Off-CPU可以帮助我们了解程序被阻塞的原因。 Wakeup 休眠的线程最终会被其他的线程唤醒,我们抓取唤醒线程的堆栈也可以构造出一个火焰图,通过这种方式我们可以知道休眠的线程到底在等待什么,这可以帮助我们解决更多的问题:唤醒信息可...
Off-CPU火焰图 Wakeup火焰图 调用图(chain graphs) I/O 火焰图 内核提供了很多追踪I/O的机制,比如可以磁盘I/O或I/O相关的系统调用。除了在一些情况例如文件系统缓存命中之外,进程往往在等待I/O时被阻塞。因此,追踪I/O也是做Off-CPU分析的一种方式。为了能够生成火焰图,我们需要捕获I/O的时间以及I/O对应的调...
如果我们想绘制系统在运行上述a.out进程的时候的off-cpu火焰图,我们可以先采集调度数据30秒,得到out.stacks: sudo offcputime-bpfcc -df -p `pgrep -nx a.out` 30 > out.stacks 接下来,我们进入clone下来的FlameGraph项目目录,用flamegraph.pl绘制火焰图: ./flamegraph.pl --color=io --title="Off-CPU ...
遇到CPU性能问题时,我们常常通过perf来了解CPU上到底在执行什么,以及通过On-CPU火焰图来帮助我们寻找性能瓶颈。但是,这种方式并不能让我们知道不在CPU上运行的进程和线程到底在做什么。在一些场景中,我们会发现CPU的使用率上不去,性能表现很差,这时候我们也许就需要考虑,是不是花在应用请求、异步调用这种Off-CPU的场...
在《宋宝华:火焰图:全局视野的Linux性能剖析》一文中,我们主要看了on-cpu火焰图,理解了系统的CPU的走向的分析。但是,很多时候,单纯地看on-cpu的情况(什么代码在耗费CPU),并不能解决性能问题,因为有时候性能差的原因瓶颈不一定在CPU上面,而是在off-cpu的时间,比如: ...
宋宝华:火焰图:全局视野的Linux性能剖析 由于thread_func()之前的调用栈是一样的,所以2个线程的thread_func()调用是合并为同一个方框的。 更多阅读 除了on-cpu的火焰图以外,off-cpu的火焰图,对于分析系统堵在IO、SWAP、取得锁方面的帮助很大,有利于分析系统在运行的时候究竟在等待什么,系统资源之间的彼此伊伴。比...
Off-CPU分析:窥见冰山下的性能瓶颈 引 遇到CPU性能问题时,我们常常通过perf来了解CPU上到底在执行什么,以及通过On-CPU火焰图来帮助我们寻找性能瓶颈。但是,这种方式并不能让我们知道不在CPU上运行的进程和线程到底在做什么。在一些场景中,我们会发现CPU的使用率上不去,性能表现很差,这时候我们也许就需要考虑,是不...
一、火焰图的使用 为了更好地展示火焰图的原理,我专门写了一小段代码, int main() { for (i = 0; i < 100; i++) { if (i < 10) { funcA(); } else if (i < 16) { funcB(); } else { funcC(); } } } 1. 2. 3.
本文用off-cpu火焰图分析一个程序的延迟(主要在拿锁上),找出来瓶颈,并消除的故事。本文非常值得一读,但是阅码场没有足够的时间将其翻译为中文,希望童鞋们直接读英文。 The Setup As a performance engineer atMemSQL, one of my primary responsibilities is to ensure that customer Proof of Concepts (POCs)...