TI中文支持网
TI专业的中文技术问题搜集分享网站

MSM的cache一致性维护问题

专家您好:

       最近在调试过程中发现:通过Pcie传送来的数据数据大到一定范围cache inv操作就不起作用了。导致程序运行错误。

      1. csl库中的cache操作分两种,一种直接对L1、L2进行inv和writebak操作,一种是对内存地址依照大小进行cache维护操作,测试时发现有些csl中的cache语句

没有起到相应的作用。对内存地址进行cache操作超过一定范围就会失效。

      请问:

      1.对于用共享接受外设数据的cache维护有何需要注意的地方,比如地址128byte字节对齐,大小128byte字节对齐。cache维护有无大小限制?

      2.如果更新的数据量比较大,对整个L1cache无效和依照内存地址进行cache无效有何区别?

      3.csl库的cache维护代码,需不需要其他相关配置,为何有些语句不起作用?

      4.观察memery brower发现MSM中的数据可能出现在L2cache中,但是L2的cache大小设置为0?

谢谢!!!

li yanlong:

回复 Allen35065:

谢谢您的回答:

       单独测试时没出现inv32k不起作用的情况,我们现在依照地址8k byte大小inv cache数据大了也起作用了,问题可能不在清cache本身。

yl c:

回复 Allen35065:

Allen Yin

1. 无大小限制,应与cache line大小对齐;

2. L1最大32K,也就是最多缓存32K的数据,写不下的就先回写原来的;

3. 不需要,可能是回写还没有完成,需加上两次_mfence()语句保证回写完成;

4.不可能,0x0C000000开始的SL2内容不会出现在L2 cache,一定是别的地方搞错了。

Andy Yin1:

回复 yl c:

外部memory地址与cache是有映射对应关系,超过cache大小,会进行cache替换,将之前的数据回写后再重新映射读入cache,软件回写只需向cache寄存器写入基地址及长度48k即可,或者调用csl cache函数即可。可以参考cache、corepac user guide关于cache的映射及一致性维护。

yl c:

回复 Andy Yin1:

 好的,谢谢

yl c:

回复 Andy Yin1:

Andy,希望继续向你请教一些问题,还望多多指教;

在6678的多核访问中,

core1要对core0的L2中的内容进行更新操作时,core0的L2控制器会根据被更新数据的地址判断相应的地址 是否在core0的L1D CACHE中,如果在L1D CACHE中,硬件会自动将更新的数据拷贝一份到L1D CACHE中。当Core0重新对L2中的这部分数据进行处理的时候,如果要读取的数据已经在L1D CACHE中,Core0可以直接从L1D CACHE中得到更新过的数据。如果要读取的数据不在L1D CACHE中,L1D控制器会自动从L2加载数据,Core0也可以得到更新后的数据。         
当core1要对core0  L2中的内容进行读操作的时候,L2控制器会判断要读取的数据地址是否在L1D CACHE中,对于在L1D CACHE中的数据,硬件会自动从L1D CACHE中读取最新的数据送给core1。对于不在L1D CACHE中的数据,说明core0  L2中的数据已经是最新的数据,可以直接从L2中读取。    
 这样的分析对吧?core1对core0的L2是直接进行内存写操作的么,不经过cache的写操作;而对L2进行读操作时,则考虑cache的存在???

yl c:

回复 Andy Yin1:

Andy,当数据在L2存储器中时,虽然存在CACHE的一致性问题,但可以硬件自动维护;

那么为什么当代码在L2存储器中时,所存在CACHE的一致性问题必须由软件维护而不能像数据那样硬件自动维护呢?

期待你的解答。

谢谢!

Allen35065:

回复 yl c:

同一个核自身的L1和L2之间是自动维护的;

不同核之间的L1和L2的一致性需要手动维护。

yl c:

回复 Allen35065:

Allen Yin

同一个核自身的L1和L2之间是自动维护的;

不同核之间的L1和L2的一致性需要手动维护。

Allen35065:

回复 yl c:

是的,因为代码段一般不会被修改;因此L1P和L2之间的一致性不会自动维护,详见corepac user guide 4.3.8节。

赞(0)
未经允许不得转载:TI中文支持网 » MSM的cache一致性维护问题
分享到: 更多 (0)