我了解到硬盘数据使用 DMA 传输到主内存,但网络堆栈数据不能使用 DMA,数据必须通过处理器。这是真的吗?如果是,有什么方法可以避免这种情况?通过处理器传输数据真的效率低下吗?
问问题
360 次
2 回答
2
大多数现代网卡或任何硬件也使用 DMA 进行数据传输,但混淆源于这样一个事实,即 CPU 必须将来自用户应用程序的大部分数据处理成网卡期望的数据(例如例如,以 TCP 数据包和以太网帧的形式)。该处理必须由 CPU 完成,因为 CPU 实现了用于发送数据的各种网络协议。
顺便说一句,硬盘驱动器也是如此。尽管 DMA 用于将大块数据从 RAM 传输到硬盘,但 CPU 几乎不可避免地必须验证这些数据块将放置在正确的位置并格式化为正确的文件系统类型。
于 2012-06-15T20:14:17.590 回答
2
这是真的吗?
不!网络设备 DMA 进入专门为此目的分配的内存缓冲区。自 1990 年代初 PCI 总线出现以来,用于网络 IO 的 DMA 一直是 x86 世界的一般规则。
通过处理器传输数据真的效率低下吗?
是的,非常低效。初始化后,核心与现代网卡直接交互的唯一一次是发出“传输门铃”的信号。这个门铃是一个单独的写操作,它告诉卡在内存中寻找新的数据包来传输。核心和网络设备之间的所有其他交互都是通过内存间接进行的。
于 2012-06-15T23:58:54.877 回答