飞腾CPU体系结构之低功耗指令

飞腾CPU体系结构之低功耗指令

WFE和WFI指令

当飞腾CPU核执行两类指令:WFE或WFI之后,CPU核会进入低功耗状态; 一旦CPU核进入低功耗状态,就要一直保持低功耗状态直到相应的唤醒事件发生。ARM体系结构并没有定义CPU核进入低功耗的具体属性要求;但是确保在进入、保持和退出低功耗的整个过程中,内存和高速缓冲依然满足数据一致性。

在AArch64状态下,低功耗常规唤醒事件列表如下:

唤醒事件WFEWFI
当前核接收到物理中断vv
当前核接收到虚拟中断vv
当前核接收到定时器事件流的事件v-
SVE指令v-
全局性能计时器被清零v-
  1. 当前飞腾CPU还不支持WFET和WFIT这两个指令。
  2. 当飞腾CPU核执行WFE,CPU核首先检查内部的唤醒事件列表(软件不可直接访问),如果唤醒事件列表为空,CPU核就会进入低功耗状态。

SEV和SEVL指令

当飞腾CPU核执行SEV指令,就会向CPU内部所有核发送唤醒事件。
当飞腾CPU核执行SEVL指令,只会向该CPU核发送唤醒事件。

WFE和SEV/SEVL常规用法

抢占操作

	sevl
1:	wfe
	/*抢占操作*/
	...
	/*如果抢占不成功,就跳转回到 1*/
	cbxx...

释放操作

	/*释放操作*/
	...
	dsb
	sev

问题1:为什么要sevl?
答:cpu核给自己发送唤醒事件,这是为了保证第一次wfe由于唤醒事件列表不为空,所以不会进入低功耗,但依然会清空唤醒事件列表。
问题2:为什么sev之前要用dsb指令?
答:因为CPU不能保证sev在释放操作之后运行,为了确保sev在释放操作完成之后执行,必须加入dsb指令。

WFI常规用法

CPU核退出

1: wfe
	wfi
	b 1b

CPU核进入idle状态

static void __cpu_do_idle(void)
{
	dsb(sy);
	wfi();
}

参考定义

#define sev()           asm volatile("sev" : : : "memory")
#define wfe()           asm volatile("wfe" : : : "memory")
#define wfi()           asm volatile("wfi" : : : "memory")
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值