Linux kernel cpu_空闲_循环与halt/wfe/sevl指令

Linux kernel cpu_空闲_循环与halt/wfe/sevl指令,linux-kernel,arm,Linux Kernel,Arm,每当cpu空闲时,它都会执行cpu_idle_循环。 与arm中的halt[x86]或wfe/wfi指令相比,我很想知道这个循环的优点 功耗有什么优势吗?wfe/wfi只是指令,它可以使内核进入低功耗模式,但不会影响内核的时钟等。如果内核此时通电,泄漏仍然存在,这在电池供电的设备中非常重要 在像cpu\u idle\u loop这样的功能中,您可以控制更多的核心电源,因为您知道什么会影响什么,还可以刷新缓存并减少它们使用的电源等。您还可以完全切断核心电源,以尽可能减少泄漏。在多核系统中,最后一个

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


功耗有什么优势吗?

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

在像
cpu\u idle\u loop
这样的功能中,您可以控制更多的核心电源,因为您知道什么会影响什么,还可以刷新缓存并减少它们使用的电源等。您还可以完全切断核心电源,以尽可能减少泄漏。在多核系统中,最后一个空闲的核可以关闭平台/板,使其处于更节能的状态


wfe
/
wfi
有助于避免堆芯在等待时浪费功率,也有助于加热。必须实现互斥量/信号量,但如今SOC由许多元素组成,内核可以通知硬件何时不需要它,而不仅仅是有效地闲置单个内核。

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

可能值得注意的是,在缺少具有额外系统特定智能的cpuidle驱动程序的情况下,默认实现最终调用
cpu\u do\u idle
,这(在支持它的处理器上,例如
cpu\u v7\u do\u idle
)基本上只是一个
wfi
。可能是相关的;至少有更多关于这个主题的信息。你好,Arun,他的超级护目镜,他将WFI说明标记为陷阱,对吗?另外,我想知道是否从来宾操作系统执行WFI指令,并将控制转移到EL2中运行的Hyper visor,但控制是否会再次返回到发出WFI的同一来宾操作系统?是的,虚拟机监控程序会将WFI/wfe配置为陷阱。执行wfi的操作系统被添加到等待队列中。返回操作系统的控制由hypervisor调度器描述。如果操作系统再次准备就绪(由于中断或事件),hyp调度程序将启动并切换到下一个要执行的操作系统。(与操作系统调度器非常相似)