ARM Neoverse CPU core支持write steaming模式,例如Neoverse N2、N3、V2、V3 core等都支持write streaming模式。
1. write streaming介绍
write streaming模式也叫做read allocate模式,就是将数据直接写入到某一级cache中。
当L1/L2 cache发生读miss或者写miss时,cacheline会被分配到L1/L2 cache。然而,写大块的数据有时会污染cache,也会浪费功耗和性能,因为cacheline数据会被接下来的写操作覆盖掉(例如使用memset、memcpy函数时)。
在一些情况下,cacheline的写分配是不需要的。例如,执行C标准库里的函数memset()来将一大块的内存清除为已知值时。为了避免不必要的cacheline分配,内存系统会检测cpu core是否已连续写入了一组完整的cacheline。如果检测到连续的完整cacheline的写操作到达一定阈值,那么系统就会切换到write streaming模式。也就是说,ReadUnique + WriteBackFull操作在达到一定阈值时,会变为WriteUniqueFull操作。
在write streaming模式下,load操作表现正常,仍然可以引发cacheline填充。写入操作仍会在缓存中查找,但如果miss的话,则会写入L2 cache或系统,而不是进行cacheline填充。
write streaming模式会一直保持使能,直到检测到以下任意一个:
1. 检测到cacheable写操作不是完整的cacheline,即不是64 Byte写操作;
2. 检测到接下来的load操作的cacheline地址与outstanding write stream的地址相同。
2. write streaming寄存器
用户可以配置触发write streaming的阈值,也可以关闭write streaming模式。
以ARM N2 core为例,寄存器IMP_CPUECTLR_EL1里的相关域段如下:
WS_THR_L2控制write stream到L2 cache的阈值,默认值是256B。
WS_THR_L3控制write stream到L3(即SLC) cache的阈值,默认值是256KB。
WS_THR_L4控制write stream到L4 cache的阈值,默认值是512KB。
WS_THR_DRAM控制write stream到DDR RAM阈值,默认值是1MB。
参考:
Arm Neoverse N2/N3 Core TRM
Arm Neoverse V2/V3 Core TRM
31
