DPDK的基本原理

網(wǎng)絡(luò)設(shè)備(路由器、交換機、媒體網(wǎng)關(guān)、SBC、PS網(wǎng)關(guān)等)需要在瞬間進行大量的報文收發(fā),因此在傳統(tǒng)的網(wǎng)絡(luò)設(shè)備上,往往能夠看到專門的NP(Network Process)處理器,有的用FPGA,有的用ASIC。這些專用器件通過內(nèi)置的硬件電路(或通過編程形成的硬件電路)高效轉(zhuǎn)發(fā)報文,只有需要對報文進行深度處理的時候才需要CPU干涉。

但在公有云、NFV等應(yīng)用場景下,基礎(chǔ)設(shè)施以CPU為運算核心,往往不具備專用的NP處理器,操作系統(tǒng)也以通用Linux為主,網(wǎng)絡(luò)數(shù)據(jù)包的收發(fā)處理路徑如下圖所示:

在虛擬化環(huán)境中,路徑則會更長:

由于包處理任務(wù)存在內(nèi)核態(tài)與用戶態(tài)的切換,以及多次的內(nèi)存拷貝,系統(tǒng)消耗變大,以CPU為核心的系統(tǒng)存在很大的處理瓶頸。為了提升在通用服務(wù)器(COTS)的數(shù)據(jù)包處理效能,Intel推出了服務(wù)于IA(Intel Architecture)系統(tǒng)的DPDK技術(shù)。


DPDK是Data Plane Development Kit的縮寫。簡單說,DPDK應(yīng)用程序運行在操作系統(tǒng)的User Space,利用自身提供的數(shù)據(jù)面庫進行收發(fā)包處理,繞過了Linux內(nèi)核態(tài)協(xié)議棧,以提升報文處理效率。

DPDK是一組lib庫和工具包的集合。最簡單的架構(gòu)描述如下圖所示:

上圖藍色部分是DPDK的主要組件(更全面更權(quán)威的DPDK架構(gòu)可以參考Intel官網(wǎng)),簡單解釋一下:

  1. PMD:Pool Mode Driver,輪詢模式驅(qū)動,通過非中斷,以及數(shù)據(jù)幀進出應(yīng)用緩沖區(qū)內(nèi)存的零拷貝機制,提高發(fā)送/接受數(shù)據(jù)幀的效率
  2. 流分類:Flow Classification,為N元組匹配和LPM(最長前綴匹配)提供優(yōu)化的查找算法
  3. 環(huán)隊列:Ring Queue,針對單個或多個數(shù)據(jù)包生產(chǎn)者、單個數(shù)據(jù)包消費者的出入隊列提供無鎖機制,有效減少系統(tǒng)開銷
  4. MBUF緩沖區(qū)管理:分配內(nèi)存創(chuàng)建緩沖區(qū),并通過建立MBUF對象,封裝實際數(shù)據(jù)幀,供應(yīng)用程序使用
  5. EAL:Environment Abstract Layer,環(huán)境抽象(適配)層,PMD初始化、CPU內(nèi)核和DPDK線程配置/綁定、設(shè)置HugePage大頁內(nèi)存等系統(tǒng)初始化

這么說可能還有一點點抽象,再總結(jié)一下DPDK的核心思想:

  1. 用戶態(tài)模式的PMD驅(qū)動,去除中斷,避免內(nèi)核態(tài)和用戶態(tài)內(nèi)存拷貝,減少系統(tǒng)開銷,從而提升I/O吞吐能力
  2. 用戶態(tài)有一個好處,一旦程序崩潰,不至于導(dǎo)致內(nèi)核完蛋,帶來更高的健壯性
  3. HugePage,通過更大的內(nèi)存頁(如1G內(nèi)存頁),減少TLB(Translation Lookaside Buffer,即快表) Miss,Miss對報文轉(zhuǎn)發(fā)性能影響很大
  4. 多核設(shè)備上創(chuàng)建多線程,每個線程綁定到獨立的物理核,減少線程調(diào)度的開銷。同時每個線程對應(yīng)著獨立免鎖隊列,同樣為了降低系統(tǒng)開銷
  5. 向量指令集,提升CPU流水線效率,降低內(nèi)存等待開銷

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

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

  1. RSS(Receive Side Scaling,接收方擴展)機制:根據(jù)關(guān)鍵字,比如根據(jù)UDP的四元組<srcIP><dstIP><srcPort><dstPort>進行哈希
  2. Flow Director機制:可設(shè)定根據(jù)數(shù)據(jù)包某些信息進行精確匹配,分配到指定的隊列與CPU核

當(dāng)網(wǎng)絡(luò)數(shù)據(jù)包(幀)被網(wǎng)卡接收后,DPDK網(wǎng)卡驅(qū)動將其存儲在一個高效緩沖區(qū)中,并在MBUF緩存中創(chuàng)建MBUF對象與實際網(wǎng)絡(luò)包相連,對網(wǎng)絡(luò)包的分析和處理都會基于該MBUF,必要的時候才會訪問緩沖區(qū)中的實際網(wǎng)絡(luò)包


以上就是DPDK的基礎(chǔ)知識,關(guān)于如何在應(yīng)用程序中使用DPDK,以及系統(tǒng)應(yīng)該如何針對報文收發(fā)的成熟優(yōu)化方式,后面一邊學(xué)習(xí)與實踐,一邊記錄。

晚安

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容