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://www.cnblogs.com/linhaostudy/p/9398798.html

WFE和WFI的区别相关推荐

  1. ARM系列之ARM多核指令WFE、WFI、SEV原理

    目录 前言 使用场景概述 WFE.SEV 与 WFI 的作用与工作原理 SEV WFE WFI The Event Register WFE伪代码 WFE wake-up events WFI伪代码 ...

  2. WFE and WFI

    郑重声明: 该文章转载于以下博客园–博主yooooooo 博客园-博主yooooooo 此文对于小菜学习帮助很大,小菜实在是忍不住重新写了一遍加深理解. WFE &WFI WFI: Wait ...

  3. wlan和wfi的区别

    WLAN简介: WLAN全称为:Wireless Local Area Networks,中文解释为:无线局域网络,是一种利用射频(Radio Frequency RF)技术进行据传输的系统,该技术的 ...

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

    快速链接: .

  5. SEV/WFE/WFI

    目录 WFE SEV WFI WFE Wait For Event,是否实现此指令是可选的.如果此指令未实现,它将作为NOP指令来执行.如果指令作为NOP在目标处理器上执行,汇编程序将生成诊断消息. ...

  6. 正点原子STM32(基于HAL库)3

    目录 高级定时器实验 高级定时器简介 高级定时器输出指定个数PWM 实验 高级定时器输出指定个数PWM原理 TIM1/TIM8 寄存器 硬件设计 课堂源码(输出指定个数PWM灯就闪几次) 程序设计 下 ...

  7. 嵌入式系统原理及应用课后习题答案

    嵌入式系统原理及应用-基于ARM Cortex-M3内核的STM32F103系列微控制器 第1篇 系统篇 第1章嵌入式系统概述 第2章嵌入式系统开发 第2篇 内核篇 第3章ARMCortex-M3处理 ...

  8. ARMV8对CPU虚拟化的支持及L4_fiasco中实现

    部分素材参考原同事文档,如有冒犯敬请谅解. 1.ARMV8对虚拟化的支持 ARMV8把之前架构中的processor mode的概念去掉(或者说淡化),取而代之的是4个固定的Exception lev ...

  9. 姚文详(Joseph Yiu):《ARM Cortex-M0权威指南》中文版目录

    JosephYiu是英国ARM公司微控制器系统级设计专家,是ARMCortex-M3和Cortex-M0设计者,作者高屋建瓴,创作了基于Cortex-M0的重量级作品--<ARMCortex-M ...

最新文章

  1. lnmp之mysql原码编译
  2. Java课堂测试——一维数组
  3. 为何我通过 Calendar1.SelectedDate.DayOfWeek.ToString() 获取的“星期”总是英文的???...
  4. 北京市:通过区块链等技术手段,实现住所申报材料无纸化
  5. Socket网络协议之一
  6. C语言 二维数组遍历 - C语言零基础入门教程
  7. python3 协程 写法_理解Python的协程(Coroutine)
  8. vue-cli目录结构解析
  9. 电脑安装系统出错蓝屏报错为 STOP 0xc0000020 ,什么原因?
  10. mysql常用加密方法_MYSQL 加密的 3 类方法
  11. android中xmlns的作用
  12. 1.PHP数据库陷阱
  13. kettle下载和使用
  14. 在vim中删除空白行
  15. 数据字典的主要作用是什么?
  16. Centos7 安装独立显卡驱动
  17. 支持p2p的m3u8.php,m3u8视频播放器集成p2p加速源码分享
  18. 设置页面默认为繁体字
  19. Adobe Creative Suite 3 下载(包括MAC版) 和 收集的一些资料
  20. LDA主题模型及python实现

热门文章

  1. YOLOv5/v7 更换骨干网络之 MobileNetV3
  2. C# PDF操作之-PDF转PPT
  3. 让Linux进程在后台运行
  4. 一个基于HTML5的虚拟实验室
  5. osg中NDC坐标转换为世界坐标
  6. 基于微信预约挂号小程序毕业设计毕设作品(5)任务书
  7. 一篇文章让你走进Java世界
  8. linux操作系统为SCSI硬盘分区,Linux操作系统的硬盘分区是什么?
  9. Linux基本命令(上)
  10. SpringAop想通过某个子类切父类的方法