DPDK的基本原理、學習路線總結

一、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官網),簡單解釋一下:

  1. PMD:Pool Mode Driver,輪詢模式驅動,通過非中斷,以及數據幀進出應用緩衝區內存的零拷貝機制,提高發送/接受數據幀的效率

  2. 流分類:Flow Classification,爲N元組匹配和LPM(最長前綴匹配)提供優化的查找算法

  3. 環隊列:Ring Queue,針對單個或多個數據包生產者、單個數據包消費者的出入隊列提供無鎖機制,有效減少系統開銷

  4. MBUF緩衝區管理:分配內存創建緩衝區,並通過建立MBUF對象,封裝實際數據幀,供應用程序使用

  5. EAL:Environment Abstract Layer,環境抽象(適配)層,PMD初始化、CPU內核和DPDK線程配置/綁定、設置HugePage大頁內存等系統初始化

這麼說可能還有一點點抽象,再總結一下DPDK的核心思想:

  1. 用戶態模式的PMD驅動,去除中斷,避免內核態和用戶態內存拷貝,減少系統開銷,從而提升I/O吞吐能力

  2. 用戶態有一個好處,一旦程序崩潰,不至於導致內核完蛋,帶來更高的健壯性

  3. HugePage,通過更大的內存頁(如1G內存頁),減少TLB(Translation Lookaside Buffer,即快表) Miss,Miss對報文轉發性能影響很大

  4. 多核設備上創建多線程,每個線程綁定到獨立的物理核,減少線程調度的開銷。同時每個線程對應着獨立免鎖隊列,同樣爲了降低系統開銷

  5. 向量指令集,提升CPU流水線效率,降低內存等待開銷

下圖簡單描述了DPDK的多隊列和多線程機制:

DPDK將網卡接收隊列分配給某個CPU核,該隊列收到的報文都交給該核上的DPDK線程處理。存在兩種方式將數據包發送到接收隊列之上:

  1. RSS(Receive Side Scaling,接收方擴展)機制:根據關鍵字,比如根據UDP的四元組<srcIP><dstIP><srcPort><dstPort>進行哈希

  2. 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的加速

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章