DMA与cache的一致性问题

1 篇文章 0 订阅
1 篇文章 0 订阅

cache的机制

分类

cache分为两种,分别是Dcache(数据cache)和Icache(指令cache)。顾名思义,Dcache是用于缓存数据的,而Icache是用于缓存指令的。

工作模式

Write-through(直写模式)

又称全写法,写透。是当cache写命中时,cache与主存同时发生写修改。这种策略 显然较好地维护了cache与主存的内容一致性,但这并不等于说全部解决了一致性问题。例如在多处理器系统中各CPU都有自己的cache,一个主存块若在多个cache中都有一份拷贝的话,某个CPU以写直达法来修改它的cache和主存时,其它cache中的原拷贝就过时了。即使在单处理器系统中,也有I/O设备不经过cache向主存写入的情况。总之,仍要关注一致性问题。
  当cache写未命中时,只有直接向主存写入了,但此时是否将修改过的主存块取到cache,写直达法却有两种选择。一种是取来并且为它分配一个行位置,称为WTWA法(Write–Through–with–Write–Allocate)。另一种是不取称为WTNWA法(WriteThrough–with.NO-Write–Allocate)。前 一种方法保持了cache / 主存的一致性,但操作复杂,而后一种方法操作简化,但命中率降低,内存的修改块只有在读未命中对cache 进行替换时,才有可能映射到cache 。
  写直达法是写cache与写主存同步进行,其优点是cache每行无需设置一个修改位以及相应的判测逻辑。写直达法的缺点是,cache对CPU向主存的写操作无高速缓冲功能,降低了cache的功效。

Write-back(回写模式)

当CPU对cache写命中时,只修改cache的内容不立即写入主存,只当此行被换出时才写回主存。这种策略使cache在CPU-主存之间,不仅在读方向而且在写方向上都起到高速缓存作用。对一cache行的多次写命中都在cache中快速完成修改, 只是需被替换时才写回速度较慢的主存,减少了访问主存的次数从而提高了效率。为支持这种策略,每个cache行必须配置一个修改位,以反映此行是否被CPU修改过。当某行被换出时,根据此行修改位为1还是为0,决定是将该行内容写回主存还是简单地弃之 而不顾。
  对于cache写未命中,写回法的处理是为包含欲写字的主存块在cache分配一行,将此块整个拷贝到Cache后对其进行修改, 因为尔后对此块的多次读/写访问的可能性很大。拷贝主存块时虽已读访问到主存,但此时并不对主存块修改。因为换出的cache很可能此期间要写回主存,为避免此过程耗时太长,写未命中对将新块读入后,只在cache中进行写修改。统一地将主存写修改操作留待换出时进行。
  这种写cache与写主存分开进行方式可显著减少写主存次数,但写回法也带来了cache / 主存严重的不一致性。后面将要介绍的MESI协议,就是一个针对写回法的维护cache一致性的协议。

Write-once(写一次法)

写一次法是一种基于写回法又结合了写直达法的写策略,即写命中和写未命中的处理与写回法基本相同,只是第一次写命中时要同时写入主存。这种策略主要用于某些处理器的片内cache,例如Pentium处理器的片内数据cache就采用的是写一次法。因为片内cache写命中时,写操作就在CPU内部高速完成,若没有 内存地址及其它指示信号送出,就不便于系统中的其它cache监听(snoop)。采用写一次法,在第一次片内cache写命中时, CPU要在总线上启动一个存储写周期。其它cache监听到此主存块地址及写信号后,即可把它们各自保存可能有的该块拷贝及时作废(无效处理)。尔后若有对片内cache此行的再次或多次写命中,则按回写法处理,无需再送出信号了。这样虽然第一次写命中时花费了一个存 储周期,但对维护系统全部cache的一致性有利。而大多的cache写操作不涉及到片外,对指令流水执行有利

存在的意义

由于CPU通用寄存器的速度和主存之间存在着太大的差异,因此加入cache,而CPU和主存之间直接数据传输的方式转变成CPU和cache之间直接数据传输。cache负责和主存之间数据传输。
一般情况cache的速度可以达到1ns,几乎可以和CPU寄存器速度媲美。有些高级的芯片,有有三级缓存,L1 cache、L2 cache、L3 cache,等级越高,速度越慢,容量越大。但是速度相比较主存而言,依然很快。

DMA的机制

DMA的存在是为了释放CPU,也就是说,在数据与数据之间进行搬移的时候,CPU可以全权委托给DMA进行数据搬移,而CPU自己则可以去处理其它的任务。DMA涉及的应用主要为ADC采样、串口的数据接收发送等,这样可以提高性能,但是需要注意的是,在数据量比较大或者频繁的时候才可取,在数据量很小的时候,其实也不需要用DMA。

一致性问题

为了充分使用cache带来的好处。我们映射依然采用cache的方式。但是我们需要格外小心。根据DMA传输方向的不同,采取不同的措施。

  1. 如果DMA负责从I/O读取数据到内存(DMA Buffer)中,那么在DMA传输之前,可以invalid DMA Buffer地址范围的高速缓存。在DMA传输完成后,程序读取数据不会由于cache hit导致读取过时的数据。
  2. 如果DMA负责把内存(DMA Buffer)数据发送到I/O设备,那么在DMA传输之前,可以clean DMA Buffer地址范围的高速缓存,clean的作用是写回cache中修改的数据。在DMA传输时,不会把主存中的过时数据发送到I/O设备。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
cache dma(直接内存访问)不一致时,可能会导致数据的不一致性和错误。 在计算机系统中,cache是为了提高CPU对内存访问的速度而引入的一种高速缓存。而DMA则是一种让外部设备直接访问系统内存的机制。 当cache dma不一致时,可能会出现以下几种情况: 1. 数据不一致:当外部设备修改了主内存中的数据而cache未能及时更新时,就会导致数据的不一致。如果CPU直接从cache中读取数据,就会得到错误的结果。 2. 缓存失效:当DMA操作修改了主内存中的数据,而cache中对应的数据未能及时失效,就会导致cache中的数据被视为有效,但实际上已经过时了。这就会导致读取到旧的数据,从而使程序出现错误。 3. 性能下降:DMA操作通常比CPU的速度更慢,当cache dma不一致时,可能会导致CPU频繁等待数据一致性,从而降低系统性能。 为了解决这些问题,可以采取以下几种方法: 1. 使用缓存一致性协议:现代处理器通常都支持一致性协议,可以自动处理cache dma不一致带来的问题,保证数据的一致性。 2. 强制刷新缓存:在进行DMA操作之前,强制将cache中的数据写回主内存,并使cache失效,以确保数据的一致性。 3. 使用专门的硬件支持:有些处理器提供了专门的硬件支持,用于加速cache dma一致性处理,可以提高系统的性能。 总之,cache dma不一致可能会导致数据的不一致性、缓存失效和性能下降等问题,需要采取相应的措施来确保数据的一致性和系统的正常运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值