我的计算机上的网络堆栈是否使用DMA?

时间:2012-06-15 19:54:12

标签: linux networking operating-system dma

我了解到硬盘数据使用DMA传输到主存,但网络堆栈数据不能使用DMA,数据必须通过处理器。这是真的吗?如果是,有什么方法可以避免这种情况?通过处理器传输数据不是很低效吗?

2 个答案:

答案 0 :(得分:2)

  

是真的吗?

没有!网络设备DMA进入专门为此目的分配的内存缓冲区。自从1990年代早期出现PCI总线以来,网络IO的DMA一直是x86领域的一般规则。

  

通过处理器传输数据不是很低效吗?

是的,非常低效。初始化之后,核心与现代网卡直接交互的唯一时间是发信号通知“发送门铃”。这个门铃是一个单独的写操作,它告诉卡要查看内存以便传输新的数据包。核心和网络设备之间的所有其他交互都通过内存间接进行。

答案 1 :(得分:1)

大多数现代网卡或任何硬件也使用DMA进行数据传输,但是混淆源于CPU必须将来自用户应用程序的大部分数据处理成网卡的数据期望(例如,以TCP数据包和以太网帧的形式)。此处理必须由CPU完成,因为CPU实现了用于发送数据的各种网络协议。

顺便提一下,硬盘驱动器也是如此。虽然DMA用于将大块数据从RAM传输到硬盘,但CPU几乎不可避免地要验证这些数据块是否放置在正确的位置并格式化为正确的文件系统类型。