回覆列表
  • 1 # 笑顏如花8888

    現在很多人都在詬病Linux核心協議棧收包效率低,不管他們是真的懂還是一點都不懂只是聽別人說的,反正就是在一味地懟Linux核心協議棧,他們的武器貌似只有DPDK。

    但是,即便Linux核心協議棧收包效率真的很低,這是為什麼?有沒有辦法去嘗試著最佳化?而不是動不動就DPDK。

    我們從最開始說起。

    Linux核心作為一個通用作業系統核心,脫胎於UNIX那一套現代作業系統理論。

    但一開始不知道怎麼回事將網路協議棧的實現塞進了核心態,從此它就一直在核心態了。既然網路協議棧的處理在核心態進行,那麼網路資料包必然是在核心態被處理的。無論如何,資料包要先進入核心態,這就涉及到了進入核心態的方式:

    外部可以從兩個方向進入核心-從使用者態系統呼叫進入或者從硬體中斷進入。

    也就是說,系統在任意時刻,必然處在兩個上下文中的一個:

    程序上下文

    中斷上下文 (在非中斷執行緒化的系統,也就是任意程序上下文)

    收包邏輯的協議棧處理顯然是自網絡卡而上的,它顯然是在中斷上下文中,而資料包往使用者程序的資料接收處理,顯然是在應用程式的程序上下文中, 資料包透過socket在兩個上下文中被轉接。

    在socket層的資料包轉接處,必然存在著一個佇列快取,這是一個典型的 生產者-消費者 模型,中斷上下文的終點作為生產者將資料包入隊,而程序上下文作為消費者從佇列消費資料包

  • 中秋節和大豐收的關聯?
  • 爆蝦腰正宗做法?