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 使用场景
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的区别相关推荐
- ARM系列之ARM多核指令WFE、WFI、SEV原理
目录 前言 使用场景概述 WFE.SEV 与 WFI 的作用与工作原理 SEV WFE WFI The Event Register WFE伪代码 WFE wake-up events WFI伪代码 ...
- WFE and WFI
郑重声明: 该文章转载于以下博客园–博主yooooooo 博客园-博主yooooooo 此文对于小菜学习帮助很大,小菜实在是忍不住重新写了一遍加深理解. WFE &WFI WFI: Wait ...
- wlan和wfi的区别
WLAN简介: WLAN全称为:Wireless Local Area Networks,中文解释为:无线局域网络,是一种利用射频(Radio Frequency RF)技术进行据传输的系统,该技术的 ...
- 最全讲解WFE和WFI进入低功耗的原理机制
快速链接: .
- SEV/WFE/WFI
目录 WFE SEV WFI WFE Wait For Event,是否实现此指令是可选的.如果此指令未实现,它将作为NOP指令来执行.如果指令作为NOP在目标处理器上执行,汇编程序将生成诊断消息. ...
- 正点原子STM32(基于HAL库)3
目录 高级定时器实验 高级定时器简介 高级定时器输出指定个数PWM 实验 高级定时器输出指定个数PWM原理 TIM1/TIM8 寄存器 硬件设计 课堂源码(输出指定个数PWM灯就闪几次) 程序设计 下 ...
- 嵌入式系统原理及应用课后习题答案
嵌入式系统原理及应用-基于ARM Cortex-M3内核的STM32F103系列微控制器 第1篇 系统篇 第1章嵌入式系统概述 第2章嵌入式系统开发 第2篇 内核篇 第3章ARMCortex-M3处理 ...
- ARMV8对CPU虚拟化的支持及L4_fiasco中实现
部分素材参考原同事文档,如有冒犯敬请谅解. 1.ARMV8对虚拟化的支持 ARMV8把之前架构中的processor mode的概念去掉(或者说淡化),取而代之的是4个固定的Exception lev ...
- 姚文详(Joseph Yiu):《ARM Cortex-M0权威指南》中文版目录
JosephYiu是英国ARM公司微控制器系统级设计专家,是ARMCortex-M3和Cortex-M0设计者,作者高屋建瓴,创作了基于Cortex-M0的重量级作品--<ARMCortex-M ...
最新文章
- lnmp之mysql原码编译
- Java课堂测试——一维数组
- 为何我通过 Calendar1.SelectedDate.DayOfWeek.ToString() 获取的“星期”总是英文的???...
- 北京市:通过区块链等技术手段,实现住所申报材料无纸化
- Socket网络协议之一
- C语言 二维数组遍历 - C语言零基础入门教程
- python3 协程 写法_理解Python的协程(Coroutine)
- vue-cli目录结构解析
- 电脑安装系统出错蓝屏报错为 STOP 0xc0000020 ,什么原因?
- mysql常用加密方法_MYSQL 加密的 3 类方法
- android中xmlns的作用
- 1.PHP数据库陷阱
- kettle下载和使用
- 在vim中删除空白行
- 数据字典的主要作用是什么?
- Centos7 安装独立显卡驱动
- 支持p2p的m3u8.php,m3u8视频播放器集成p2p加速源码分享
- 设置页面默认为繁体字
- Adobe Creative Suite 3 下载(包括MAC版) 和 收集的一些资料
- LDA主题模型及python实现