WFE和WFI的区别

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 使用场景

  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获得资源

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏禹都一只猫博客

一个还不错的视频网站源码

5019
来自专栏云瓣

Git分支合并选择

   用Git进行多人协作开发时,必然会合并代码,解决冲突。然而合并代码也是需要点技巧的,如果对一些关键命令没有理解去使用的话,git的版本演进路线就会变得很乱...

2675
来自专栏张善友的专栏

Event Store 2.0发布,带来了安全支持和测试版Projections库

Event Store 2.0版本于上周发布,它带来了安全支持允许锁定Event Store和在事件流上设置访问控制列表。其主要新特性包括: HTTP和TCP之...

19810
来自专栏张善友的专栏

WCF 4.5:配置文件更小,对ASP.NET的支持更好

Ido Flatow最近发布了一篇文章,其中讲述了一系列WCF将在.NET 4.5中做出的变更。 由于减少了噪音,WCF自动生成的配置文件会大大减小。从WCF的...

1995
来自专栏FreeBuf

记我在HackerOne上参与的一次漏洞众测邀请项目

这是一件关于我参与Hackerone平台某漏洞邀请项目的事,在此我要感谢该项目发起公司,他们友善的态度、及时的漏洞修复和奖金发放效率,让所有存在的提交漏洞都能在...

4054
来自专栏月色的自留地

Unix程序员的Win10二三事

1525
来自专栏程序手艺人

Connman 网络管理 快速入手指南

4527
来自专栏me的随笔

ASP.NET Core远程调试

关于ASP.NET Core远程调试的具体做法可参考微软文档——Remote Debug ASP.NET Core on a Remote IIS Comput...

1633
来自专栏张戈的专栏

纯64位版浏览器:Waterfox水狐浏览器

近期博主将自己的本本的内存从 2G 升级到 4G,勉勉强强实现了不正规双通道(CPU-Z 检测成功)。为了最大程度地发挥这 6G 的性能,博主又将系统升级到了 ...

4018
来自专栏木头编程 - moTzxx

laravel5.0+ 常见报错整理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

1712

扫码关注云+社区

领取腾讯云代金券