WFE和WFI的区别

WFE和WFI的区别WFI Waitforinter 和 WFE Waitforevent 是两个让 ARM 核进入 low powerstandby 模式的指令 由 ARMarchitect 定义 由 ARMcore 实现

大家好,欢迎来到IT知识分享网。

1. 概念:

WFI(Wait for interrupt)和WFE(Wait for event)是两个让ARM核进入low-power standby模式的指令,由ARM architecture定义,由ARM core实现。

2. WFI和WFE

2.1 相同点

WFI和WFE的功能非常类似,以ARMv8-A为例(参考DDI0487A_d_armv8_arm.pdf的描述),主要是“将ARMv8-A PE(Processing Element, 处理单元)设置为low-power standby state”。

需要说明的是,ARM architecture并没有规定“low-power standby state”的具体形式,因而可以由ARM core自行发挥,根据ARM的建议,一般可以实现为standby(关闭clock、保持供电)、dormant、shutdown等等。但有个原则,不能造成内存一致性的问题。

以Cortex-A57 ARM core为例,它把WFI和WFE实现为“put the core in a low-power state by disabling the clocks in the core while keeping the core powered up”,即我们通常所说的standby模式,保持供电,关闭clock。

2.2 不同点

那它们的区别体现在哪呢?主要体现进入和退出的方式上。

对WFI来说,执行WFI指令后,ARM core会立即进入low-power standby state,直到有WFI Wakeup events发生。

而WFE则稍微不同,执行WFE指令后,根据Event Register(一个单bit的寄存器,每个PE一个)的状态,有两种情况:

  • 如果Event Register为1,该指令会把它清零,然后执行完成(不会standby);
  • 如果Event Register为0,和WFI类似,进入low-power standby state,直到有WFE Wakeup events发生。

2.3 使用场景

WFI

WFI一般用于cpuidle。

WFE

WFE的一个典型使用场景,是用在spinlock中(可参考arch_spin_lock,对arm64来说,位于arm64/include/asm/spinlock.h中)。

spinlock的功能,是在不同CPU core之间,保护共享资源。使用WFE的流程是:

  • a)资源空闲
  • b)Core1访问资源,acquire lock,获得资源
  • c)Core2访问资源,此时资源不空闲,执行WFE指令,让core进入low-power state
  • d)Core1释放资源,release lock,释放资源,同时执行SEV指令,唤醒Core2
  • e)Core2获得资源

以往的spinlock,在获得不到资源时,让Core进入busy loop,而通过插入WFE指令,可以节省功耗,也算是因祸(损失了性能)得福(降低了功耗)吧。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/131516.html

(0)
上一篇 2025-08-07 16:20
下一篇 2025-08-07 16:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信