21

修志龙_ZenonXiu · 2023年06月08日 · 上海市浦东新区

Neoverse N2和CMN-700系统的PoC点在哪里?

分析一篇我的知识文章:
https://developer.arm.com/doc...

DC IVAC/ DC CIVAC指令用于将一个虚拟地址对应的cache line从data cache或是unified cache失效或清除失效到PoC点。N2 core硬件默认会将DC IVAC升级为DC CIVAC操作。

Point of Coherency (PoC)位于:确保系统中所有可以访问内存的agent访问这个地址可以看到同样的copy的地方,不管它的访问内存类型(memory type)和cache属性(cacheable or non cacheable)是什么。

在很多系统中,它都位于系统主内存。

在一个N2+CMN-700的系统中,

n2_cmn700_poc-Page-3.jpg

CMN-700的system level cache (SLC)是invisible cache, 如果device发出的non cacheable访问的地址被RN-SAM指定到HN-F,这个non cacheable访问还是会查找HN-F的SLC,也可以snoop CPU的cache。

这是否意味着,这样的系统的PoC点在CMN-700的SLC,而不需要在系统主内存呢?因为DC IVAC/ DC CIVAC只需要将数据失效/清除失效到SLC,不需要失效/清除失效掉SLC中对应的cache line,其他CPU和Device就可以看到同样的copy了。

确实,如果系统中所有可以访问内存的master都接到CMN-700的RN-F,RN-I, RN-D上,并且他们访问的地址是在RN-SAM里面指定到HN-F,PoC只到SLC是可以的。

但是如果系统中有其他不接到CMN-700的master,或者它们访问的地址RN-SAM里面不是指定到HN-F,那么就无法显示PoC要求的:确保系统中所有可以访问内存的agent访问这个地址可以看到同样的copy的地方,不管它的访问内存类型(memory type)和cache属性(cacheable or non cacheable)是什么。

因此,在N2+CMN-700的系统,DC IVAC/ DC CIVAC还是需要失效/清除掉SLC中对应的cache line。
Untitled Diagram-Page-1.jpg

CMN-700支持将这些cache maintanance operation (CMO)下传到内存控制器,如果CMN-700之下还接有其他更低level的cache的话,下传这些CMO可以进一步使CMO PoC的操作影响到更低level的cache。控制是否下传是可以通过编程每个SN-F对应的HF-N寄存器cmn_hns_sam_sn_properties中的cmo_prop_en来实现。

推荐阅读
关注数
8646
内容数
60
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息