溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何進(jìn)行DPDK全面分析

發(fā)布時(shí)間:2021-12-29 13:47:37 來源:億速云 閱讀:156 作者:柒染 欄目:互聯(lián)網(wǎng)科技

這篇文章將為大家詳細(xì)講解有關(guān)如何進(jìn)行DPDK全面分析,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

DPDK 全面分析

高性能網(wǎng)絡(luò)技術(shù)

隨著云計(jì)算產(chǎn)業(yè)的異軍突起,網(wǎng)絡(luò)技術(shù)的不斷創(chuàng)新,越來越多的網(wǎng)絡(luò)設(shè)備基礎(chǔ)架構(gòu)逐步向基于通用處理器平臺(tái)的架構(gòu)方向融合,從傳統(tǒng)的物理網(wǎng)絡(luò)到虛擬網(wǎng)絡(luò),從扁平化的網(wǎng)絡(luò)結(jié)構(gòu)到基于 SDN 分層的網(wǎng)絡(luò)結(jié)構(gòu),無不體現(xiàn)出這種創(chuàng)新與融合。

這在使得網(wǎng)絡(luò)變得更加可控制和成本更低的同時(shí),也能夠支持大規(guī)模用戶或應(yīng)用程序的性能需求,以及海量數(shù)據(jù)的處理。究其原因,其實(shí)是高性能網(wǎng)絡(luò)編程技術(shù)隨著網(wǎng)絡(luò)架構(gòu)的演進(jìn)不斷突破的一種必然結(jié)果。

為什么這么說?基于 OS 內(nèi)核的數(shù)據(jù)傳輸有什么弊端?

1、中斷處理。當(dāng)網(wǎng)絡(luò)中大量數(shù)據(jù)包到來時(shí),會(huì)產(chǎn)生頻繁的硬件中斷請(qǐng)求,這些硬件中斷可以打斷之前較低優(yōu)先級(jí)的軟中斷或者系統(tǒng)調(diào)用的執(zhí)行過程,如果這種打斷頻繁的話,將會(huì)產(chǎn)生較高的性能開銷。

2、內(nèi)存拷貝。正常情況下,一個(gè)網(wǎng)絡(luò)數(shù)據(jù)包從網(wǎng)卡到應(yīng)用程序需要經(jīng)過如下的過程:數(shù)據(jù)從網(wǎng)卡通過 DMA 等方式傳到內(nèi)核開辟的緩沖區(qū),然后從內(nèi)核空間拷貝到用戶態(tài)空間,在 Linux 內(nèi)核協(xié)議棧中,這個(gè)耗時(shí)操作甚至占到了數(shù)據(jù)包整個(gè)處理流程的 57.1%。

3、上下文切換。頻繁到達(dá)的硬件中斷和軟中斷都可能隨時(shí)搶占系統(tǒng)調(diào)用的運(yùn)行,這會(huì)產(chǎn)生大量的上下文切換開銷。另外,在基于多線程的服務(wù)器設(shè)計(jì)框架中,線程間的調(diào)度也會(huì)產(chǎn)生頻繁的上下文切換開銷,同樣,鎖競(jìng)爭(zhēng)的耗能也是一個(gè)非常嚴(yán)重的問題。

4、局部性失效。如今主流的處理器都是多個(gè)核心的,這意味著一個(gè)數(shù)據(jù)包的處理可能跨多個(gè) CPU 核心,比如一個(gè)數(shù)據(jù)包可能中斷在 cpu0,內(nèi)核態(tài)處理在 cpu1,用戶態(tài)處理在 cpu2,這樣跨多個(gè)核心,容易造成 CPU 緩存失效,造成局部性失效。如果是 NUMA 架構(gòu),更會(huì)造成跨 NUMA 訪問內(nèi)存,性能受到很大影響。

5、內(nèi)存管理。傳統(tǒng)服務(wù)器內(nèi)存頁為 4K,為了提高內(nèi)存的訪問速度,避免 cache miss,可以增加 cache 中映射表的條目,但這又會(huì)影響 CPU 的檢索效率。

綜合以上問題,可以看出內(nèi)核本身就是一個(gè)非常大的瓶頸所在。那很明顯解決方案就是想辦法繞過內(nèi)核。

解決方案探討

針對(duì)以上弊端,分別提出以下技術(shù)點(diǎn)進(jìn)行探討。

1、控制層和數(shù)據(jù)層分離。將數(shù)據(jù)包處理、內(nèi)存管理、處理器調(diào)度等任務(wù)轉(zhuǎn)移到用戶空間去完成,而內(nèi)核僅僅負(fù)責(zé)部分控制指令的處理。這樣就不存在上述所說的系統(tǒng)中斷、上下文切換、系統(tǒng)調(diào)用、系統(tǒng)調(diào)度等等問題。

2、使用多核編程技術(shù)代替多線程技術(shù),并設(shè)置 CPU 的親和性,將線程和 CPU 核進(jìn)行一比一綁定,減少彼此之間調(diào)度切換。

3、針對(duì) NUMA 系統(tǒng),盡量使 CPU 核使用所在 NUMA 節(jié)點(diǎn)的內(nèi)存,避免跨內(nèi)存訪問。

4、使用大頁內(nèi)存代替普通的內(nèi)存,減少 cache-miss。

5、采用無鎖技術(shù)解決資源競(jìng)爭(zhēng)問題。

經(jīng)很多前輩先驅(qū)的研究,目前業(yè)內(nèi)已經(jīng)出現(xiàn)了很多優(yōu)秀的集成了上述技術(shù)方案的高性能網(wǎng)絡(luò)數(shù)據(jù)處理框架,如 6wind、windriver、netmap、dpdk 等,其中,Intel 的 dpdk 在眾多方案脫穎而出,一騎絕塵。

如何進(jìn)行DPDK全面分析

dpdk 為 Intel 處理器架構(gòu)下用戶空間高效的數(shù)據(jù)包處理提供了庫函數(shù)和驅(qū)動(dòng)的支持,它不同于 Linux 系統(tǒng)以通用性設(shè)計(jì)為目的,而是專注于網(wǎng)絡(luò)應(yīng)用中數(shù)據(jù)包的高性能處理。

也就是 dpdk 繞過了 Linux 內(nèi)核協(xié)議棧對(duì)數(shù)據(jù)包的處理過程,在用戶空間實(shí)現(xiàn)了一套數(shù)據(jù)平面來進(jìn)行數(shù)據(jù)包的收發(fā)與處理。在內(nèi)核看來,dpdk 就是一個(gè)普通的用戶態(tài)進(jìn)程,它的編譯、連接和加載方式和普通程序沒有什么兩樣。

dpdk 的突破

相對(duì)傳統(tǒng)的基于內(nèi)核的網(wǎng)絡(luò)數(shù)據(jù)處理,dpdk 對(duì)從內(nèi)核層到用戶層的網(wǎng)絡(luò)數(shù)據(jù)流程進(jìn)行了重大突破,我們先看看傳統(tǒng)的數(shù)據(jù)流程和 dpdk 中的網(wǎng)絡(luò)流程有什么不同。

傳統(tǒng) Linux 內(nèi)核網(wǎng)絡(luò)數(shù)據(jù)流程:

 

Copy

硬件中斷--->取包分發(fā)至內(nèi)核線程--->軟件中斷--->內(nèi)核線程在協(xié)議棧中處理包--->處理完畢通知用戶層 用戶層收包-->網(wǎng)絡(luò)層--->邏輯層--->業(yè)務(wù)層

dpdk 網(wǎng)絡(luò)數(shù)據(jù)流程:

 

Copy

硬件中斷--->放棄中斷流程 用戶層通過設(shè)備映射取包--->進(jìn)入用戶層協(xié)議棧--->邏輯層--->業(yè)務(wù)層

下面就具體看看 dpdk 做了哪些突破?

UIO (用戶空間的 I/O 技術(shù))的加持。

dpdk 能夠繞過內(nèi)核協(xié)議棧,本質(zhì)上是得益于 UIO 技術(shù),通過 UIO 能夠攔截中斷,并重設(shè)中斷回調(diào)行為,從而繞過內(nèi)核協(xié)議棧后續(xù)的處理流程。

UIO 設(shè)備的實(shí)現(xiàn)機(jī)制其實(shí)是對(duì)用戶空間暴露文件接口,比如當(dāng)注冊(cè)一個(gè) UIO 設(shè)備 uioX,就會(huì)出現(xiàn)文件 /dev/uioX,對(duì)該文件的讀寫就是對(duì)設(shè)備內(nèi)存的讀寫。除此之外,對(duì)設(shè)備的控制還可以通過 /sys/class/uio 下的各個(gè)文件的讀寫來完成。

如何進(jìn)行DPDK全面分析

內(nèi)存池技術(shù)

dpdk 在用戶空間實(shí)現(xiàn)了一套精巧的內(nèi)存池技術(shù),內(nèi)核空間和用戶空間的內(nèi)存交互不進(jìn)行拷貝,只做控制權(quán)轉(zhuǎn)移。這樣,當(dāng)收發(fā)數(shù)據(jù)包時(shí),就減少了內(nèi)存拷貝的開銷。

大頁內(nèi)存管理

dpdk 實(shí)現(xiàn)了一組大頁內(nèi)存分配、使用和釋放的 API,上層應(yīng)用可以很方便使用 API 申請(qǐng)使用大頁內(nèi)存,同時(shí)也兼容普通的內(nèi)存申請(qǐng)。

無鎖環(huán)形隊(duì)列

dpdk 基于 Linux 內(nèi)核的無鎖環(huán)形緩沖 kfifo 實(shí)現(xiàn)了自己的一套無鎖機(jī)制。支持單生產(chǎn)者入列/單消費(fèi)者出列和多生產(chǎn)者入列/多消費(fèi)者出列操作,在數(shù)據(jù)傳輸?shù)臅r(shí)候,降低性能的同時(shí)還能保證數(shù)據(jù)的同步。

poll-mode網(wǎng)卡驅(qū)動(dòng)

DPDK網(wǎng)卡驅(qū)動(dòng)完全拋棄中斷模式,基于輪詢方式收包,避免了中斷開銷。

NUMA

dpdk 內(nèi)存分配上通過 proc 提供的內(nèi)存信息,使 CPU 核心盡量使用靠近其所在節(jié)點(diǎn)的內(nèi)存,避免了跨 NUMA 節(jié)點(diǎn)遠(yuǎn)程訪問內(nèi)存的性能問題。

CPU 親和性

dpdk 利用 CPU 的親和性將一個(gè)線程或多個(gè)線程綁定到一個(gè)或多個(gè) CPU 上,這樣在線程執(zhí)行過程中,就不會(huì)被隨意調(diào)度,一方面減少了線程間的頻繁切換帶來的開銷,另一方面避免了 CPU 緩存的局部失效性,增加了 CPU 緩存的命中率。

多核調(diào)度框架

dpdk 基于多核架構(gòu),一般會(huì)有主從核之分,主核負(fù)責(zé)完成各個(gè)模塊的初始化,從核負(fù)責(zé)具體的業(yè)務(wù)處理。

除了上述之外,dpdk 還有很多的技術(shù)突破,可以用下面這張圖來概之。

如何進(jìn)行DPDK全面分析

dpdk 的應(yīng)用

dpdk 作為優(yōu)秀的用戶空間高性能數(shù)據(jù)包加速套件,現(xiàn)在已經(jīng)作為一個(gè)“膠水”模塊被用在多個(gè)網(wǎng)絡(luò)數(shù)據(jù)處理方案中,用來提高性能。如下是眾多的應(yīng)用。

如何進(jìn)行DPDK全面分析

數(shù)據(jù)面(虛擬交換機(jī)):

OVS

Open vSwitch 是一個(gè)多核虛擬交換機(jī)平臺(tái),支持標(biāo)準(zhǔn)的管理接口和開放可擴(kuò)展的可編程接口,支持第三方的控制接入。

VPP

VPP 是 cisco 開源的一個(gè)高性能的包處理框架,提供了 交換/路由 功能,在虛擬化環(huán)境中,使它可以當(dāng)做一個(gè)虛擬交換機(jī)來使用。在一個(gè)類 SDN 的處理框架中,它往往充當(dāng)數(shù)據(jù)面的角色。經(jīng)研究表明,VPP 性能要好于 ovs+dpdk 的組合,但它更適用于NFV,適合做特定功能的網(wǎng)絡(luò)模塊。

Lagopus

Lagopus 是另一個(gè)多核虛擬交換的實(shí)現(xiàn),功能和 OVS 差不多,支持多種網(wǎng)絡(luò)協(xié)議,如 Ethernet,VLAN,QinQ,MAC-in-MAC,MPLS 和 PBB,以及隧道協(xié)議,如 GRE,VxLan 和 GTP。

Snabb

Snabb 是一個(gè)簡(jiǎn)單且快速的數(shù)據(jù)包處理工具箱。

數(shù)據(jù)面(虛擬路由器):

OPENCONTRAIL

一個(gè)集成了 SDN 控制器的虛擬路由器,現(xiàn)在多用在 OpenStack 中,結(jié)合 Neutron 為 OpenStack 提供一站式的網(wǎng)絡(luò)支持。

CloudRouter

一個(gè)分布式的路由器。

dpdk 繞過了 Linux 內(nèi)核協(xié)議棧,加速數(shù)據(jù)的處理,用戶可以在用戶空間定制協(xié)議棧,滿足自己的應(yīng)用需求,目前出現(xiàn)了很多基于 dpdk 的高性能網(wǎng)絡(luò)框架,OVS 和 VPP 是常用的數(shù)據(jù)面框架,mTCP 和 f-stack 是常用的用戶態(tài)協(xié)議棧。很多大公司都在使用 dpdk 來優(yōu)化網(wǎng)絡(luò)性能。

關(guān)于如何進(jìn)行DPDK全面分析就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI