【问题标题】:cpu_idle_loop vs halt/wfe/sevl instructionscpu_idle_loop vs 停止/wfe/sevl 指令
【发布时间】:2015-06-03 11:58:30
【问题描述】:

每当一个 cpu 空闲时,它都会执行 cpu_idle_loop。 与 arm 中的停止 [x86] 或 wfe/wfi 指令相比,我很想知道这个循环的优势?

有什么功耗优势吗?

【问题讨论】:

标签: linux-kernel arm


【解决方案1】:

wfe / wfi 只是指令,可以使核心进入低功耗模式,但不会影响进入核心的时钟等。如果此时核心正在上电,泄漏仍然会在那里,这在电池供电的设备中非常重要。

在像cpu_idle_loop 这样的函数中,您可以控制更多的内核功率,因为​​您知道什么会影响什么,还可以刷新缓存并减少它们使用的功率等。您还可以完全切断内核的功率,移除或减少泄漏到最低限度。在多核系统中,最后一个空闲的内核可以关闭平台/板卡进入更加节能的状态。

wfe / wfi 有利于避免核心在等待时浪费电力,也有利于热量未调度。必须实现互斥体/信号量,但如今 SOC 由许多元素组成,内核可以在不需要大部分元素时通知硬件,而不仅仅是让单个内核有效地空闲。

【讨论】:

  • 也许值得注意的是,在没有具有额外系统特定智能的 cpuidle 驱动程序的情况下,默认实现最终调用cpu_do_idle,它(在支持它的处理器上,例如cpu_v7_do_idle基本上只是一个wfi
【解决方案2】:

除了其他用户指出的功率优势之外,我还想指出使用 WFI 的另一个不太明显的优势。考虑我们的内核作为虚拟机运行在另一个主机操作系统之上的情况。主机操作系统会将 WFI 指令标记为陷阱。当客户操作系统执行 WFI 指令时,控制立即转移(陷入)到主机操作系统。这允许主机有效地在其就绪队列中调度其他操作系统。如果客户操作系统使用繁忙的空闲循环(而不是 WFI),分配给客户操作系统的时间片必须在主机操作系统可以在另一个客户操作系统中调度之前到期,这会导致 CPU 周期的浪费。

【讨论】:

  • 你好 Arun,它的 Hyper-visor 将 WFI 指令标记为陷阱,对吗?另外我想知道是否从客户操作系统执行 WFI 指令并将控制权转移到在 EL2 中运行的 Hyper-visor,但控制权是否会再次返回到发出 WFI 的同一个客户操作系统?
  • 是的,管理程序会将 wfi/wfe 配置为被捕获。执行 wfi 的操作系统被添加到等待队列中。回到操作系统的控制由管理程序调度程序决定。如果操作系统再次准备好(由于中断或事件),hyp 调度程序将启动并切换下一个要执行的操作系统。 (非常类似于 os 调度程序)
猜你喜欢
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
  • 1970-01-01
  • 2020-08-31
  • 1970-01-01
  • 2014-08-02
相关资源
最近更新 更多