我知道使用DMA将硬盘数据传输到主内存,但网络堆栈数据不能使用DMA,数据必须通过处理器。这是真的吗?如果是的话,有什么方法可以避免这种情况?通过处理器传输数据不是真的没有效率吗?我的电脑上的网络堆栈是否使用DMA?
0
A
回答
1
大多数现代网卡或任何此类硬件也使用DMA进行数据传输,但这种混淆源于CPU必须将来自用户应用程序的大部分数据处理成网络数据卡需要(例如,以TCP数据包和以太网帧的形式)。这个处理必须由CPU完成,因为CPU实现了用于发送数据的各种网络协议。
顺便说一句,硬盘驱动器也是如此。尽管DMA用于将大块数据从RAM传输到硬盘,但几乎不可避免地CPU必须验证这些数据块是否将放置在正确的位置并格式化为正确的文件系统类型。
2
是真的吗?
不!网络设备DMA专门分配给内存缓冲区用于此目的。自20世纪90年代早期PCI总线出现以来,网络IO的DMA一直是x86领域的通用规则。
通过处理器传输数据不是真的低效吗?
是的,效率令人难以置信。在初始化之后,核心与一个现代网卡直接交互的唯一时间是发信号给“传送门铃”。这门铃是一个独立的写操作,它告诉卡检查内存中是否有新的数据包要传输。核心和网络设备之间的所有其他交互通过内存间接进行。
相关问题
- 1. 上我已经堆叠安装在我的电脑上Haskell的堆栈
- 2. Android网络堆栈
- 3. 个人电脑上堆和堆栈的数量
- 4. 使用电脑代理android网络
- 5. 使用fileexists来检查网络电脑上的文件 - php
- 6. 搜索网络电脑的用户SID
- 7. 客户端网络堆栈
- 8. 网络堆栈崩溃?
- 9. 冻结网络堆栈
- 10. 如何将我的node.js网络应用上传到openshift?这不是在git上,而是在我的电脑上?
- 11. 什么是上网电脑
- 12. 泊坞窗组成的网络堆栈
- 13. 网络类中的“图堆栈”
- 14. “在网站上注册我的电脑”
- 15. 为什么我们在电脑中使用神经网络?
- 16. 在高DPI平板电脑或计算机上查看网页时是否需要更改字体堆栈?
- 17. 我的电脑是否支持OpenGL 2.1?
- 18. 用于Windows主机网络堆栈的Docker使用
- 19. 每个应用程序是否都实现了自己的网络堆栈?
- 20. Eclipse + Pydev + pylab:堆栈:使用电流后的堆栈
- 21. 网络应用程序从我的电脑获取信息
- 22. Linux网络堆栈是否在多核机器上并行运行?
- 23. 如何让我的电脑在WiFi上时使Android模拟器访问网络
- 24. 在网络上部署使用MEAN堆栈构建的Web应用程序
- 25. 是否可以使用可以控制我们电脑的网站?
- 26. 堆上,而不是堆栈
- 27. 是我的代码堆栈?
- 28. 如何在Linux网络堆栈的特定点上推skb?
- 29. 我的网站与我的电脑相比略显不同我的电脑相比我的电脑
- 30. 将SKB推送到网络堆栈
你在哪里以及如何学习? –