linux-kernel - cpu_idle_loop 与halt/wfe/sevl 指令

标签 linux-kernel arm

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

有功耗优势吗?

最佳答案

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

在像cpu_idle_loop这样的函数中,您可以控制更多的电源进入核心,因为您知道什么会影响什么,并且还可以刷新缓存并减少它们使用的电源等。您还可以完全切断电源核心消除或减少泄漏到尽可能的最低限度。在多核系统中,最后一个处于空闲状态的核心可以将平台/主板断电,进入更加省电的状态。

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

关于linux-kernel - cpu_idle_loop 与halt/wfe/sevl 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30588812/

相关文章:

linux - linux中从目录读取文件的顺序

c - 一核专用单进程

assembly - 如何查找ARM v7中数据中止的类型?

c - 定义宏时do while(0)有什么用?

c - linux 内核函数 page_address()

c - U-Boot 2020.04 : Probing SPI flash fails - Invalid bus 0 (err=-19)

arm - 如果我们使用 DSB,是否需要 DMB

c - 如何创建 volatile 结构函数指针的固定数组

linux - __get_free_page,物理地址和交换

gcc - AARCH64 上的 memcpy 产生未对齐的数据中止异常、ARM GNU 工具链或 newlibc Bug?