ARM CPU的推测执行(Speculative execution)

本文详细介绍了ARMCPU中的推测执行技术,它是提高处理器性能的关键要素,但可能引发非预期的内存访问。为避免负面影响,文章强调了MMU的正确编程至关重要,包括设定转换表条目、管理内存属性和预取规则。通过遵循MMU编程规则,可以防止推测执行导致的系统异常,确保处理器安全高效运行。
摘要由CSDN通过智能技术生成

鲲鹏开发重点2––ARM CPU的推测执行(Speculative execution)-云社区-华为云

预测执行(Speculative Execution)技术,它和multiple branch prediction(多分支预测)、 data flow analysis(数据流分析)三项技术,一起构成了out-of-order execution (乱序执行,OOOE)的技术基石。它是现代高性能计算的基础技术之一,广泛被应用在高端ARM CPU(包括各种定制ARM芯片:高通、Apple、etc), IBM的Power 系列CPU,SPARC和X86 CPU中

一、简介Introduction

伴随着处理器引入具备分支预测和推测执行功能的复杂流水线,正确地对MMU编程变得尤为重要,否则将出现非本意的内存访问,严重时将导致处理器挂起或者系统异常。本指南规定了安全编程MMU以避免此类问题的最低要求,假定读者已经理解了MMU运行的基本原理,如果不了解,需要先看相关编程手册补充MMU知识。

二、推测执行Speculative execution

Cortex-A 系列处理器推测执行指令可以提升性能,通常基于分支预测的结果,如果预测正确,将收到较好的性能收益,如果预测失败,所有推测执行的结果将抛弃,流水线将被清空。推测执行可能导致程序访问非本意的内存区域,无论是用于数据读、指令预取还是地址转换表的遍历。MMU必须正确设置才能防止推测执行对系统产生意外的副作用。

现代处理器的分支预测准确率已经相当的高了,高达95%以上,所以预测错误引入的流水线惩罚也越来越忽略不计,预测失败对性能的影响微乎其微,总体上看是利大于弊的。但是,因为推测执行导致的程序异常和系统影响却不可不关注,通过MMU管理可以避免,就像CPU的乱序执行,需要程序员关注一样,手段是添加DMB等指令来阻止对程序有影响的乱序执行,CPU的推测执行也需要程序员关注,只是,这个程序员是更偏向于系统软件的,需要考虑MMU编程来管理。

如果说乱序执行和推测执行为什么分开描述,因为手册就是这样描述的,所以就只好这样去理解。但是,推测执行更加隐秘,不是软件流程写错了,而是CPU没有按照你熟知的套路出牌,

都是底层的指令级并行技术,软件层面是看不到的,这些并行技术本意是不影响软件意图的,无奈,系统复杂,一旦指令并行影响了应用软件,应用软件程序员抓破头皮也无济于事。

三、推测执行与指令预取规则

Speculative execution and instruction prefetching rules

1、除非指令改变系统状态,否则允许推测执行指令。

2、不与内存交互的指令可以推测执行 。(直到内部推测寄存器资源耗尽)

3、针对Nornal属性的读内存操作可以推测执行。(写操作不可以推测执行,针对Device属性和strongly ordered属性的内存不可以推测执行)
4、指令预取将基于预测的程序流进行,包括从分支预测失败后的恢复,指令预取不涉及XN位被置位的地址。

5、推测读操作和指令预取(如果需要)将启动地址转换表walks动作。(发生在地址跨页的时候)

推测执行的影响细化了,并不是我们理解的推测执行什么事情都可以干,对内存无损坏的事情(读访问)可以提前干,对硬件寄存器的读访问不能顺便干。

 

四、MMU编程规则MMU programming rules

1、所有的转换表条目都必须被编程,不管是使用的Level 1,2和3,以及未使用的虚拟地址转换条目也必须用能报错的编码进行编程,访问敏感的区域必须编程为Device属性和Strongly Ordered Memory属性。

2、包含访问敏感属性的内存区域必须设置XN位。

3、TTBR中设置的cache属性必须与转换表地址范围中编程的cache属性相匹配。

这三点规则细化了MMU编程的注意事项,内存属性要设置正确,cache属性要设置正确,必要时要设置XN位(execute never)。

 

五、小结Summary

1、Cortex-A 系列处理器的推测执行可能导致不期望的内存访问

2、如果地址转换表没有全编程将导致不期望的内存操作,改变系统状态或者发生处理器挂起。

3、转换表必须完全编程来阻止不期望的副作用。

感觉这三点总结就是一句话,通过MMU的转换表正确的无遗漏的编程阻止处理器推测执行引入的负面影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值