8. L1 data memory system

Cortex®-A715核心的L1数据存储系统执行加载和存储指令。它处理内存一致性请求以及特定的指令,例如原子操作、缓存维护操作和内存标记指令。L1数据存储系统包括L1数据缓存和L1数据转换后备缓冲器(TLB)。
以下表格展示了L1数据存储系统的特性。

L1数据TLB也驻留在L1数据存储系统中。然而,它是内存管理单元(MMU)的一部分,并在第51页的「6. 内存管理」中描述。
8.1 L1 data cache behavior
L1数据缓存在复位时会自动失效,除非将核心电源模式初始化为调试恢复模式。
在调试恢复模式下,L1数据缓存不可用。
没有针对整个数据缓存进行失效的操作。如果软件需要此功能,那么必须通过迭代缓存几何结构并执行一系列单独的按集/路指令来构建它。DC CISW操作同时对目标集/路进行清除和失效。HCR_EL2.SWIO的值不起作用。有关DC CISW和HCR_EL2的更多信息,请参阅Arm® A-profile架构参考手册。
当L1数据缓存禁用时的行为:
• 加载指令不会在L2或L3缓存中分配新的行。
• 对可缓存内存的所有加载和存储指令均视为非可缓存。
• 数据缓存维护操作继续正常执行。
L1数据缓存和L2缓存不能独立禁用。当一个核心禁用了L1数据缓存后,由该核心发出的可缓存内存访问不再缓存到L1或L2缓存中。但是,共享L2缓存的另一个核心仍然可以将数据缓存在其L1缓存和共享的L2缓存中。
为了保持多个核心之间的数据一致性,Cortex®-A715核心使用修改、排他、共享、失效(MESI)协议。
缓存索引的确定方式意味着物理地址(PA)和组号之间没有直接关系。您不能使用假定PA和组号之间存在关系的目标化操作。
要刷新整个缓存,必须按照CCSIDR_EL1中描述的缓存的组数和路数执行集和路维护操作。该操作符合Armv8-A架构。
相关信息:
5.4.5 调试恢复模式 (第45页)
8.2 Write streaming mode
Cortex®-A715核心支持写流模式,有时也称为读分配模式,适用于L1和L2缓存。
在读缺失或写缺失时,缓存行会分配给L1或L2缓存。然而,写入大块数据可能会使缓存中充满不必要的数据。当执行的线填充只是为了丢弃线填充数据时,这会浪费功耗和性能,因为整个缓存行会被后续的写操作覆盖(例如使用memset()或memcpy())。在某些情况下,写操作不需要分配缓存行,比如执行C标准库的memset()函数来将大块内存清零。
为了防止不必要的缓存行分配,合并写缓冲器(MWB)会检测核心在线填充完成之前是否已经写入了完整的缓存行。如果在可配置数量的连续线填充中检测到这种情况,则MWB切换到写流模式。进入写流模式后,加载操作的行为正常,仍可能导致线填充。在写流模式下,写操作仍会查找缓存,但如果未命中,则会写入L2或L3缓存,而不是开始线填充。
在MWB切换到写流模式之前,可能会观察到超过指定数量的线填充。
写流模式将保持启用,直到以下情况发生之一:
• 检测到一个不完整的缓存行可缓存写入突发。
• 有一个后续的加载操作与尚未完成的写流目标相同。
当Cortex®-A715核心切换到写流模式时,MWB会继续监视总线流量。当它观察到进一步数量的完整缓存行写入时,它会向L2或L3缓存发出信号进入写流模式。
写流阈值定义了在存储操作停止引起缓存分配之前,连续多少个缓存行将被完全写入而没有被读取。您可以通过写入寄存器A.1.15 IMP_CPUECTLR_EL1,即CPU扩展控制寄存器,来配置每个缓存(L1、L2和L3)的写流阈值。
8.3 Instruction implementation in the L1 data memory system
Cortex®-A715核心支持Arm®v8.1-A架构中添加的原子指令。
对可缓存内存的原子指令可以作为近原子操作或远原子操作执行,默认情况下,Cortex®-A715核心将这些指令作为近原子操作执行。
另外,可以对CPUECTLR进行编程,以根据系统行为,某些原子指令尝试作为远原子操作执行。
当作为远原子操作执行时,原子操作传递给互连模块执行。如果操作在集群内任何位置命中,或者互连模块不支持原子操作,则L3内存系统执行原子操作。如果缓存行不存在,则将其分配到L3缓存中。
当启用了精确检查的内存标记扩展(MTE)时,所有经过检查的原子操作都会在近处执行。
Cortex®-A715核心支持对设备或非缓存内存的原子操作,但这也取决于互连模块是否支持原子操作。如果在互连模块不支持原子操作的情况下执行此类原子指令,则会导致异常中止。
8.4 Internal exclusive monitor    //内部独占监视器
Cortex®-A715核心包含一个内部独占监视器,具有2状态(开放状态和独占状态)的状态机,用于管理Load-Exclusive和Store-Exclusive访问以及Clear-Exclusive (CLREX)指令。
您可以使用这些指令构建信号量,确保在核心上运行的不同进程之间以及使用相同一致性内存位置的不同核心之间的同步。Load-Exclusive指令会为一小块内存标记独占访问权。CTR_EL0将标记块的大小定义为16个字,即一个缓存行。
Load-Exclusive或Store-Exclusive指令是以LDX、LDAX、STX或STLX开头的指令助记符。
有关这些指令的更多信息,请参阅A-Profile架构的Arm® Architecture Reference Manual。
有关更多技术参考和寄存器信息,请参阅第312页的A.4.23 CTR_EL0,缓存类型寄存器。
8.5 Data prefetching
数据预取在执行性能提升之前获取数据。对于无法有效处理的情况,Cortex®-A715核心支持AArch64预取存储器指令PRFM。
这些指令向内存系统发出信号,指示指定地址的内存访问可能很快发生。内存系统采取措施以减少内存访问的延迟。
PRFM指令在缓存中进行查找。如果缓存未命中且是可缓存地址,则开始进行线填充(linefill)。然而,当线填充开始时,PRFM指令已经完成,并且不会等待线填充完成。
有关预取内存和预加载缓存的更多信息,请参阅A-Profile架构的Arm® Architecture Reference Manual。
硬件数据预取器
加载/存储单元包括负责生成针对L1、L2和L3缓存的预取的硬件预取引擎。具体而言,L1内存子系统中的预取引擎针对L1和L2缓存。L2内存子系统中的预取引擎针对L2和L3缓存。加载端的预取器使用虚拟地址(VA)和程序计数器(PC)。存储端的预取器仅使用虚拟地址(VA)。
CPUECTLR寄存器允许对预取器行为的某些方面进行控制。有关更多信息,请参阅以下内容:
• 第159页的A.1.15 IMP_CPUECTLR_EL1,CPU扩展控制寄存器
• 第167页的A.1.16 IMP_CPUECTLR2_EL1,CPU扩展控制寄存器
数据缓存清零
在Cortex®-A715核心中,通过虚拟地址执行数据缓存清零(DC ZVA)指令可将内存中的一块64字节区域(对齐到64字节)设置为零。
有关更多信息,请参阅A-Profile架构的Arm® Architecture Reference Manual。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值