关于AArch64架构Neoverse-N3 CPU的BPU失效方法及相关技术点的问询
关于AArch64架构Neoverse-N3 CPU的BPU失效方法及相关技术点的问询
我正在使用AArch64(ARM 64位)Neoverse-N3 CPU,想要失效整个分支预测单元(BPU)。我看到过介绍多种执行BPIALL方法的文档,但我不完全理解这在技术上是如何实现的。
针对Cortex-A73和Cortex-A75 CPU,似乎可以采用这样的方案:在AArch64模式下切换到AArch32模式,然后执行BPIALL指令。我想知道在Neoverse-N3 CPU上是否也能采用类似的方法——具体来说,我能否切换到32位模式,执行BPIALL,然后再回到64位模式?
我还了解到SMCCC_ARCH_WORKAROUND_1这个术语,据我理解它实现了一种能有效失效BPU的缓解措施,但我不清楚应该如何发起这个调用,也不知道如何验证我的CPU固件中是否实现了该功能。
最后,在同一份文档中还有关于Spectre-BHB的讨论:
为了防范跨异常级别或安全状态的攻击,Arm建议在进入更高异常级别的异常时丢弃分支历史记录。具体方法取决于处理器微架构:
- Cortex-A65、Cortex-A65AE 及 Neoverse E1: 在最高实现的异常级别禁用并重新启用MMU。
- Cortex-A73 及 Cortex-A75:
- 在AArch32模式下:使用BPIALL指令失效分支预测器。
- 在AArch64模式下:切换到AArch32模式,然后通过Secure EL1代码执行BPIALL。
- 所有其他易受攻击的核心: 插入一个带有特定实现迭代次数('K')的循环缓解方案,在进入更高异常级别的异常时丢弃分支历史记录。
针对Neoverse-N3,文档中指定了K=38。这是否意味着所有Neoverse-N3 CPU都必须跟踪38条分支历史记录?我的理解是分支历史的实现取决于CPU微架构,所以我不确定该如何解读这个数字。
希望能得到这些问题的澄清。
备注:内容来源于stack exchange,提问作者Gal Kaptsenel
相关产品推荐
相关产品推荐

