《深入淺出DPDK》閱讀筆記-------初識
阿新 • • 發佈:2018-11-26
(一)DPDK出現之前的問題:
以Linux 為例,傳統網路裝置驅動包處理的動作可以概括如下:
- 資料包到達網絡卡裝置。
- 網絡卡裝置依據配置進行 DMA 操作。
- 網絡卡傳送中斷,喚醒處理器。
- 驅動軟體填充讀寫緩衝區資料結構。
- 資料報文達到核心協議棧,進行高層處理。
- 如果最終應用在使用者態,資料從核心搬移到使用者態。
- 如果最終應用在核心態,在核心繼續進。
因此,可能產生以下問題:
1:資料包產生通過中斷上報處理器,再到處理,延時過長
2:資料報文先送到核心協議棧進行高層處理,再複製到使用者空間的耗時
3:使用者態執行緒由作業系統排程,除去本身任務切換的開銷,由切換導致的cache替換,或是cache missing等會對效能造成負面影響
...........
(二)DPDK的特點(優勢):
輪詢:在系統被中斷喚醒後,使用輪詢的方式一次處理多個數據包,直到網路再次空閒重新轉入中斷等待;避免了中斷上下文切換的開銷;
使用者態驅動:避免了記憶體拷貝和系統呼叫;並且對於資料buff的重新定義不受限於核心的資料結構;也方便快速的迭代優化;
親和性和獨佔:指定特定任務在某個核上工作,所謂綁核。避免了執行緒在不同核間頻繁的切換,核間的切換也容易導致cache missing和cache write back造成的大量損失。如果更進一步的限定了核不參與系統排程,可以進一步實現獨佔,避免了核內的任務切換開銷;
降低訪存開銷:資料包處理是I/O密集型的。通過記憶體大頁降低TLB missing、優化cache等方式減少記憶體I/O的開銷。
軟體調優:從軟體-程式碼結構上來優化。比如結構的cache line對齊等方式;
硬體加速:包括利用一些IA的最新指令集或是挖掘網絡卡的本身效能來實現加速;
DPDK作為基於IA多核處理器的高速包處理平臺,以軟體庫的形式,為上層應用的開發提供了一個高效能的基礎I/O開發包;