全球熱推薦:通俗解讀DPDK:云時(shí)代數(shù)據(jù)傳輸優(yōu)化利器如何煉成?

2022-09-14 21:30:03來(lái)源:閆躍龍微信號(hào)  

我國(guó)正在加速進(jìn)入數(shù)字經(jīng)濟(jì)時(shí)代。


(資料圖片)

中國(guó)工信出版?zhèn)髅郊瘓F(tuán)副總經(jīng)理劉華魯表示,截至2021年底,我國(guó)企業(yè)上云、使用云的比例達(dá)到80%,上云已經(jīng)成為數(shù)字化的必經(jīng)之路。

以上云為主要特征的數(shù)字時(shí)代,最典型的一個(gè)特征是數(shù)據(jù)的高速增長(zhǎng)。據(jù)中國(guó)信通院數(shù)據(jù),截止2021年底,我國(guó)在用數(shù)據(jù)中心機(jī)架規(guī)模高達(dá)520萬(wàn)架,近5年年均復(fù)合增速超過(guò)30%,其中大型以上數(shù)據(jù)中心機(jī)架規(guī)模420萬(wàn)架,占比達(dá)到80%。IDC更是預(yù)測(cè),到2025年,數(shù)據(jù)中心流量預(yù)計(jì)將增長(zhǎng)超過(guò)180ZB,數(shù)據(jù)中心業(yè)務(wù)高吞吐的發(fā)展趨勢(shì)非常明顯。

在數(shù)據(jù)大爆發(fā)的大背景下,數(shù)據(jù)中心網(wǎng)絡(luò)內(nèi)部交換系統(tǒng)也在大提速,從10GE、40GE向100GE、400GE提速,相應(yīng)的,一場(chǎng)圍繞網(wǎng)絡(luò)數(shù)據(jù)傳輸優(yōu)化的攻堅(jiān)戰(zhàn)也在上演。

云時(shí)代的數(shù)據(jù)傳輸痛點(diǎn)

云時(shí)代,網(wǎng)絡(luò)傳輸(I/O)的變革是深刻的。

在傳統(tǒng)網(wǎng)絡(luò)時(shí)代,路由器、交換機(jī)等設(shè)備都是采用硬件的解決方案,基于專(zhuān)用化、定制化的處理器。這種方式的缺點(diǎn)很明顯,存在調(diào)試維護(hù)難、升級(jí)迭代難等問(wèn)題。而且,傳統(tǒng)通信專(zhuān)有化設(shè)備需要維護(hù)多個(gè)平臺(tái)硬件,控制平面、數(shù)據(jù)平面的軟硬件各不相同,維護(hù)成本高昂。

尤其是當(dāng)云時(shí)代到來(lái)時(shí),通過(guò)網(wǎng)絡(luò)功能虛擬化共享硬件成為行業(yè)標(biāo)配,即通過(guò)標(biāo)準(zhǔn)的服務(wù)器、標(biāo)準(zhǔn)的以太網(wǎng)交換機(jī)來(lái)實(shí)現(xiàn)各種功能。如英特爾公司早在10多年前就提出4合1戰(zhàn)略,即應(yīng)用、控制、數(shù)據(jù)、信號(hào)處理都統(tǒng)一在IA(Intel Architecture)處理器平臺(tái)上。

然而,云時(shí)代數(shù)據(jù)的大爆發(fā),為網(wǎng)絡(luò)數(shù)據(jù)傳輸帶來(lái)極大挑戰(zhàn)。在業(yè)界,曾經(jīng)相繼出現(xiàn)過(guò)C10K、C100K、C10M等難題就是這樣。所謂C10K,是單機(jī)1萬(wàn)個(gè)并發(fā)連接問(wèn)題,同樣,C100K是實(shí)現(xiàn)單機(jī)并發(fā)連接100萬(wàn),C10M是實(shí)現(xiàn)千萬(wàn)并發(fā)連接。

在硬件上這些問(wèn)題解決起來(lái)不難,堆硬件就可以實(shí)現(xiàn),但是這樣做的弊端也顯而易見(jiàn),既成本高昂,又不通用。2013年,Errata Security公司CEO Robert Graham用軟件的方式解決了這一難題,他認(rèn)為,Linux系統(tǒng)的設(shè)計(jì)初衷是傳統(tǒng)電話網(wǎng)絡(luò)的控制系統(tǒng),而非服務(wù)器OS,不適合處理大規(guī)模的網(wǎng)絡(luò)數(shù)據(jù)包。

更重要的是,他得出一個(gè)結(jié)論:OS的內(nèi)核不是解決C10M問(wèn)題的路徑,相反,OS內(nèi)核正是導(dǎo)致C10M問(wèn)題的瓶頸。

數(shù)據(jù)可以很直觀地解釋這個(gè)結(jié)論。以40G接口為例,如果要達(dá)到40G線速,一個(gè)2.0主頻的CPU需要平均16.8ns / 33個(gè)cycles處理一個(gè)64字節(jié)包長(zhǎng)的報(bào)文。而在IA平臺(tái),基于Linux OS內(nèi)核態(tài)的網(wǎng)卡驅(qū)動(dòng),單核的轉(zhuǎn)發(fā)能力只有2Mpps@64B,遠(yuǎn)低于網(wǎng)卡的最大吞吐能力。

為什么會(huì)這樣?在老調(diào)“芯”說(shuō)最新一期視頻“DPDK:讓數(shù)據(jù)包極速狂奔”中,很形象地解釋了其中的重要原因。網(wǎng)絡(luò)數(shù)據(jù)傳輸就像是收發(fā)文件、蓋章抄送,要完成這個(gè)工作,有兩種路徑,一種路徑是專(zhuān)用處理器,另一種路徑是通用處理器,而通用處理器之所以效率低,并不是自己本身原因,而是Linux系統(tǒng)的工作模式:因?yàn)閭鹘y(tǒng)的網(wǎng)卡驅(qū)動(dòng)運(yùn)行在操作系統(tǒng)內(nèi)核態(tài),而絕大多數(shù)軟件代碼運(yùn)行在用戶態(tài),內(nèi)核態(tài)的網(wǎng)卡驅(qū)動(dòng)采用中斷模式通知CPU處理數(shù)據(jù)包,而隨著網(wǎng)絡(luò)流量激增,僅僅響應(yīng)中斷就讓CPU疲于應(yīng)付,而在內(nèi)核態(tài)和用戶態(tài)之間的切換和數(shù)據(jù)拷貝等額外開(kāi)銷(xiāo)也會(huì)浪費(fèi)CPU的處理能力。

所以,這個(gè)時(shí)候,急需一套基于常用系統(tǒng)和標(biāo)準(zhǔn)服務(wù)器的高性能網(wǎng)絡(luò)傳輸開(kāi)發(fā)框架,來(lái)規(guī)避傳統(tǒng)內(nèi)核態(tài)網(wǎng)卡驅(qū)動(dòng)的額外開(kāi)銷(xiāo),充分利用IA處理器的能力來(lái)實(shí)現(xiàn)高效的報(bào)文轉(zhuǎn)發(fā)和處理,更好地應(yīng)對(duì)云時(shí)代對(duì)數(shù)據(jù)IO需求的激增。

DPDK技術(shù)大揭秘

DPDK技術(shù)正是在這種大背景下應(yīng)運(yùn)而生。

2008年,DPDK由英特爾公司的網(wǎng)絡(luò)通信部門(mén)提出,主要是針對(duì)基于Intel的處理器和網(wǎng)卡開(kāi)發(fā)。正如其全稱(Data Plane Development Kit,數(shù)據(jù)平面開(kāi)發(fā)套件),DPDK提供豐富、完整的框架,讓CPU快速實(shí)現(xiàn)數(shù)據(jù)平面應(yīng)用的數(shù)據(jù)包處理,高效完成網(wǎng)絡(luò)轉(zhuǎn)發(fā)等工作。

說(shuō)到這里,有必要解釋一下數(shù)據(jù)平面的概念。在通信框架中,數(shù)據(jù)傳輸和連接管理通常被拆分為多個(gè)獨(dú)立的操作,這些操作被稱為“平面”,平面包括管理平面、數(shù)據(jù)平面、控制平面。在傳統(tǒng)網(wǎng)絡(luò),這些平面都在路由器和交換機(jī)的固件中實(shí)現(xiàn),管理平面負(fù)責(zé)為網(wǎng)絡(luò)堆棧各個(gè)層級(jí)和網(wǎng)絡(luò)系統(tǒng)的其他部分提供管理、監(jiān)控和配置服務(wù);控制平面決定流量的傳輸路徑;數(shù)據(jù)平面又稱為用戶平面,承載用戶流量,并負(fù)責(zé)接口間的數(shù)據(jù)包轉(zhuǎn)發(fā)。

DPDK的主要目的就是通過(guò)提供簡(jiǎn)單、完整的框架,快速實(shí)現(xiàn)數(shù)據(jù)平面應(yīng)用的數(shù)據(jù)包處理,其核心特征就是繞過(guò)了Linux內(nèi)核態(tài)對(duì)數(shù)據(jù)包的處理過(guò)程,直接在用戶態(tài)收發(fā)包來(lái)解決內(nèi)核的瓶頸。用收發(fā)文件來(lái)類(lèi)比,傳統(tǒng)的方式是從網(wǎng)卡到用戶態(tài),需要先通過(guò)內(nèi)核,就像文件不是直接送給你,而是中間要經(jīng)過(guò)傳達(dá)室一樣,這樣的效率可想而知。而DPDK繞過(guò)內(nèi)核,避免了從內(nèi)核態(tài)向用戶態(tài)拷貝數(shù)據(jù)的開(kāi)銷(xiāo),以及內(nèi)核態(tài)與用戶態(tài)切換的開(kāi)銷(xiāo),就像文件直接送給你一樣,能夠?qū)崿F(xiàn)更高的效率。

除了用戶態(tài)驅(qū)動(dòng),DPDK用輪詢模式解決了中斷響應(yīng)造成的上下文切換開(kāi)銷(xiāo)。借用老調(diào)“芯”談視頻的類(lèi)比,中斷模式,就像是每送來(lái)一個(gè)文件,就拍你一下,讓你看有文件來(lái)了,而輪詢模式則是直接將文件放到你的桌子上,你有空抬頭看一眼就拿過(guò)來(lái)處理。顯然,輪詢的模式效率更高。

綁定處理核的做法,則讓DPDK解決了OS對(duì)報(bào)文處理核調(diào)度的開(kāi)銷(xiāo)問(wèn)題。傳統(tǒng)上,多核處理器在工作時(shí),數(shù)據(jù)包可能會(huì)跨越多個(gè)CPU核心,這容易造成CPU緩存失效,DPDK具有CPU親和性,將線程和CPU核進(jìn)行一對(duì)一綁定,減少了彼此之間的調(diào)度切換的開(kāi)銷(xiāo)。同樣用收發(fā)文件來(lái)類(lèi)比,原來(lái)是一份文件在運(yùn)輸過(guò)程中由幾個(gè)人完成,每換一個(gè)人都需要交接,而DPDK的綁定處理核的做法則是每一份文件都由專(zhuān)人負(fù)責(zé)到底,中間省去了交接的開(kāi)銷(xiāo)。

此外,DPDK還用大頁(yè)內(nèi)存代替普通內(nèi)存,減少了緩存失效問(wèn)題;用無(wú)鎖技術(shù)解決了資源競(jìng)爭(zhēng)問(wèn)題等等??梢赃@樣說(shuō),DPDK的每一個(gè)技術(shù),或者采用的每一種方法都是為了節(jié)省數(shù)據(jù)包的處理時(shí)間,讓數(shù)據(jù)加速奔跑。

目前,DPDK已經(jīng)開(kāi)源,越來(lái)越多的廠商參與進(jìn)來(lái)貢獻(xiàn)代碼,這使得DPDK可以支持更多的CPU和網(wǎng)卡,如CPU不僅支持IA,還支持AMD、ARM等廠商的處理器,網(wǎng)卡支持的范圍也包括Intel網(wǎng)卡、Mellanox網(wǎng)卡、ARM集成網(wǎng)卡等。

據(jù)了解,目前DPDK廣泛應(yīng)用在通信、互聯(lián)網(wǎng)領(lǐng)域,很多的開(kāi)源項(xiàng)目也利用DPDK作為傳輸?shù)募铀偻ǖ?,比如OVS。作為優(yōu)秀的用戶空間高性能數(shù)據(jù)包加速套件,DPDK現(xiàn)在已經(jīng)作為“膠水”模塊被用于多個(gè)網(wǎng)絡(luò)數(shù)據(jù)處理方案中,用來(lái)提升性能。

在招聘網(wǎng)站上,筆者也注意到DPDK相關(guān)職位也變得越來(lái)越熱門(mén),很多云計(jì)算廠商都在高薪招聘“DPDK網(wǎng)絡(luò)開(kāi)發(fā)工程師”等職位。

總而言之,DPDK在云時(shí)代影響深遠(yuǎn),它解決了通用處理器如何快速處理數(shù)據(jù)包的問(wèn)題,也一舉粉碎了“IA處理器不適用于數(shù)據(jù)平面IO高速轉(zhuǎn)發(fā)業(yè)務(wù)場(chǎng)景”的傳統(tǒng)觀點(diǎn),讓通用處理器代替專(zhuān)用處理器,高效地支撐起數(shù)字時(shí)代的數(shù)據(jù)洪流。


本文首發(fā)于微信公眾號(hào):閆躍龍。文章內(nèi)容屬作者個(gè)人觀點(diǎn),不代表和訊網(wǎng)立場(chǎng)。投資者據(jù)此操作,風(fēng)險(xiǎn)請(qǐng)自擔(dān)。

關(guān)鍵詞: DPDK

責(zé)任編輯:hnmd003

相關(guān)閱讀

相關(guān)閱讀

精彩推送

推薦閱讀