WFE和WFI的区别

1. 概念:

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

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。ui

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发生。spa

2.3 使用场景

  1. WFI
    WFI通常用于cpuidle。
  2. 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得到资源orm

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

相关文章
相关标签/搜索