2011-10-07 69 views
4

在用戶級和內核級之間有雙向數據流的最佳方式(性能)是什麼?用戶和內核之間的大數據流

我知道你可以打開一個NETLINK套接字並通過那裏傳輸數據。但是,我們必須採用一些其他的用戶內核交互(系統調用,ioctl)來發送控制信息。這是跨用戶內核邊界傳輸大量數據的最有效方式嗎?

+0

可能重複http://stackoverflow.com/questions/4379024/best-way-to-transfer-large -data-from-kernel-to-user-space) – shodanex

回答

4

將大量數據緩衝區傳遞到內核驅動程序/線程/無論什麼都沒有問題 - 內核有權讀取它,沒問題。對於返回的東西,ususal的方式是爲內核thingy提供足夠大的用戶空間緩衝區或緩衝池,以便它返回數據。這就是它爲通常的東西 - 文件/網絡讀/寫,for例。

問題是什麼,更確切地說 - 您是否需要在不同的機器上將數據傳輸到內核級別或從內核級別傳輸數據?

RGDS, 馬丁

的[從內核傳輸大量數據到用戶空間的最佳方式](
+0

我試圖在Linux中創建一個應用程序,它可以充當Netfilter,但也可以通過網絡發送更大量的數據。我的應用程序也應該在另一端跑步。所以,我只想將我的數據從本地應用程序用戶空間緩衝區發送到遠程應用程序用戶空間緩衝區。沒有額外的複製成本。這是否可能? – Harman

+0

好吧,我明白了,我認爲:)這取決於數據和協議。爲了避免儘可能多的複製,特別是對於像TCP這樣的基於流的協議,可能意味着你的數據被呈現爲一個指向多個緩衝區的指針/長度數組,例如。與TCP協議/協議棧完全一樣。大多數應用程序不希望他們的數據像這樣呈現 - 他們會更喜歡一個不錯的應用程序級別的協議數據單元,其中的數據單元具有與表示PDU所需的完全一樣多的連續字節。恐怕這意味着一些複製:(( –

相關問題