TIwilliam hill官网
直播中

刘超

7年用户 1438经验值
私信 关注
[问答]

C6678的Cache维护的一些原则讨论

请教:
         在当前基于C6678的大型项目开发中,在cache的维护上遇到了一些问题,为此希望建立一些基本的维护规则。在应用中,变量可以认为有以下3种:仅核自身用到的变量;多核共享的标志变量(用于核间传递信息);核与外设交互的数据。cache只使用L1D,L2不作cache用。
         考虑采用下述原则:
         1、核自身用到的变量,定义于L2上,并不作任何一致性维护;
          2、多核交互变量,定义于共享内存,任何核写入后均立刻writeback,读出前Invalid;变量定义全部对齐到cache line大小(以避免对一个变量的回写和无效影响其它变量)
          3、核与外设交互的数据,当其定义于L2或MSMC上时,分别参照第1条和第2条。
          根据大家的开发经验,这些原则是否正确和全面?希望有开发经验的同学能分享经验。

回帖(11)

王英

2018-6-21 11:00:10
原则上没有问题,在C6678上请关闭MSMC的Prefetch,详见C6678 silicon errata Advisory 28.
如果在刷Cache时使用mfence指令,一个mfence是不可靠的,需要用连续两个,详见 Advisory 27.
举报

陈娟

2018-6-21 11:11:52
引用: hdfsf 发表于 2018-6-21 11:00
原则上没有问题,在C6678上请关闭MSMC的Prefetch,详见C6678 silicon errata Advisory 28.
如果在刷Cache时使用mfence指令,一个mfence是不可靠的,需要用连续两个,详见 Advisory 27.

Allen Yin 您好!
          最近在C6678上遇到cache的问题,我使用DMA将数据从cache非使能区拷贝到cache使能区(先无效化cache),在cache使能区计算完毕后又把结果存放到cache非使能区(先回写cache),DMA操作遵循cache维护一致性,但是还是偶尔出现了cache导致的数据错误,请问跟你说的这两个勘误有关吗?(Advisory 27和Advisory 28)
另外,csl库里cache回写的函数最后会有一个mfence操作的语句,你的意思是这个函数是不可靠的?需要再加一个mfence语句??
举报

刘超

2018-6-21 11:17:55
引用: 0896086 发表于 2018-6-21 11:11
Allen Yin 您好!
          最近在C6678上遇到cache的问题,我使用DMA将数据从cache非使能区拷贝到cache使能区(先无效化cache),在cache使能区计算完毕后又把结果存放到cache非使能区(先回写cache),DMA操作遵循cache维护一致性,但是还是偶尔出现了cache导致的数据错误,请问跟你说的这两个勘误有关吗?(Adviso ...

建议你使用keystone库里的writebackcache和invalidcache代码吧,CSL代码有些确实不可靠
举报

王英

2018-6-21 11:23:17
引用: 0896086 发表于 2018-6-21 11:11
Allen Yin 您好!
          最近在C6678上遇到cache的问题,我使用DMA将数据从cache非使能区拷贝到cache使能区(先无效化cache),在cache使能区计算完毕后又把结果存放到cache非使能区(先回写cache),DMA操作遵循cache维护一致性,但是还是偶尔出现了cache导致的数据错误,请问跟你说的这两个勘误有关吗?(Adviso ...

s是这样的,必须连续调用两次mfence才能有效,一个mfence可能会出问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分