cpu_idle_loop vs halt / wfe / sevl指令

时间:2015-06-02 06:24:15

标签: linux-kernel arm

每当cpu空闲时,它就会执行cpu_idle_loop。 与手持停止[x86]或wfe / wfi指令相比,我很想知道这个循环的优点吗?

是否有任何功耗优势?

2 个答案:

答案 0 :(得分:1)

wfe / wfi只是指令,它可以使核心进入低功耗模式,但这不会影响进入核心的时钟等。如果核心此时获得电源泄漏仍然存在,这在电池供电设备中很重要。

在像cpu_idle_loop这样的函数中,你可以控制更多的核心功能,因为你知道什么会影响什么,也可以刷新缓存并减少它们使用的功率等。你也可以完全削减核心去除的能力或尽可能减少泄漏。在多核系统中,最后一个空闲核心可以将平台/电路板降低到更强大的功率保持状态。

wfe / wfi有利于避免核心在等待时浪费电力,这对于未发送的热量也有好处。必须实现互斥锁/信号量,但SOC现在由许多元素组成,并且内核可以在不需要大部分元素时通知硬件而不是仅仅有效地空闲单个核心。

答案 1 :(得分:1)

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