Cortex®‑A715核心支持可靠性、可用性和可服务性(RAS)v1.1扩展,但不支持可选的RAS时间戳扩展。
具体而言,Cortex®‑A715核心支持以下RAS扩展功能:
• 对包含脏数据的功能性RAM进行单错误纠正、双错误检测(SECDED)和错误纠正码(ECC)的缓存保护。包括L1数据标签和数据、L2标签和数据以及L2事务队列(TQ)RAM。
• 对只包含干净数据的功能性RAM进行单错误检测(SED)奇偶校验的缓存保护。包括L1指令标签和数据缓存以及内存管理单元(MMU)RAM。
• 错误同步屏障(ESB)指令。当执行ESB指令时,核心确保在ESB之前生成的所有SError中断要么由核心接收,要么挂起在DISR_EL1中。
• 总线传输中的毒属性。
• 错误数据记录寄存器。
• 错误处理中断(FHI)。
• 错误恢复中断(ERI)。
• 错误注入。
Cortex®‑A715核心具有以下节点:
• 节点0,包括DynamIQ™ Shared Unit-110(DSU-110)中的共享L3内存系统。
• 节点1,包括核心中的私有L1和L2内存系统。
有关架构RAS扩展和节点定义的更多信息,请参阅Arm® Reliability, Availability, and Serviceability (RAS) Specification Armv8,针对Armv8-A架构配置文件。
有关包含共享L3内存系统的节点的信息,请参阅Arm® DynamIQ™ Shared Unit-110 Technical Reference Manual中的RAS扩展支持部分。
11.1 Cache protection behavior
在Cortex®‑A715核心中,可靠性、可用性和可服务性(RAS)扩展的配置包括缓存保护。在这种情况下,Cortex®‑A715核心可以防止RAM位单元保存错误值而导致的错误。
Cortex®‑A715核心中的RAM具有以下功能:
SED奇偶校验
单错误检测(SED)。一个奇偶校验位适用于整个字。字的大小对于每个RAM都是特定的,并且取决于保护颗粒。
SECDED纠错码
单错误纠正、双错误检测(SECDED),错误纠正码(ECC)。字的大小对于每个RAM都是特定的,并且取决于保护颗粒。
以下表格显示了每个RAM应用的保护类型。当任何RAM中有单个位错误时,核心可以继续进行并保持功能上的正确性。
如果不同的RAM或同一RAM内的不同保护颗粒存在多个单位错误,核心也可以保持功能上的正确性。
如果在同一保护颗粒内的单个RAM中存在双位错误,则行为取决于RAM:
• 对于具有SECDED功能的RAM,核心会检测并报告或推迟错误。如果错误出现在包含脏数据的缓存行中,则可能丢失该数据。
• 对于仅具有SED的RAM,核心无法检测到双位错误。这可能导致数据损坏。
如果在同一保护颗粒内有三个或更多位错误,核心可能会或可能不会检测到这些错误。它是否检测到错误取决于RAM和错误在RAM内的位置。当没有错误时,核心的缓存保护功能对性能的影响很小。
11.2 Error containment //错误隔离
Cortex®-A715核心支持数据错误的错误隔离。这意味着检测到的数据错误不会静默传播。使用数据污染来延迟数据错误,确保使用者知道错误的存在。无法纠正的L1数据缓存标签错误和L2缓存标签错误无法被隔离。
错误隔离还意味着在替换时,如果存在双重错误,支持对所关联数据进行污染,以确保在使用时报告相关数据的错误。
该核心还支持错误同步屏障(Error Synchronization Barrier,ESB)指令,进一步隔离在使用污染数据时报告的不精确异常。
11.3 Fault detection and reporting
当Cortex®-A715核心检测到故障时,通过故障或错误信号引发Fault Handling Interrupt (FHI)异常或Error Recovery Interrupt (ERI)异常。FHIs和ERIs会在可靠性、可用性和可维护性(RAS)寄存器中反映,这些寄存器会在检测到错误的节点中更新。核心节点错误使用nCOREFAULTIRQ进行报告。
未纠正的故障
当ERR1CTLR.FI被设置时,所有由核心n检测到的延迟错误和未纠正错误都会通过nFAULTIRQ[n+1]信号生成一个FHI。
当ERR1CTLR.CFI或任何其他CE计数器溢出位被设置时,所有检测到的已纠正错误也会导致生成一个FHI。
未纠正的中断
当ERR1CTLR.UI被设置时,核心n检测到的所有未推迟的未纠正错误都会在nCOREERRIQ信号上生成一个错误恢复中断。
清除报告的故障
nFAULTIRQ [n+1]和nERRIRQ [n+1]信号必须保持激活状态,直到软件通过写入ERR1STATUS寄存器来清除它们。
11.4 Error detection and reporting
当Cortex®-A715核心发生错误时,根据错误类型会引发不同的异常。
Cortex®-A715核心可能引发以下异常:
- 同步外部中止(Synchronous External Abort,SEA)
- 异步外部中止(Asynchronous External Abort,AEA)
- 错误恢复中断(Error Recovery Interrupt,ERI)
错误检测和报告寄存器:
以下寄存器用于错误处理和报告:
- 错误记录特征寄存器(Error Record Feature Registers,ERR1FR)。这些只读寄存器指定各种错误记录设置。
- 错误记录控制寄存器(Error Record Control Registers,ERR1CTLR)。这些寄存器用于启用错误报告,并启用与错误和故障相关的各种中断。
- 错误记录杂项寄存器(Error Record Miscellaneous Registers,ERR1MISC0-3)。这些寄存器记录错误位置和计数的详细信息。
- 伪故障生成特征寄存器(Pseudo-fault Generation Feature register,ERR1PFGF)。这个只读寄存器指定各种错误设置。
11.4.1 Error reporting and performance monitoring
所有检测到的内存错误,包括纠错码(ECC)错误或奇偶校验错误,都会触发"MEMORY_ERROR"事件。
如果选择了"MEMORY_ERROR"事件并且计数器已启用,则性能监视单元(Performance Monitoring Unit,PMU)计数该事件。
在安全状态下,只有当MDCR_EL3.SPME被断言时,才会计数该事件。关于MDCR_EL3的详细信息,请参阅Arm® A-profile架构参考手册。
相关信息
可以在《Arm® Architecture Reference Manual for A-profile architecture》的第98页中找到,其中描述了性能监视器事件。
11.5 Error injection //错误注入
错误注入(Error injection)是指在错误检测逻辑中插入错误,以验证错误处理软件的功能。
错误注入使用错误检测和报告寄存器来插入错误。Cortex®-A715核心可以注入以下类型的错误:
修正的错误
单个纠错码(ECC)错误在L1数据缓存访问时会生成一个修正错误(CE)。
延迟的错误
当从L1缓存驱逐一个缓存行到L2缓存时发生双重ECC错误,或者在对L1缓存进行探测时产生延迟错误(DE)。
无法控制的错误
当L1标签RAM或随后发生驱逐的L2标签RAM出现双重ECC错误时,会生成无法控制的错误(UC)。
错误可以立即注入,也可以在一个32位计数器达到零时注入。您可以通过错误伪故障生成倒计时寄存器(ERR1PFGCDN)控制计数器的值。计数器的值按每个时钟周期递减。有关ERR1PFGCDN的更多信息,请参阅《Arm®可靠性、可用性和可维护性(RAS)规范Armv8》,了解Armv8-A架构配置文件的更多信息。
错误注入是系统中的一个独立的错误源,不会创建硬件故障。
11.6 AArch64 RAS registers
摘要表提供了核心中实现定义的RAS寄存器的概览。要了解有关寄存器的更多信息,请在表格中单击寄存器名称。
对于没有列出复位值的寄存器,请参考注册表描述页面或Arm ARM中记录的各个字段复位信息。