gpt4 book ai didi

memory - 硬盘直接内存访问的目的是什么?

转载 作者:IT王子 更新时间:2023-10-28 23:38:44 27 4
gpt4 key购买 nike

乍一看,让硬盘自行写入 RAM 似乎是个好主意,无需 CPU 指令复制数据,特别是考虑到异步网络的成功。但是 Wikipedia article关于直接内存访问 (DMA) 的声明如下:

With DMA, the CPU gets freed from this overhead and can do useful tasks during data transfer (though the CPU bus would be partly blocked by DMA).

我不明白公交线路如何“部分阻塞”。据推测,当时一台设备可以访问内存,然后看起来 CPU 实际上可以做的有用工作很少。它会在第一次尝试读取未缓存的内存时被阻止,我预计在 2 mb 缓存的情况下会非常快。

释放 CPU 以执行其他任务的目标似乎是无缘无故的。硬盘 DMA 是否会在实践中促进任何性能提升?

最佳答案

1:PIO(编程 IO)破坏 CPU 缓存。从磁盘读取的数据在大多数情况下不会在之后立即处理。应用程序通常以大块的形式读取数据,但 PIO 以较小的 block (通常为 64K IIRC)完成。因此,数据读取应用程序将等到大块传输完毕,而不会从 Controller 中获取的较小块立即在缓存中受益。同时,其他应用程序将遭受大部分缓存被传输驱逐的问题。这可能可以通过使用特殊指令来避免,这些指令指示 CPU 不要缓存数据,而是将其“直接”写入主存储器,但是我很确定这会减慢复制循环的速度。从而造成的伤害甚至超过缓存抖动。

2:PIO,因为它是在 x86 系统和可能大多数其他系统上实现的,与 DMA 相比确实很慢。问题不在于 CPU 不够快。问题源于总线和磁盘 Controller 的 PIO 模式的设计方式。如果我没记错的话,CPU 必须从所谓的 IO 端口读取每个字节(或使用 32 位 PIO 模式时的每个 DWORD)。这意味着对于每个 DWORD 数据,端口的地址必须放在总线上,并且 Controller 必须通过将数据 DWORD 放在总线上来响应。而当使用 DMA 时, Controller 可以利用总线和/或内存 Controller 的全部带宽传输数据突发。当然,这种传统 PIO 设计还有很大的优化空间。 DMA 传输就是这样一种优化。仍然被认为是 PIO 的其他解决方案也可能是可能的,但是他们仍然会遇到其他问题(例如上面提到的缓存抖动)。

3:内存和/或总线带宽不是大多数应用程序的限制因素,因此 DMA 传输不会停止任何事情。它可能会稍微减慢一些应用程序的速度,但通常它应该几乎不会被注意到。毕竟,与总线和/或内存 Controller 的带宽相比,所有磁盘都相当慢。提供> 500 MB/s的“磁盘”(SSD,RAID阵列)非常快。至少不能提供 10 倍于该数量的总线或内存子系统必须来自石器时代。 OTOH PIO 在传输数据 block 时确实会完全停止 CPU。

关于memory - 硬盘直接内存访问的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3716826/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com