You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flame graph(perf record)无法准确显示CPU空闲使用率问题咨询

为什么火焰图里看不到理论上的40%空闲CPU栈?

这背后主要有三个核心原因:

  • perf默认不采样idle线程
    perf record默认的采样范围是用户进程和内核中的业务相关线程,系统的idle线程(即PID为0的swapper进程,负责CPU空闲时的循环)不在默认采样列表里。就算你加了-a参数(采样所有CPU的所有进程),大部分火焰图生成工具也会默认把idle相关的栈帧过滤掉——毕竟大多数人用火焰图是排查自己的应用或业务相关的性能问题,idle栈对他们没实际意义。

  • 空闲CPU的低功耗状态降低采样频率
    当CPU处于空闲状态时,会进入低功耗的C-state(比如C1浅休眠、C3深休眠),此时CPU的时钟周期会大幅降低甚至暂停。而perf常用的cpu-clock采样事件是基于CPU周期触发的,这就导致idle状态下的采样触发次数远低于CPU满负载时,最终采集到的idle栈帧占比自然远低于理论上的40%。

  • 火焰图工具的可视化过滤
    像经典的FlameGraph脚本,默认会把内核idle相关的函数(比如cpu_idle、default_idle)合并或者直接从火焰图中剔除,只保留活跃的CPU时间对应的栈。这就是为什么你看到的空闲栈占比通常低于5%——它们要么没被采样到,要么被工具过滤掉了。

如果确实需要查看空闲CPU的栈情况,可以这么做:

  1. 采样时加上-a参数,确保包含所有线程:perf record -a -g sleep 30
  2. 生成火焰图时关闭idle过滤,比如修改FlameGraph的flamegraph.pl脚本,移除对idle函数的过滤逻辑,或者使用支持--include-idle参数的工具版本。

内容的提问来源于stack exchange,提问作者like

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 15:24:25