一、DPDK原理
網路設備(路由器、交換機、媒體網關、SBC、PS網關等)需要在瞬間進行大量的報文收發,因此在傳統的網路設備上,往往能夠看到專門的NP(Network Process)處理器,有的用FPGA,有的用ASIC,這些專用器件通過內置的硬體電路(或通過編程形成的硬體電路)高效轉發報文,只有需要對報文進行深度處理的時候才需要CPU干涉,
但在公有云、NFV等應用場景下,基礎設施以CPU為運算核心,往往不具備專用的NP處理器,作業系統也以通用Linux為主,網路資料包的收發處理路徑如下圖所示:

在虛擬化環境中,路徑則會更長:

由于包處理任務存在內核態與用戶態的切換,以及多次的記憶體拷貝,系統消耗變大,以CPU為核心的系統存在很大的處理瓶頸,為了提升在通用服務器(COTS)的資料包處理效能,Intel推出了服務于IA(Intel Architecture)系統的DPDK技術,
DPDK是Data Plane Development Kit的縮寫,簡單說,DPDK應用程式運行在作業系統的User Space,利用自身提供的資料面庫進行收發包處理,繞過了Linux內核態協議堆疊,以提升報文處理效率,
DPDK是一組lib庫和工具包的集合,最簡單的架構描述如下圖所示:

上圖藍色部分是DPDK的主要組件(更全面更權威的DPDK架構可以參考Intel官網),簡單解釋一下:
-
PMD:Pool Mode Driver,輪詢模式驅動,通過非中斷,以及資料幀進出應用緩沖區記憶體的零拷貝機制,提高發送/接受資料幀的效率
-
流分類:Flow Classification,為N元組匹配和LPM(最長前綴匹配)提供優化的查找演算法
-
環佇列:Ring Queue,針對單個或多個資料包生產者、單個資料包消費者的出入佇列提供無鎖機制,有效減少系統開銷
-
MBUF緩沖區管理:分配記憶體創建緩沖區,并通過建立MBUF物件,封裝實際資料幀,供應用程式使用
-
EAL:Environment Abstract Layer,環境抽象(適配)層,PMD初始化、CPU內核和DPDK執行緒配置/系結、設定HugePage大頁記憶體等系統初始化
這么說可能還有一點點抽象,再總結一下DPDK的核心思想:
-
用戶態模式的PMD驅動,去除中斷,避免內核態和用戶態記憶體拷貝,減少系統開銷,從而提升I/O吞吐能力
-
用戶態有一個好處,一旦程式崩潰,不至于導致內核完蛋,帶來更高的健壯性
-
HugePage,通過更大的記憶體頁(如1G記憶體頁),減少TLB(Translation Lookaside Buffer,即快表) Miss,Miss對報文轉發性能影響很大
-
多核設備上創建多執行緒,每個執行緒系結到獨立的物理核,減少執行緒調度的開銷,同時每個執行緒對應著獨立免鎖佇列,同樣為了降低系統開銷
-
向量指令集,提升CPU流水線效率,降低記憶體等待開銷
下圖簡單描述了DPDK的多佇列和多執行緒機制:

DPDK將網卡接收佇列分配給某個CPU核,該佇列收到的報文都交給該核上的DPDK執行緒處理,存在兩種方式將資料包發送到接收佇列之上:
-
RSS(Receive Side Scaling,接收方擴展)機制:根據關鍵字,比如根據UDP的四元組<srcIP><dstIP><srcPort><dstPort>進行哈希
-
Flow Director機制:可設定根據資料包某些資訊進行精確匹配,分配到指定的佇列與CPU核
當網路資料包(幀)被網卡接收后,DPDK網卡驅動將其存盤在一個高效緩沖區中,并在MBUF快取中創建MBUF物件與實際網路包相連,對網路包的分析和處理都會基于該MBUF,必要的時候才會訪問緩沖區中的實際網路包

以上就是DPDK的基礎知識,關于如何在應用程式中使用DPDK,以及系統應該如何針對報文收發的成熟優化方式,后面一邊學習與實踐,一邊記錄,
二、DPDK學習路線總結 DPDK學習路線以及視頻講解點擊 學習資料 獲取
1.dpdk PCI原理與testpmd/l3fwd/skeletion
2.kni資料流程
3.dpdk實作dns
4.dpdk高性能網關實作
5.半虛擬化virtio/vhost的加速

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/254059.html
標籤:其他
