本文翻译自
https://community.arm.com/developer/ip-products/processors/b/processors-ip-blog/posts/arm-a-profile-architecture-developments-2020
原作者: Martin Weidmann
译者: Zenon Xiu
arm与有arm构架授权的公司和生态合作伙伴一起,持续地演化arm CPU构架,开发新的功能来满足现有和新市场的要求。
这篇Blog讨论了2020年A-profile构架的一些关键新技术。
这篇Blog也介绍了未来构架技术新增的2项功能,提前提供了还没有发布的构架信息。
我们的技术网页会提供完整的指令集和系统寄存器信息
https://developer.arm.com/products/architecture/cpu-architecture/a-profile
完整的包含2020年扩展和之前功能的armv8-A构架参考手册(Arm ARM)会在2021年早些时候发布。XML格式的文档很快会发布,届时我们会发出链接。
(译者:这篇翻译发布时,XML文档已经发布,链接为 https://developer.arm.com/architectures/cpu-architecture/a-profile/exploration-tools )
之前的A-profile构架更新信息可以在这里找到, 2014, 2015, 2016, 2017, 2018 and 2019.
作为2020年构架扩展的一部分,arm增加了识别高时延设备的能力。TLB失效操作(TLBI)和屏障指令一起来实现这个属性。
PCIe这类技术允许设备热拔出。热拔出可能发生在CPU对这个设备还有没有完成outstanding请求的时候。当这个设备被拔出的时候, PCIe RootComplex会在一段 timeout时间后发出一个默认响应,这个时间一般大约是50ms。
我们预期对和这个被拔出设备直接打交道的软件有一定影响,但是我们希望减少其他,不相关任务的影响,考虑到以下情形,
图1,热拔出导致TLBI响应延迟
核1访问过被拔出的设备,现在正在等待设备的响应。
核2广播一个与设备不相关的TLBI操作并等待核1的确认(因为有DSB @Core2)。理想情况下, 核1会很快响应,因为它没有TLBI对于地址的 outstanding传输,但是,有些微构架不追踪已发出传输对应的地址转换(包括TLB)。为了满足构架定义,核1 在响应TLBI之前必须等所有的传输完成,导致核2也需要等到PCIe timeout。
我们引进了 XS属性作为避免这个问题的有效手段。为PCIe设备建立的映射设置为XS=1,表示有可能有长延迟。对于如RAM这样的区域,标志为XS=0. CPU核可以追踪一个outstanding传输是否被标志为XS=0 /1即可,而不需要记录完整的原始转换关系(address translation)这使得核2对XS=0地址的TLBI操作可以得到快速响应。
图2 使用XS属性避免TLBI响应延迟
在针对企业应用的系统里的一个趋势是,引入对加速器进行64字节原子读写操作的支持。它们用作操作设备里的队列,有些时候也用来发送入列成功/失败的信号。
为了支持这个加速器的新需求,构架增加了64字节原子读指令(LD64B)和3条原子写指令(ST64Bx).
WFE和WFI指令可以使核进入到Standby模式,比如,在等一个资源可用的时候。如果没有一个唤醒事件和中断的情况下,核呆在standby模式中的时间是没有限制的。这是WFI/WFE指令的局限性。
为了克服这个问题,引入了新的WFI/WFE的变种指令,它们会和一个计数器值相关联。CPU核会在CNTVCT_EL0 虚拟计数器达到或超过一个设置值时退出standby模式。这允许软件设置一个CPU在 standby模式的最大时间。
2020年构架扩展还包含以下小的功能
支持在52bit虚拟和物理地址下使用4KB和16KB的页表
对PAN的增强
支持MTE的异步错误处理
增强PMU和SPE
作为2020年构架增强的一部分,arm引进了2个对未来构架技术的扩展。未来构架技术是还没还有公布的,但是我们想提前分享的信息,以帮助我们的生态做好准备。
Call-Stack Recorder Extension(CSRE)和 Branch-Record Buffer Exstension(BRBE)目的是提高在arm上开发软件的体验。通过增加代码是如何执行的可见性来提升体验。这些信息可以用作调试,分析(profiling),找热点(hot-spots),反馈驱动的优化(Feedback Driven Optimization (FDO))及其他用途。
CSRE提供了影响较低的机制,记录和unwind调用栈的方式。当前调用栈(call stack)的实时视图被记录在内存中,在这里它可以被有效地抓取给到性能分析,或是被调试器解释。
BRBE抓取最近的跳转序列,并以容易解释的格式呈现。这个信息可以用作调试或是给分析工具找热点和AutoFDO。
这篇blog提供了一个armv8.7-A构架和未来构架技术最新功能的简要介绍,更多的信息很快会在我们的开发者网站出现(developer.arm.com)
下一步的工作是和包括Linaro在内的生态合作伙伴一起,使能开源软件,并且当硬件可用时这些功能可用。加入Linaro Connect学习更多2020构架扩展知识并参与讨论。
(译者:到翻译此文时Martin已经在Linaro Connect 2020 会议上分享,Slide和视频可以在这里下载 https://connect.linaro.org/resources/lvc20/lvc20-214/)
WFTI 关联的计数器,时钟是哪一个呢
可以参见 https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/architecture-support