深入淺出DPDK——第一章

主流包處理硬件平臺(tái)

硬件加速器:

對(duì)于本身規(guī)闹莸埽化的固化功能具有高性能低成本的特點(diǎn)。



網(wǎng)絡(luò)處理器:

提供了包處理邏輯軟件可編程能力,在獲得靈活性的同時(shí)兼具了高性能的硬件包處理。

網(wǎng)絡(luò)處理器是專(zhuān)門(mén)為處理數(shù)據(jù)包而設(shè)計(jì)的可編程通用處理器脚祟,采用多核并行處理結(jié)構(gòu),常被用于通信領(lǐng)域各種任務(wù)强饮,比如包處理由桌、協(xié)議分析、路由查找邮丰、聲音/數(shù)據(jù)的匯聚行您、防火墻、QoS等剪廉。其通用性表現(xiàn)在執(zhí)行邏輯由運(yùn)行時(shí)加載的軟件決定娃循,用戶(hù)使用專(zhuān)用指令集即微碼進(jìn)行開(kāi)發(fā)。

NPU具有高性能和高可編程性斗蒋,但不同廠商不同架構(gòu)的NPU微碼規(guī)范不盡相同捌斧,開(kāi)發(fā)人員成長(zhǎng)和社區(qū)構(gòu)建困難捧书,微碼向高級(jí)語(yǔ)言轉(zhuǎn)換效果不理想。成本和特定領(lǐng)域特性限制了NPU市場(chǎng)規(guī)模骤星。


多核處理器:

多核處理器在更為復(fù)雜多變的高層包處理上擁有優(yōu)勢(shì)经瓷,DPDK用軟件的方式在通用多核處理器上演繹著數(shù)據(jù)包處理新篇章,其為軟件定義的包處理提供了快速迭代的平臺(tái)洞难。

現(xiàn)代CPU性能的擴(kuò)展主要是通過(guò)多核的方式進(jìn)行演進(jìn)的舆吮。這樣通過(guò)處理器可以在一定程度上并行地處理網(wǎng)絡(luò)負(fù)載。由于多核處理器在邏輯復(fù)雜的協(xié)議及應(yīng)用層面上的處理優(yōu)勢(shì)队贱,以及越來(lái)越強(qiáng)勁的數(shù)據(jù)面支持能力色冀,它在多種業(yè)務(wù)領(lǐng)域得到廣泛的應(yīng)用。

CPU核以及眾多加速單元和網(wǎng)絡(luò)接口柱嫌,組成了一個(gè)片上系統(tǒng)锋恬。當(dāng)前多核處理器正在走向SoC化,針對(duì)網(wǎng)絡(luò)的SoC往往集成內(nèi)存控制器编丘、網(wǎng)絡(luò)控制器与学,甚至是一些硬件加速處理引擎。在這些SoC上嘉抓,對(duì)于可固化的處理例如索守,流分類(lèi)、QoS交由加速單元完成抑片,而對(duì)于靈活的業(yè)務(wù)邏輯則由眾多的通用處理器完成卵佛,有效融合了軟硬件各自?xún)?yōu)勢(shì)。

初識(shí)DPDK

IA多核處理器不適合數(shù)據(jù)包處理嗎敞斋?

傳統(tǒng)網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)包處理:

數(shù)據(jù)包到達(dá)網(wǎng)卡設(shè)備截汪。——>網(wǎng)卡設(shè)備依據(jù)配置進(jìn)行DMA操作植捎⊙媒猓——>網(wǎng)卡發(fā)送中斷,喚醒處理器鸥跟《迹——>? ? 驅(qū)動(dòng)軟件填充讀寫(xiě)緩沖區(qū)數(shù)據(jù)結(jié)構(gòu)∫阶桑——>數(shù)據(jù)報(bào)文到達(dá)內(nèi)核協(xié)議棧枫匾,進(jìn)行高層處理∧饣矗——>如果最終應(yīng)用在用戶(hù)態(tài)干茉,數(shù)據(jù)從內(nèi)核搬移到用戶(hù)態(tài)。 / 如果最終應(yīng)用在內(nèi)核態(tài)很泊,在內(nèi)核繼續(xù)進(jìn)行角虫。

原先每個(gè)報(bào)文就會(huì)觸發(fā)一個(gè)中斷沾谓,隨著網(wǎng)絡(luò)接口帶寬從千兆向萬(wàn)兆邁進(jìn),大量數(shù)據(jù)到來(lái)觸發(fā)頻繁的中斷戳鹅,系統(tǒng)無(wú)法承受中斷帶來(lái)的開(kāi)銷(xiāo)均驶。因此,有人在Linux內(nèi)核引入NAPI機(jī)制用于高吞吐場(chǎng)景——系統(tǒng)被中斷喚醒后枫虏,盡量使用輪詢(xún)的方式一次處理多個(gè)數(shù)據(jù)包妇穴,直到網(wǎng)絡(luò)再次空閑轉(zhuǎn)入中斷等待。

在TCP/IP模型中隶债,網(wǎng)絡(luò)包進(jìn)入計(jì)算機(jī)大多需要經(jīng)過(guò)協(xié)議處理腾它,在Linux系統(tǒng)中TCP/IP由Linux內(nèi)核處理。在不需要協(xié)議處理的場(chǎng)景下死讹,也需要把包從內(nèi)核緩沖區(qū)復(fù)制到用戶(hù)緩沖區(qū)瞒滴,系統(tǒng)調(diào)用以及數(shù)據(jù)包復(fù)制的開(kāi)銷(xiāo)會(huì)直接影響用戶(hù)態(tài)應(yīng)用從設(shè)備直接獲取包的能力。而對(duì)于多樣的網(wǎng)絡(luò)功能節(jié)點(diǎn)來(lái)說(shuō)赞警,TCP/IP協(xié)議棧不是數(shù)據(jù)轉(zhuǎn)發(fā)節(jié)點(diǎn)所必需的妓忍。如何讓面向控制面原生設(shè)計(jì)的操作系統(tǒng)如Linux,在包處理上減少不必要的開(kāi)銷(xiāo)是一大熱點(diǎn)仅颇。Netmap单默,一個(gè)高性能網(wǎng)絡(luò)I/O框架,采用共享數(shù)據(jù)包池的方式忘瓦,減少內(nèi)核到用戶(hù)空間的包復(fù)制。

NAPI和Netmap兩方面的努力已經(jīng)明顯改善了傳統(tǒng)Linux系統(tǒng)上包處理能力引颈,DPDK如何去做得更好耕皮,怎樣的軟件設(shè)計(jì)能充分釋放IA的包處理能力呢?

DPDK最佳實(shí)踐

DPDK很好地回答了IA多核處理器應(yīng)對(duì)高性能數(shù)據(jù)包處理的問(wèn)題蝙场。其大致的技術(shù)可以歸納如下:輪詢(xún)凌停、用戶(hù)態(tài)驅(qū)動(dòng)、親和性與獨(dú)占售滤、降低訪(fǎng)存開(kāi)銷(xiāo)罚拟、軟件調(diào)優(yōu)、利用IA新硬件技術(shù)完箩、充分挖掘網(wǎng)卡的潛能赐俗。

DPDK框架簡(jiǎn)介


DPDK主要模塊分解

內(nèi)核態(tài)模塊

KNI ( Kernel NIC interface 內(nèi)核網(wǎng)卡接口)是DPDK允許用戶(hù)態(tài)和內(nèi)核態(tài)交換報(bào)文的渠道,KNI 模擬虛擬的網(wǎng)口弊知,提供 DPDK 應(yīng)用程序和 Linux 內(nèi)核直接通信鏈接阻逮, 即 KNI 接口允許報(bào)文從用戶(hù)態(tài)接收后轉(zhuǎn)發(fā)到 Linux 內(nèi)核協(xié)議棧中。

IGB_UIO內(nèi)核模塊秩彤。DPDK 利用 Linux 提供的UIO機(jī)制叔扼,通過(guò)read()感知中斷事哭、mmap()實(shí)現(xiàn)和網(wǎng)卡設(shè)備的通信,在 Linux 內(nèi)核中安裝 igb_uio.ko 模塊(代替網(wǎng)卡驅(qū)動(dòng)模塊)瓜富,重設(shè)中斷回調(diào)函數(shù)入口參數(shù)鳍咱,當(dāng)網(wǎng)卡與 igb_uio.ko 綁定后,igb_uio接管網(wǎng)卡与柑,并為用戶(hù)態(tài)PMD 提供服務(wù)接口流炕。

用戶(hù)態(tài)模塊

Core Libraries 核心部件庫(kù)

核心部件庫(kù)是 DPDK 面向用戶(hù)態(tài)協(xié)議棧程序開(kāi)發(fā)的模塊,如:VPP 就是基于 DPDK的核心庫(kù)接口實(shí)現(xiàn)的用戶(hù)態(tài)協(xié)議棧應(yīng)用仅胞。

EAL (Environment Abstraction Layer 環(huán)境抽象層)每辟, 對(duì) DPDK 的運(yùn)行環(huán)境進(jìn)行初始化,包括:HugePage 內(nèi)存分配干旧、內(nèi)存/緩沖區(qū)/隊(duì)列分配渠欺、原子性無(wú)鎖操作、NUMA 親和性椎眯、CPU 綁定等挠将,并通過(guò) UIO 或 VFIO 技術(shù)將 PCI/PCIe 設(shè)備地址映射到用戶(hù)態(tài),方便用戶(hù)態(tài)的 DPDK 應(yīng)用程序調(diào)用编整。同時(shí)為應(yīng)用程序提供通用接口舔稀,隱藏與底層庫(kù)、設(shè)備交換的相關(guān)細(xì)節(jié)掌测。

MALLOC (堆內(nèi)存管理組件)内贮,為DPDK應(yīng)用程序提供從 HugePage 內(nèi)、分配內(nèi)存的接口汞斧,當(dāng)需要為skb_buf (Socket Buffer 數(shù)據(jù)包緩沖區(qū))分配大量的小塊內(nèi)存時(shí)夜郁,可調(diào)用此接口。由于堆內(nèi)存是從 HugePage 內(nèi)存分配的粘勒,所以可以減少 TLB 缺頁(yè)竞端。堆、是由開(kāi)發(fā)人員主動(dòng)分配和釋放的存儲(chǔ)空間庙睡,如果開(kāi)發(fā)人員不釋放事富,則程序結(jié)束時(shí)由 OS 回收,分配方式類(lèi)似于鏈表乘陪;與堆不同统台,棧是由操作系統(tǒng)自動(dòng)分配和釋放的存儲(chǔ)空間,用于存儲(chǔ)函數(shù)的參數(shù)值暂刘、局部變量等饺谬。

MBUF (網(wǎng)絡(luò)報(bào)文緩存塊管理組件), 為 DPDK 應(yīng)用程序提供創(chuàng)建和釋放、數(shù)據(jù)報(bào)文信息緩存塊的接口募寨。 提供兩種類(lèi)型的 MBUF族展,一種存儲(chǔ)一般信息、一種存儲(chǔ)時(shí)間的報(bào)文數(shù)據(jù)拔鹰;這些 MBUF 存儲(chǔ)在一個(gè)內(nèi)存池中仪缸。

MEMPOOL (內(nèi)存池管理組件),為 DPDK 應(yīng)用程序和其他組件提供分配內(nèi)存池的接口列肢,內(nèi)存池是一個(gè)由固定大小的多個(gè)內(nèi)存塊組成的內(nèi)存容器恰画,可用于存儲(chǔ)不同的對(duì)象實(shí)體,如: 數(shù)據(jù)報(bào)文緩存塊等瓷马。內(nèi)存池是由一個(gè)字符串進(jìn)行唯一標(biāo)識(shí)拴还,它由一個(gè)Ring 緩沖區(qū)和一組本地緩存隊(duì)列組成,每個(gè)CPU core 優(yōu)先從自身的緩存隊(duì)列中分配內(nèi)存塊欧聘,當(dāng)本地緩存隊(duì)列減少到一定程度時(shí)片林,開(kāi)始從內(nèi)存環(huán)緩沖區(qū)中申請(qǐng)內(nèi)存塊進(jìn)行補(bǔ)充。

RING (環(huán)緩沖區(qū)管理組件)怀骤, 為DPDK應(yīng)用程序和其他組件提供一個(gè)無(wú)鎖的多生產(chǎn)者费封、多消費(fèi)者的FIFO緩沖區(qū)隊(duì)列。DPDK 基于 Linux 內(nèi)核的無(wú)鎖環(huán)形緩沖 kfifo 實(shí)現(xiàn)一套自己的無(wú)鎖機(jī)制蒋伦、 RING 環(huán)緩存區(qū)管理組件弓摘,支持單生產(chǎn)者/單消費(fèi)者、多生產(chǎn)者/多消費(fèi)者入列出列的操作痕届,在數(shù)據(jù)傳輸時(shí)韧献、降低性能的同時(shí)還能保住數(shù)據(jù)的同步。

TIMER (定時(shí)器組件)爷抓,提供一些異步周期執(zhí)行的接口势决,可以指定某個(gè)函數(shù)在規(guī)定時(shí)間內(nèi)的異步執(zhí)行,就像LIBC 中的 timer 定時(shí)器蓝撇。但是這里的定時(shí)器需要 DPDK 應(yīng)用程序在主循環(huán)中周期調(diào)用 rte_timer_manage 來(lái)使能定時(shí)器,使用起來(lái)不是那么方便陈莽。

Extensions 擴(kuò)展內(nèi)容

KNI,主要通過(guò) Linux 內(nèi)核中的 kni.ko 模塊將數(shù)據(jù)報(bào)文從用戶(hù)態(tài)傳遞給內(nèi)核態(tài)的協(xié)議棧處理渤昌,以便常規(guī)的用戶(hù)進(jìn)程可以使用Linux 內(nèi)核協(xié)議棧、處理傳統(tǒng)的 Socket 接口報(bào)文走搁。

POWER, 讓 DPDK 應(yīng)用程序可以根據(jù)收?qǐng)?bào)速率独柑、動(dòng)態(tài)調(diào)整CPU頻率、或讓CPU 進(jìn)入不同的休眠狀態(tài)私植。

IVSHMEM, 模塊提供虛擬機(jī)與虛擬機(jī)間忌栅、或虛擬機(jī)與主機(jī)之間的零拷貝共享內(nèi)存機(jī)制,當(dāng) DPDK 應(yīng)用程序運(yùn)行時(shí)、IVSHMEM 模塊會(huì)調(diào)用 Core Libraries 的 API 索绪,把幾個(gè)HugePage 內(nèi)存映射為一個(gè) IVSHMEM 設(shè)備池湖员,并通過(guò)參數(shù)傳遞給 QEMU ,通過(guò)此方法實(shí)現(xiàn)虛擬機(jī)間的零拷貝共享內(nèi)存瑞驱。

PMD-Natives&Virtual 用戶(hù)態(tài)輪詢(xún)模式的網(wǎng)卡驅(qū)動(dòng)程序

以太網(wǎng)輪詢(xún)模式驅(qū)動(dòng)架構(gòu)娘摔,把以太網(wǎng)驅(qū)動(dòng)從內(nèi)核移動(dòng)到應(yīng)用層,采用同步輪詢(xún)機(jī)制而不是內(nèi)核態(tài)的異步中斷機(jī)制來(lái)提高報(bào)文的接收和發(fā)送效率唤反。

Classify 報(bào)文轉(zhuǎn)發(fā)分類(lèi)算法庫(kù)

支持精確匹配 (Exact Match)凳寺、最長(zhǎng)匹配 (LPM)和 通配符匹配 (ACL)數(shù)據(jù)報(bào)文,并提供常用的包處理的查表操作彤侍。

Qos 調(diào)度和流控庫(kù)

提供網(wǎng)絡(luò)服務(wù)質(zhì)量相關(guān)的組件肠缨,如:限速 (Meter) 和調(diào)度 (Scheduler),調(diào)度庫(kù)支持隨機(jī)早檢測(cè)盏阶、流量整形晒奕、嚴(yán)格優(yōu)先級(jí)、和加權(quán)隨機(jī)循環(huán)優(yōu)先級(jí)調(diào)度等般哼。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吴汪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蒸眠,更是在濱河造成了極大的恐慌漾橙,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件楞卡,死亡現(xiàn)場(chǎng)離奇詭異霜运,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蒋腮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)淘捡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人池摧,你說(shuō)我怎么就攤上這事焦除。” “怎么了作彤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵膘魄,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我竭讳,道長(zhǎng)创葡,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任绢慢,我火速辦了婚禮灿渴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己骚露,他們只是感情好蹬挤,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著荸百,像睡著了一般闻伶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上够话,一...
    開(kāi)封第一講書(shū)人閱讀 49,185評(píng)論 1 284
  • 那天蓝翰,我揣著相機(jī)與錄音,去河邊找鬼女嘲。 笑死畜份,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的欣尼。 我是一名探鬼主播爆雹,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼愕鼓!你這毒婦竟也來(lái)了钙态?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤菇晃,失蹤者是張志新(化名)和其女友劉穎册倒,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體磺送,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡驻子,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了估灿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片崇呵。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖馅袁,靈堂內(nèi)的尸體忽然破棺而出域慷,到底是詐尸還是另有隱情,我是刑警寧澤汗销,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布芒粹,位于F島的核電站,受9級(jí)特大地震影響大溜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜估脆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一钦奋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦付材、人聲如沸朦拖。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春紧帕,著一層夾襖步出監(jiān)牢的瞬間郁副,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工页徐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留苏潜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓变勇,卻偏偏與公主長(zhǎng)得像恤左,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子搀绣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • 1. 簡(jiǎn)介 本文檔包含DPDK軟件安裝和配置的相關(guān)說(shuō)明飞袋。旨在幫助用戶(hù)快速啟動(dòng)和運(yùn)行軟件。文檔主要描述了在Linux...
    半天妖閱讀 17,897評(píng)論 0 22
  • 1. DPDK技術(shù)介紹 1) 簡(jiǎn)介 DPDK全稱(chēng)Intel Data Plane Development Kit链患,...
    Aubrey_de6c閱讀 71,057評(píng)論 0 7
  • 本篇主要介紹DPDK的簡(jiǎn)單安裝使用和一點(diǎn)其他相關(guān)內(nèi)容巧鸭,希望對(duì)初學(xué)者有所幫助。 本文打算寫(xiě)的內(nèi)容: 對(duì)DPDK是什么...
    景山道人閱讀 11,712評(píng)論 2 4
  • DPDK是INTEL公司開(kāi)發(fā)的一款高性能的網(wǎng)絡(luò)驅(qū)動(dòng)組件锣险,旨在為數(shù)據(jù)面應(yīng)用程序提供一個(gè)簡(jiǎn)單方便的蹄皱,完整的,快速的數(shù)據(jù)...
    炎鴻閱讀 2,384評(píng)論 0 1
  • 一芯肤、 前言 才開(kāi)始接觸到DPDK巷折,發(fā)現(xiàn)概念很多,很難以下了解崖咨,在這文章中記錄下關(guān)鍵的內(nèi)容锻拘,做到對(duì)dpdk的基本東西...
    明翼閱讀 4,530評(píng)論 0 7