火焰图(性能记录)无法显示准确的CPU空闲使用情况



当CPU使用率为60%时,使用火焰图(perf记录(来捕获CPU使用率。为什么40%的闲置相关烟囱使用量没有显示在火焰图中?空闲堆栈的使用率通常低于5%。

对于火焰图,重点通常是测量进程在运行时花费CPU时间的位置,而不是它调用哪些阻塞函数使其休眠,或者它被安排在哪里,并在不想的时候休眠。

我捕获一个cpu处理器的性能,而不是一个进程的性能。根据操作系统设计,如果CPU上没有活动任务,则CPU调用空闲等待功能。例如,Linux经常调用schedule_idle,直到它被新任务中断为止。因此,预计schedule_idle可以在flame gragh中找到,它消耗了40%的cpu使用量。

当时钟停止时,类似cycles的Perf事件不会增加(例如周期为cpu_clk_unhalted.thread_p或类似(。如果你真的想看到空闲时间,你可能可以禁用空闲节能,让Linux在循环中旋转,而不是使用x86monitor/mwait甚至基本的hlt将CPU置于时钟不滴答的C状态。

或者运行固定在一个逻辑核心上的代码,在另一个逻辑内核上,固定在循环中运行pause指令的任务。因此,物理核心的时钟一直在为你计算事件的核心计时。

当用任务在逻辑核心上记录该事件时,即使逻辑核心处于休眠状态,您仍然应该获得cpu_clk_unhalted.thread_any的计数([当物理核心上至少有一个线程未处于暂停状态时,核心循环](。

您还可以记录cpu_clk_unhalted.thread的计数,以计算这个(硬件(线程(即逻辑核心(没有停止时的周期,从而了解您实际使用了多少CPU时间。(或者使用软件事件task-clock。(

使用perf list查看CPU上可用的事件,并仔细阅读它们的描述。

最新更新