Cache一致性与DMA

cache一致性与DMA

第一个问题

对于进行DMA操作的设备, 并不是所有系统都保持它们的cache一致性。
在这种情况下, 准备进行DMA的设备可能从RAM得到陈旧的数据, 因为脏的cache行可能还驻留在各个CPU的cache中, 而尚未写回到RAM。

解决方法:内核的相应部分必须将cache中重叠的数据冲刷掉(或者使它们失效)(译注: 冲刷掉cache中的相应内容, 以保持cache与RAM的一致)。

第二个问题

当设备已经通过DMA将数据写入RAM之后, 这些数据可能被cache写回RAM的脏的cache行所覆盖, 或者CPU已缓存的cache行可能直接掩盖了RAM被更新的事实。
(译注: 使得对应的LOAD操作只能获得cache中的旧值, 而无法得到RAM中的新值), 直到cache行被从CPU cache中丢弃并且重新由RAM载入。

解决方法:内核的相应部分必须将cache中重叠的数据失效。

时间: 2024-10-11 13:51:09

Cache一致性与DMA的相关文章

多功能PCIE交换机之三:数据迁移及其cache一致性

关于PCIE非透明桥 cache一致性PCIE非透明桥提供了两种机制来从local node往remote node迁移数据,分别是基于地址映射和内嵌的 DMA.对remote节点而言,当它接受数据的时候,CPU可能是不知情的,因此需要保证cache一致性: 对local节点,当通过DMA往它自己的内存传输数据时,本地的CPU也不会被通知,因此需要考虑cache 一致性. 不同的平台实现Cache一致性的机制不一样,ARM平台需要软件参与,而IntelX86平台硬件能够自动维 护cache一致性

【转】DMA和cache一致性

DMA和cache一致性问题 Cache原理 CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多.缓存的出现主要是为了解决CPU运算速度与内存 读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,这样会使CPU花费很长时间等待数据到来或把数据写入内存.在缓存中的数据是内存中的 一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度. 只要Cache

ARM Linux 内核 panic 之cache 一致性 ——cci-400 cache一致互联

ARM Linux 内核 panic 之cache 一致性 ——cci-400 cache一致互联 CCI-400 集合了互联和一致性功能,有 2 个 ACE slave 接口和 3 个 ACE-Lite slave 接口,有 3 个 AXI master 接口.2 个 ACE slave 接口可以相互 snoop 对方,ACE-Lite slave 接口可以 snoop 这 2 个 ACE slave 接口.本文首先介绍cci-400相关结构,然后以内核的panic为引子,最后给出导致内核pa

Cache 一致性

上一篇文章中讲到了 MESI,那么来让我们了解下,CPU 是怎么保证 Cache 一致性的. 其实 MESI 协议不止是包括这些状态,它还包括一些处理器之间的消息来完成的,如果多个 CPU 在一个共享总线上.那么 他们可以通过处理器间消息来发送信息.因为当一个 CPU 的 cache 被修改的时候,如果此时该 cache line 处于 shared 状态, 也就意味着,其它 CPU 的 cache 中有相同的 cache line ,那么,它就应该发一个消息告诉其它 CPU 来知道修改这件事情

Cache一致性

Cache 的一致性特性 即使内存区域满足了cache的使用条件,要正确的使用cache,仍然可能会碰到cache一致性的问题,由于cache会使得某一确定的时刻,cpu看到的储存内容和内存中的实际内容不一致,如果仅仅只是CPU来操作这片区域,这不会产生任何问题,担当有其他外设也参与读写的时候,就会产生以下两种情况的cache一致性问题. 1.储存位置被其它外设修改 以网卡为例,网卡会将接收到的数据包写入到指定的内存中(A处地址),而如果此内存带cache,且cache中刚刚存A处地址内存的缓存

《大话处理器》Cache一致性协议之MESI【转】

转自:https://blog.csdn.net/muxiqingyang/article/details/6615199 Cache一致性协议之MESI          处理器上有一套完整的协议,来保证Cache一致性.比较经典的Cache一致性协议当属MESI协议,奔腾处理器有使用它,很多其他的处理器都是使用它的变种. 单核Cache中每个Cache line有2个标志:dirty和valid标志,它们很好的描述了Cache和Memory(内存)之间的数据关系(数据是否有效,数据是否被修改

MSI cache一致性协议

按照高速缓存的写策略的不同,有写直达和写回WB两种高速缓存: 1.  写直达高速缓存:一旦高速缓存中的一个字被修改,则在主存中要立即修改 2.  写回高速缓存: 并不是立即写回,而是当被修改的字从高速缓存中被替换或清除时,才真正修改主存 在侦听协议的设计中,主要有两种设计选择:一是写直达高速缓存还是写回高速缓存,二是写无效WI,还是写更新WU协议 MSI协议 三态写回无效MSI(modified,shared,invalid) 状态 1.  无效I状态: 2.  共享S状态:它意味着该块在高速缓

主从DB与cache一致性

本文主要讨论这么几个问题: (1)数据库主从延时为何会导致缓存数据不一致 (2)优化思路与方案 一.需求缘起 上一篇<缓存架构设计细节二三事>中有一个小优化点,在只有主库时,通过"串行化"的思路可以解决缓存与数据库中数据不一致.引发大家热烈讨论的点是"在主从同步,读写分离的数据库架构下,有可能出现脏数据入缓存的情况,此时串行化方案不再适用了",这就是本文要讨论的主题. 二.为什么数据会不一致 为什么会读到脏数据,有这么几种情况: (1)单库情况下,服务层

Linux驱动开发--linux下的DMA编程

DMA编程 DMA是一种无需要CPU的参与就可以让外设与系统内存之间进行双向数据传输的硬件机制,使用DMA可以使系统CPU从实际的I/O数据传输过程中摆脱出来,从而大大提高系统的吞吐率 DMA方式的数据传输由DMA控制器控制,在传输期间,CPU可以并发地执行其他任务,当DMA结束后,DMA控制器通过中断通知CPU数据传输已经结束,然后由CPU执行相应的中断服务程序进行后序处理.DMA可以用做内存与外设之间传输数据的方式,这种传输方式之下,数据并不需要经过CPU中转. 1.  DMA与Cache一