2014-09-24 34 views

回答

1

簡短的回答是,它沒有。數據不會一次在多個位置處理,所以如果網絡數據包直接傳遞給用戶空間程序,那麼內核不會對他們做任何事情;它已被繞過。這將由用戶空間程序來處理。

這方面的一個例子是在我花了一段時間回來的設備驅動程序類中提出的:高頻股票交易。在Forbes.com有一篇關於這種實現的文章。這個想法是交易者希望他們的信息儘可能快,所以他們使用特製的數據包,當收到這些數據包時(通過同樣專用的硬件),它們被直接提交給交易者程序,繞過了相對高延遲的TCP/IP協議棧核心。下面是鏈接文章中關於兩個此類特殊網卡的摘錄:

這兩種卡都提供內核旁路驅動程序,允許您通過用戶空間中的TCP和UDP發送/接收數據。上下文切換是一個昂貴的(高延遲)操作,需要避免,所以您會希望所有關鍵的處理都發生在用戶空間(或者如果傾斜的話,內核空間)。

這種技術可以用於幾乎在需要用戶程序和硬件之間的等待時間最小化,但由於您的問題暗示,這意味着內核的處理此類交易的正常機制將任何應用程序被繞過。

+0

@SLawaon,但問題不是如何在驅動程序中添加DMA;我很好奇,IP stacl如何能夠處理入口數據包,如果它們已通過DMA放置在用戶內存中,因爲tcp/ip可以與內核內存一起工作。 – Mark 2014-09-24 20:28:14

+0

啊......你問的是*內核*交易如何處理TCP/IP數據包,如果它們一直是......由於缺少一個更好的術語,「通過一些共享的DMA緩衝區給予用戶空間程序」這實際上會繞過內核對數據包的處理。它是否正確?我認爲你的問題是問你可以從用戶空間獲得DMA緩衝區。 – skrrgwasme 2014-09-24 20:40:27

+0

正確,這就是我想要了解的。我在考慮在網絡驅動程序中,不太可能將DMA數據包直接傳送到用戶空間,並且完全繞過tcp/ip堆棧。例如,它更適合於視頻處理軟件。 – Mark 2014-09-24 21:12:18

1

網絡芯片可以有註冊條目,可以過濾每個IP/UDP/TCP +端口,並通過特殊設置的DMA描述符路由這些數據包。如果您通過驅動程序和MMAP預分配DMA內存到用戶空間,可以輕鬆地將特定的流量路由到用戶空間,而無需任何內核代碼觸摸它。

我曾經在一個視頻平臺上工作。網絡入口由FPGA完成。配置完成後,它可以將10Gbit的UDP數據包發送到系統中,並自動將某些MPEG PS PID匹配數據包發送到CPU。它可以將一些其他視頻/音頻數據包以非常低端的FPGA 10Gbit線速過濾到系統的其他部分。

+0

SLawson,tony-p-lee - 感謝您的澄清! – Mark 2014-09-25 16:22:09

相關問題