DPDK簡介
DPDK(Data Plane Development Kit)資料平面開發工具包,是一個開源軟體專案。DPDK透過維護一系列能夠加速多核CPU資料包處理的庫,提供資料處理框架。DPDK透過繞過核心進行資料處理,表現出了比核心中斷處理更高的效率。
DPDK專案架構
-
EAL
EAL(Environment Abstraction Layer),EAL層負責訪問低階資源包括硬體和記憶體空間。EAL遮蔽了核心具體細節,提供一個通用的介面訪問庫和作業系統。
-
Memory Management
記憶體管理包括巨頁支援、記憶體池、緩衝區管理。
-
Poll Mode Drivers
為各種網路介面提供最佳化驅動,繞過核心網路棧減少延遲增加吞吐量。
-
Ring Buffers
利用高效的佇列機制提供高速程序間通訊。
-
API for Packet Processing
提供一系列包操縱庫和函式的集合包括頭解析,包分類和包轉發。
-
Crypto and Security
提供加密影像操作和安全通訊的庫和驅動
-
Eventdev and Timers
提供事件驅動和時間管理功能
從這幅圖我們可以看出,其實DPDK作用是截獲網路卡,此時核心就網路模組會無法發現截獲的網路卡,從而繞過核心網路處理,利用使用者協議棧進行解析,解析完畢之後直接發給應用層。
DPDK靜態庫
-
librte_eal
提供訪問硬體資源如記憶體、定時器和日誌的基礎API。
-
librte_mempool
提供高效包處理記憶體池管理庫。
-
librte_ring
提供實現無鎖FIFO先進先出佇列以及DPDK元件間的高速通訊相關的庫。
-
librte_mbuf
提供包緩衝區處理包括接收和傳輸相關的庫。
-
librte_ethdev
提供配置和查詢乙太網裝置API包括接收和傳送包。
-
librte_net
提供網路協議處理相關的庫。
-
librte_ip_frag
提供IP分片和重組相關的庫,支援IIPV4、IPV6。
-
librte_kni
提供DPDK應用和Linux核心網路棧間的通訊,主要用於已有linux網路服務互動和除錯。