2017-01-28 26 views
1

我想知道当设备的DMA控制器正在进行内存操作时,CPU可以处理/执行什么样的操作,以提高并发性水平?而如果CPU的缓存/寄存器是空的,怎么另一个指令可以在不进行交织DMA获取关于DMA和CPU并发性

THX

+0

任何特定的架构?并非所有的CPU和DMA都是相同的。可能太宽泛。 –

回答

1

它一般情况下,在大硬件,CPU可以做,而更多或任何少DMA正在进行中。通常,它只是继续在OS的控制下正常执行正在运行的进程或内核任务。

关于:[?]

... [A] ND如果CPU高速缓存/寄存器是空的,如何另一指令可以 是没有进行交织DMA取出

作为我了解它,你问如果CPU需要访问内存会发生什么。一般来说,CPU通常会频繁地访问内存,不仅在“寄存器或缓存为空”时,该活动可能正常或多或少地正常进行DMA正在进行时。内存总线通常由多个设备共享,包括多个支持DMA的设备,PCI卡,多个内核或多个CPU。 memory controller负责接受和履行所有这些问题,其中包括当时的仲裁。

所以,你是正确的,有可能是某种类型的“交错”当两个DMA和CPU访问内存,只是当两个核心存取存储器(或者甚至是两个逻辑线程在同一内核上运行),这可能会发生。它在实际中的工作方式取决于DRAM的组织方式,存储器控制器的工作方式(以及存在的数量)以及其他许多细节,但总的来说,您期望现代存储器系统具有高度的并行性 - 能够支持多个访问并经常接近RAM施加的带宽限制。


如今,这几乎意味着什么比嵌入式微控制器更大。例如,即使移动CPU也是合格的。

通过正常我的意思是正常的机制使用,你可以期望的存储器访问工作,但不是说性能不会受到影响。 CPU的内存访问将与DMA访问(也可能是其他CPU访问,PCI设备如视频卡等)竞争,并且可能会变慢 - 但在合理的硬件上,它肯定不会等到DMA完成!

+1

虽然DMA和CPU内存访问是交错/管理的,但它可能引起显着的影响。一个写得很好的算法可以完全饱和内存总线带宽,并且是“I/O绑定”。如果DMA发生,那么你的算法会变慢,因为DMA传输必须通过相同的总线来挤压!我遇到过这种情况,感到很自豪! – bazza

+1

感谢您的详细信息。我真的不知道那个“分享”的东西。内存控制器必须真的做一些疯狂的东西。和@bazza一样,它也很难达到你可以测试这个差异的程度。恭喜! – zgulser

+1

@bazza - 绝对!我不打算暗示其他情况。基本上,DRAM和Dram本身的路径是共享资源,并且该资源的DMA使用不是免费的。也就是说DMA不会锁定总线或任何东西,因此仍然可以访问内存。 *大多数*算法对内存带宽不是非常敏感,而是对延迟非常敏感,而一个好的控制器通常会以合理的方式满足并发请求。 – BeeOnRope