郑重声明: 该文章转载于以下博客园–博主yooooooo

博客园-博主yooooooo
此文对于小菜学习帮助很大,小菜实在是忍不住重新写了一遍加深理解。

WFE &WFI

WFI: Wait for interrupt
WFE: Wait for event

两者均可以让ARM核进入low-power standby模式的指令,由ARM architecture定义,由ARM core实现。

WFI和WFE

相同点

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。

不同点

那它们的区别体现在哪呢?主要体现进入和退出的方式上。
对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发生。

使用场景

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指令,可以节省功耗,也算是因祸(损失了性能)得福(降低了功耗)吧。

WFE and WFI相关推荐

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

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

  2. WFE和WFI的区别

    1. 概念: WFI(Wait for interrupt)和WFE(Wait for event)是两个让ARM核进入low-power standby模式的指令,由ARM architecture ...

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

    快速链接: .

  4. SEV/WFE/WFI

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

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

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

  6. FreeRTOS源码分析与应用开发09:低功耗Tickless模式

    目录 1. STM32F4低功耗模式简介 2. Tickless模式详解 2.1 如何降低功耗 2.2 关闭SysTick的问题与解决方案 2.2.1 关闭SysTick导致系统节拍计数器停止 2.2 ...

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

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

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

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

  9. ARM hint instruction-WFI(Wait For Interrupt)指令详解

    WFI(Wait For Interrupt)指令是ARM中的一个Hint 指令,内核执行hint指令的时候不需要依赖额外的处理操作.WFI指令可以让CPU进入standby 模式,即低功耗模式,此时 ...

最新文章

  1. Step by step通过online方式做product archiving
  2. 【渝粤教育】电大中专跨境电子商务理论与实务 (20)作业 题库
  3. PHP $_SERVER['HTTP_REFERER'] 获取前一页面的 URL 地址
  4. mysql/mariadb主从复制
  5. 自己整理实现的python小工具
  6. python的get和post方式请求详解
  7. 随机森林 ---sklearn
  8. linux rz sz putty,PuTTY xshell rz sz命令实现上传下载到windows的方法
  9. Mac投屏软件推荐duet
  10. 超级外链工具-在线SEO超级外链群发工具免费
  11. python查缺补漏之decorate
  12. 2017年自动修复概述——Automatic Software Repair: A Survey [来自软件工程顶刊 TSE 2017]
  13. 程序开发心理学第四篇
  14. 金融安全资讯精选 2017年第二期:金融网络安全和反欺诈方法论_金融新兴技术成熟度几何?...
  15. 威斯康星大学麦迪逊计算机本科,威斯康星大学麦迪逊分校计算机专业为什么火?申请要求及学费详解!...
  16. 一到放假就稀里糊涂过
  17. 《感动中国》2005年度人物评选揭晓
  18. 国企数字化转型的难点及建议
  19. 我个人整理的AD/2000技巧,各位收藏吧!60多个。 转贴
  20. 【数据库原理及应用教程(第4版|微课版)陈志泊】【第三章习题】

热门文章

  1. 项目管理 第六章 进度管理
  2. luckysheet移动端添加复制粘贴(批量粘贴)操作按钮
  3. 基于JAVA企业员工工资管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
  4. C语言程序设计教程(第三版)课后习题1.6
  5. uva 590 dp
  6. Python画动漫人物(2)
  7. Dell N5010 Win7下 玩CS全屏(1366*768)问题
  8. cmd修改本机永久路由地址
  9. 针对付费的百度文库用冰点_9个针对开发人员的付费技术写作程序
  10. 猎豹移动CTO范承工:大数据是移动营销的核心