cpuidle 与 CPU 空闲状态

这页讲的是:CPU 没活干的时候,并不是只能傻等,它还可以进入不同深浅的空闲状态,以换取不同程度的省电和不同代价的唤醒延迟。学这页的重点,是理解 cpuidle 的难点不在“睡不睡”,而在“现在该睡多深,值不值,来不来得及醒”。

这块是什么

cpuidle 与 CPU 空闲状态,讲的是当 CPU 暂时没有可运行工作时,Linux 怎样选择让它进入何种空闲或低功耗状态,以平衡省电收益和下一次被唤醒时的延迟代价。它关注的是“CPU 暂时不忙时怎么待着更合适”,而不是“忙的时候跑多快”或“是否整颗 CPU 下线”。

可以把它理解成:人在等下一件事时,不一定总是站着干等;可以坐下、闭目养神,甚至短暂打个盹。但睡得越深,醒来重新进入状态通常也越慢。

它负责什么

在空闲时节省功耗

  • CPU 没事做时不必一直维持高活跃状态
  • 不同空闲状态能带来不同省电收益
  • 让“闲着”也成为被系统正式优化的对象
  • 避免大量空转浪费能耗

权衡唤醒延迟

  • 睡得越深,通常越省电,但醒来更慢
  • 系统要估计下一次工作多久会到
  • 不能为了省一点电把响应拖得太差
  • 让节能和实时响应保持可接受平衡

把空闲判断做成策略

  • 不是看到空闲就永远进最深状态
  • 还要看负载节奏、定时器、平台特性和延迟容忍度
  • 让空闲治理不是硬编码,而是系统决策
  • 把“暂时没活”组织成正式电源管理动作

为什么它不是“闲着就赶紧睡最深”

如果想得太简单会怎样真正关键在哪
觉得越深越省电就越好会忽略下一次唤醒可能很快到来,结果反而得不偿失。关键是收益和唤醒代价的平衡。
把空闲看成完全没成本会看不见进入和退出空闲状态本身也有代价。空闲治理本身也是一条有延迟预算的路径。
只看 CPU 本身会漏掉系统定时器、负载节奏和平台特性都在影响选择。这也是系统级协同问题,不是 CPU 自己决定就完事。
把它和降频混在一起会模糊“忙着跑慢点”和“暂时没活就睡下”是两类不同策略。cpuidle 更偏闲时状态选择,cpufreq 更偏忙时输出调节。

关键概念

概念现在怎么理解
cpuidleCPU 暂时空闲时,为其选择合适空闲状态的系统能力。
浅空闲 / 深空闲前者省电少但醒得快,后者省电多但恢复更慢。
唤醒延迟从空闲状态回来重新干活所要付出的时间代价。
空闲预测系统需要估计“这次空闲会持续多久”,才知道睡多深是否值得。
响应体感空闲状态选得过深,可能会让系统对下一次工作显得更迟钝。

为什么重要

常见误解

它不负责什么

和其他模块的关系

相关模块关系
cpufreq那页偏忙时调速,这页偏闲时选睡眠深度,两者共同塑造 CPU 动态功耗行为。
中断与定时器下一次唤醒什么时候到来,常和事件和定时器节奏直接相关。
调度器CPU 是否真的空闲、空闲能持续多久,天然受任务到达和调度行为影响。
电源管理它是 CPU 级别最基础也最频繁发生的一类低功耗策略。

读完这页后,你应该能回答

后面适合继续问:系统怎么猜一次空闲会持续多久?为什么某些定时器或周期性唤醒会把深度 idle state 打得很碎?cpuidle 和交互卡顿最容易在哪些边界上碰撞?