baron · 3月31日 · 四川

最全讲解WFE和WFI进入低功耗的原理机制

快速连接

👉👉👉【精选】ARMv8/ARMv9架构入门到精通-目录 👈👈👈


 title=

基本概念

PE进入low-power的方式有两种:

  • WFE : Wait for Event : 如果Event Register=0则立即存入low-power standby state,否则Event Register清0.
  • WFI : Wait for Interrupt : 立即进入low-power standby state

Event Register是每个 PE 的单个位寄存器。Event Register是概念寄存器,不能显式访问。Reset时Event Register是unknow的。软件不能读写Event Register.

只有WFE和WFET(Wait for Event with Timeout)时,Event Register才会被清除。当PE执行WFE或WFET时:

  • 如果 Event Register寄存器是清除的,那么PE立即进入low-power模式;
  • 如果Event Register是set的,那么(1)PE不会执行suspend操作;(2)Event Register将被清除;(3)WFE或WFET指令立即返回;

如果PE进入了low-power模式,直到以下发生才能退出low-power模式

  • PE探测到了WFE wake-up event.
  • 一种实现定义的唤醒事件,在架构上允许在任何时间发生。
  • reset

该架构允许以下所有内容:
• 允许PE 出于任何原因离开低功耗状态。
• 允许 PE 将 WFE 视为 NOP,但不建议将其用于最低功耗操作

FEAT_WFxT中实现的WFET(Wait for Event with Timeout)

使用等待事件机制的软件必须容忍虚假唤醒事件,包括多个唤醒事件。

WFE和WFET指令可以在任何异常级别使用. 但也可以被trapped到高一级的异常级别(需要软件配置)
例如SCTLR_EL1.nTWE=0、HCR_EL2.TWE=1时,将被trapped到EL1

WFE wake-up 事件

(当以下事件发生时, Event Register将被置1)

  • 任何一个PE执行了SEV指令
  • 当前PE执行了SEVL指令
  • 物理中断、虚拟中断
  • An external Debug Request debug event
  • 一个异常返回时
  • The clearing of the global monitor for the PE
  • An event from a Generic Timer event stream
  • An event sent by some IMPLEMENTATION DEFINED mechanism
  • 对于 WFET 指令,a local timeout event caused by the virtual count threshold value, expressed in CNTVCT_EL0

WFI wake-up events

(当以下事件发生时, Event Register将被置1)

  • 物理中断、虚拟中断
  • An external Debug Request debug event
  • An event sent by an IMPLEMENTATION DEFINED mechanism
  • 对于 WFET 指令,a local timeout event caused by the virtual count threshold value, expressed in CNTVCT_EL0

使用示例

(1)hypervisor的程序跑起来后,就是调用wfi的死循环
在这里插入图片描述
(2)Linux Kernel中的cpu idle
在这里插入图片描述

总结

  • wfe不会立即进入low power state,会先检查Event Register,wfi会立即进入low power state
  • wfi的low power state的退出条件是中断,wfe的low power state的退出条件是中断和一些系统事件
  • wfi一般用于cpu idle, wfe一般用于实现spinlock

参考:

(1)WFE和WFI的区别

(2)D1.6 Mechanisms for entering a low-power state
在这里插入图片描述


关注"Arm精选"公众号,备注进ARM交流讨论区。
图片1.png

推荐阅读
关注数
9461
内容数
205
以易懂、渐进、有序的方式,深入探讨ARMv8/ARMv9架构的核心概念。我们将从基础知识开始,逐步深入,覆盖最新的架构,不再纠缠于过时技术。本系列内容包含但不限于ARM基础、SOC芯片基础、Trustzone、gic、异常和中断、AMBA、Cache、MMU等内容,并将持续更新。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息