免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: duanius

一个cache相关的问题 [复制链接]

论坛徽章:
0
发表于 2010-11-05 14:04 |显示全部楼层
具体错多少字节没算过 一个个数看着眼花。
这个一个屏驱动的内存 160行,如果错的话会错1到50行不等   一般十几行。不是每次都错,和读时间间隔都有关。具体一行里面错多少字节就没看了。
通过ioctl

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
发表于 2010-11-05 15:11 |显示全部楼层
回复 11# duanius


    关于这个问题我认真想了下.有些疑问,实际隐隐感觉解释不协调.

下面慢慢写出来.可能一次写不完整.

其总线监听技术使当某片被cache的内存被其他请求操作时
------------
这个"其他"值得商讨,比如是一个DMA设备。而不是cache自己.如果是从处理器端访问,显然必然先过问或者不过问cache但是都是一个内部接口
我更相信他内部能自己协调好

一些时候,比如进程切换,必须通过flush整个cache获得正确的内存访问。
--------------
好象这个是TLB失效,不过也顺便把数据的cache刷了。失效TLB的原因是每个进程的页表不一样,而TLB却分不出是哪个进程,所以有多对1的情况。比如把一个进程的一个表项当作另一个进程的---PPC可以区分,但linux没利用.

论坛徽章:
0
发表于 2010-11-05 15:18 |显示全部楼层
本帖最后由 snail_314 于 2010-11-05 15:20 编辑

flush tlb和flush cache是两码子事,flush cache有专门的指令,flsuh tlb时应该不会顺便去做flush cache的事。
x86上确实有snoop功能,不过就像ls所说,确实是挂在bus上的bus master之间做snoop,但是都在cpu内部怕真没有

论坛徽章:
0
发表于 2010-11-05 15:25 |显示全部楼层
回复  duanius


    关于这个问题我认真想了下.有些疑问,实际隐隐感觉解释不协调.

下面慢慢写出来. ...
smalloc 发表于 2010-11-05 15:11


你说的对  我这个说法是错误的。 我写这块的时候没仔细想,把它和dma时的一致性弄混淆了。x86应该有些可以确保的机制但应该就和总线没啥关系了 我具体再去查查

至于tlb和cache,是两码事。虽然tlb本质上也是cache,但是给mmu用的。这里没有直接关系,有cache的系统,也不一定有mmu阿

论坛徽章:
0
发表于 2010-11-05 17:01 |显示全部楼层
你说的对  我这个说法是错误的。 我写这块的时候没仔细想,把它和dma时的一致性弄混淆了。x86应该有些可以确保的机制但应该就和总线没啥关系了 我具体再去查查

至于tlb和cache,是两码事。虽然tlb本质上也是cache,但是给mmu用的。这里没有直接关系,有cache的系统,也不一定有mmu阿



    1. 应该是关联的,你上面的例子里,如果用pci dma接口分配一个DMA  consistent 的内存,然后再follow一个dma sync的调用,一样可以解决问题。

    2. VIVT的CPU切换上下文时可能需要flash cache和tlb,这个还是取决于cache的实现。

论坛徽章:
0
发表于 2010-11-05 17:32 |显示全部楼层
1. 应该是关联的,你上面的例子里,如果用pci dma接口分配一个DMA  consistent 的内存,然后再fo ...
Solaris12 发表于 2010-11-05 17:01



   有关你所说的1,你的意思是内核和app共享的内存是一个DMA  consistent内存,谁访问完后sync一下,以确保同步?

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
发表于 2010-11-05 18:16 |显示全部楼层
回复 14# duanius


    可写的cache一般就2种write-through-WT和write-back-WB
但是不管哪种都保持对本处理器角度看和物理内存是一致的。即当你读写数据时处理器指令感受不到cache存在。这也是一般cache实现的原则


然后在就上面说的逻辑cache 物理cache和我可以误解出来的"虚拟cache"-书已经归还无法查证--以及mmu 物理寻址来次大分类。

先看ARMV5手册B4.6最后一句:
Caches can be implemented with virtual or physical addressing, including indexing, provided these behaviors are met.

我对这句话的理解是:处理器可以先直接用虚拟地址寻址cache-估计这个就是你
说的逻辑cache.
也可以通过mmu得到物理地址再在cache上寻址。这个就是统一的物理cache的说法。
但是对于第一个,cache关联的虚拟内存还是物理内存?我想arm是物理内存。
即当WB-cache想把数据写入物理内存的时候,他知道自己对的哪块物理内存,而不是再通过mmu去找一次物理内存--而这个正是我之前所理解的

"虚拟cache",我想应该没有这样实现的,因为效率很低,各个cache块之间如果对的同一物理内存要同步很麻烦,没有自动同步人工同步也很麻

烦。而且过分依赖MMU和页表。一般不实现。

对于刷tlb和cache。假设是物理cache,我们切换进程有必要去刷新cache吗?我觉得有没有MMU都不必要。而对于逻辑cache,因为直接通过虚拟

地址去查找cache.换了tlb,这个cache大致也失效了,你可能在cache中由本进程的虚拟地址找的是上一个进程的物理地址的值。所以先写回

cache很正常。

再回到正题上,对于如上的逻辑cache,2个虚拟地址是不是能同时对应2个cache数据块-而这2个数据块对应同一个物理内存块?或者根本只有

一个cache内存块?
手册B1.3开头。v6之前一个物理地址只能对应一个虚拟地址。也就是说如果是2个虚拟地址,应该就是直接卸掉第一个。用第2个.
v6之后应该也是一个数据块。---这个真没看出来。待验证。

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
发表于 2010-11-05 19:38 |显示全部楼层
回复 17# smalloc


    恩.上面最后一段错了 v6之前是
virtual indexing and virtual address tags
同时2个map是不可预料行为.

论坛徽章:
0
发表于 2010-11-05 20:32 |显示全部楼层
回复 18# smalloc


      有关你所说的逻辑cache回写时是否通过mmu,因为这块只牵涉到效率,不会像一致性问题一样干扰我的程序,所以我也没去考虑过,翻了翻也没找到答案,不过简单的思考下,回写的时候找mmu也不是没有可能。因为当读未命中的时候,毫无疑问会去找mmu,那么回写的时候却去找物理内存,可以这样设计么?我不懂芯片,但我觉得如果你不要mmu都能找到物理内存,你读未命中的时候还找mmu干嘛?这不是多此一举么。当然这是我的猜测,其实这块当时我不是很关心,是因为不管他怎么设计,我都无法做什么,我不需要要像知道cache的原理一样把这里搞透。但cache的实现确实是会影响到不管是os还是app的。


    至于有关cache和tlb,就像我14楼说的,没有必要因为两样都可以拿来“刷”,就放在一起绑定的说。这两个东西完全是分离的,各搞个的,没啥关系。任务切换mmu内容变了,tlb当然要变,没啥好说的。cache刷不刷呢?逻辑要刷,物理随便你,可刷可不刷。这完全看你os的实现。对于大cache,刷不划算,还占任务切换的时间,但对于小cache,刷不刷我觉得是一样的,因为肯定一读全是不命中,索性全invalid算了。这种情况下如果不是高实时性要求的系统这块基本上都无所谓的,能差多少呢。所以没必要两个扯一起说,比如看这里http://en.wikipedia.org/wiki/ARM_architecture ,很多都是有cache没mmu,所以讨论cache的时候没必要扯上tlb,如13楼所说“flush tlb和flush cache是两码子事”,各自有各自的用途和指令,不搭嘎的。


    有关vivt的别名现象,应该是这样的了,你17楼提到“也就是说如果是2个虚拟地址,应该就是直接卸掉第一个。用第2个.,真是让我吓了一跳,如果这样我做的both cache访问的实验就没法解释了。应该是18楼的。

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
发表于 2010-11-05 20:56 |显示全部楼层
回复 19# duanius


    问题是你一刚开始就出错,并不是2个都是cache的.和别名无关
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP