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

Linux 我的计算机上的网络堆栈是否使用DMA?,linux,networking,operating-system,dma,Linux,Networking,Operating System,Dma,我了解到硬盘数据使用DMA传输到主存,但网络堆栈数据不能使用DMA,数据必须通过处理器。这是真的吗?如果是,有哪些方法可以避免这种情况?通过处理器传输数据不是真的很低效吗?大多数现代网卡或任何硬件也使用DMA进行数据传输,然而,混淆源于这样一个事实,即CPU必须将来自用户应用程序的大部分数据处理成网卡所期望的数据(例如,以TCP数据包和以太网帧的形式)。此处理必须由CPU完成,因为CPU实现用于发送数据的各种网络协议 顺便说一句,硬盘驱动器也是如此。虽然DMA用于将大数据块从RAM传输到硬盘,但

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

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


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

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

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

这是真的吗

不!网络设备DMA进入专门为此目的分配的内存缓冲区。自20世纪90年代初PCI总线出现以来,网络IO DMA一直是x86世界的普遍规则

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

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

这是真的吗

不!网络设备DMA进入专门为此目的分配的内存缓冲区。自20世纪90年代初PCI总线出现以来,网络IO DMA一直是x86世界的普遍规则

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


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

您从何处以及如何了解到的?您从何处以及如何了解到的?