我在讀一些網絡驅動程序時,可以通過DMA將數據包直接傳遞到用戶內存中。在這種情況下,內核的TCP/IP堆棧如何處理數據包?Linux內核如何管理通過DMA傳遞給用戶程序的數據?
回答
簡短的回答是,它沒有。數據不會一次在多個位置處理,所以如果網絡數據包直接傳遞給用戶空間程序,那麼內核不會對他們做任何事情;它已被繞過。這將由用戶空間程序來處理。
這方面的一個例子是在我花了一段時間回來的設備驅動程序類中提出的:高頻股票交易。在Forbes.com有一篇關於這種實現的文章。這個想法是交易者希望他們的信息儘可能快,所以他們使用特製的數據包,當收到這些數據包時(通過同樣專用的硬件),它們被直接提交給交易者程序,繞過了相對高延遲的TCP/IP協議棧核心。下面是鏈接文章中關於兩個此類特殊網卡的摘錄:
這兩種卡都提供內核旁路驅動程序,允許您通過用戶空間中的TCP和UDP發送/接收數據。上下文切換是一個昂貴的(高延遲)操作,需要避免,所以您會希望所有關鍵的處理都發生在用戶空間(或者如果傾斜的話,內核空間)。
這種技術可以用於幾乎在需要用戶程序和硬件之間的等待時間最小化,但由於您的問題暗示,這意味着內核的處理此類交易的正常機制將任何應用程序被繞過。
網絡芯片可以有註冊條目,可以過濾每個IP/UDP/TCP +端口,並通過特殊設置的DMA描述符路由這些數據包。如果您通過驅動程序和MMAP預分配DMA內存到用戶空間,可以輕鬆地將特定的流量路由到用戶空間,而無需任何內核代碼觸摸它。
我曾經在一個視頻平臺上工作。網絡入口由FPGA完成。配置完成後,它可以將10Gbit的UDP數據包發送到系統中,並自動將某些MPEG PS PID匹配數據包發送到CPU。它可以將一些其他視頻/音頻數據包以非常低端的FPGA 10Gbit線速過濾到系統的其他部分。
SLawson,tony-p-lee - 感謝您的澄清! – Mark 2014-09-25 16:22:09
- 1. 通過VMware傳遞linux內核選項
- 2. 如何從irq處理程序將值傳遞給linux內核tasklet?
- 3. Linux內核進程管理
- 4. 如何通過jquery ajax將參數傳遞給通用處理程序調用
- 5. 如何將參數從JavaScript傳遞給通用處理程序?
- 6. 我如何將參數傳遞給通用處理程序
- 7. 如何將應用程序/用戶數據傳遞給ChannelHandler Netty
- 8. 從內核驅動程序傳遞函數指針到管理程序
- 9. 將數據集傳遞給通用處理程序(ashx)
- 10. 映射Linux內核中的DMA中斷
- 11. 如何通過params傳遞客戶關鍵字處理程序?
- 12. Linux 2.6內核進程管理
- 13. Linux內核設備驅動程序將DMA從設備傳輸到用戶空間內存
- 14. 的Linux - DTB - 通過DTB RAM地址和大小傳遞給內核
- 15. 如何通過數據庫管理MediaWiki中的用戶帳戶?
- 16. 如何通過NSPredicate過濾核心數據管理對象?
- 17. 如何在rt linux中通過用戶程序訪問或接收來自內核的數據?
- 18. 如何通過JCL將參數傳遞給REXX程序
- 19. 如何通過Netbeans將命令行參數傳遞給程序?
- 20. 如何通過bash將參數傳遞給命令行程序?
- 21. 通過IOCTL將結構傳遞給內核模式驅動程序
- 22. linux內核設備從父到子數據樹傳遞數據
- 23. 如何將數據傳遞給錯誤處理程序?
- 24. 如何將數據從中間件傳遞給處理程序?
- 25. 如何在Linux中通過DMA處理memcpy
- 26. 將用戶名通過LoginForm傳遞給GreetingForm,傳遞給NavigationForm
- 27. 如何通過cq.ext.button處理程序將變量傳遞給javascript函數?
- 28. 如何管理數據傳遞?
- 29. 如何從makefile中傳遞參數給Linux內核模塊的源代碼
- 30. 如何通過DMA將數據傳輸至UART0恩智浦LH79524?
@SLawaon,但問題不是如何在驅動程序中添加DMA;我很好奇,IP stacl如何能夠處理入口數據包,如果它們已通過DMA放置在用戶內存中,因爲tcp/ip可以與內核內存一起工作。 – Mark 2014-09-24 20:28:14
啊......你問的是*內核*交易如何處理TCP/IP數據包,如果它們一直是......由於缺少一個更好的術語,「通過一些共享的DMA緩衝區給予用戶空間程序」這實際上會繞過內核對數據包的處理。它是否正確?我認爲你的問題是問你可以從用戶空間獲得DMA緩衝區。 – skrrgwasme 2014-09-24 20:40:27
正確,這就是我想要了解的。我在考慮在網絡驅動程序中,不太可能將DMA數據包直接傳送到用戶空間,並且完全繞過tcp/ip堆棧。例如,它更適合於視頻處理軟件。 – Mark 2014-09-24 21:12:18