首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我的计算机上的网络堆栈是否使用DMA?

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

Stack Overflow用户
提问于 2012-06-16 03:54:12
回答 2查看 342关注 0票数 0

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

EN

回答 2

Stack Overflow用户

发布于 2012-06-16 04:14:18

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

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

票数 2
EN

Stack Overflow用户

发布于 2012-06-16 07:58:55

这是真的吗?

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

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11057340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档