淺談網(wǎng)絡(luò)I/O全虛擬化嘹锁、半虛擬化和I/O透?jìng)?/h1>

眾所周知,虛擬化技術(shù)旨在將有限的物理資源(CPU蔼夜、內(nèi)存等)抽象成更多份的虛擬資源供上層應(yīng)用使用兼耀。最常用的領(lǐng)域有云服務(wù)提供商,SDN/NFV求冷,比如:在一臺(tái)物理服務(wù)器上運(yùn)行成百上千的虛擬機(jī)瘤运,并將單個(gè)虛擬機(jī)出租給不同用戶。

虛擬化的實(shí)現(xiàn)主要由三項(xiàng)關(guān)鍵技術(shù)構(gòu)成:CPU虛擬化匠题、內(nèi)存虛擬化和I/O虛擬化拯坟。其中CPU和內(nèi)存虛擬化多由硬件支持實(shí)現(xiàn),如intel VT-x韭山、VT-d等IA架構(gòu)擴(kuò)展郁季,還有EPT頁(yè)表等。而I/O虛擬化則沒(méi)有CPU和內(nèi)存虛擬化那么統(tǒng)一钱磅,由于其大量基于軟件實(shí)現(xiàn)梦裂,因此發(fā)展過(guò)程中,衍生出了好多種性能盖淡、靈活性各異的方案年柠。我們通常所說(shuō)的全虛擬化和半虛擬化一般都是在網(wǎng)絡(luò)I/O虛擬化中體現(xiàn)的差異最大。

1.網(wǎng)絡(luò)I/O全虛擬化

該方式采用軟件模擬真實(shí)硬件設(shè)備褪迟。一個(gè)設(shè)備的所有功能或者總線結(jié)構(gòu)(如設(shè)備枚舉冗恨、識(shí)別、中斷和DMA)等都可以在宿主機(jī)中模擬味赃。而對(duì)客戶機(jī)而言看到的是一個(gè)功能齊全的“真實(shí)”的硬件設(shè)備掀抹。其實(shí)現(xiàn)上通常需要宿主機(jī)上的軟件配合截取客戶機(jī)對(duì)I/O設(shè)備的各種請(qǐng)求,通過(guò)軟件去模擬心俗。比如:QEMU/KVM虛擬化中QEMU就可以通過(guò)模擬各種類型的網(wǎng)卡傲武。

這種方式的好處是靈活,不需要專有驅(qū)動(dòng),因此能實(shí)現(xiàn)既不需要修改客戶機(jī)谱轨、也無(wú)需考慮底層硬件戒幔,對(duì)客戶機(jī)透明地使用網(wǎng)絡(luò)資源。但是缺點(diǎn)在于土童,很多中斷信號(hào)的處理需要讓客戶機(jī)感覺(jué)到自己運(yùn)行在一個(gè)“真實(shí)環(huán)境”诗茎,因此QEMU軟件模擬的很底層,效率低下献汗。

2.網(wǎng)絡(luò)I/O半虛擬化

在這種虛擬化中敢订,客戶機(jī)操作系統(tǒng)能夠感知到自己是虛擬機(jī),I/O的虛擬化由前端驅(qū)動(dòng)和后端驅(qū)動(dòng)共同模擬實(shí)現(xiàn)罢吃。在客戶機(jī)中運(yùn)行的驅(qū)動(dòng)程序稱之為前端楚午,在宿主機(jī)上與前端通信的驅(qū)動(dòng)程序稱之為后端。前端發(fā)送客戶機(jī)請(qǐng)求給后端尿招,后端驅(qū)動(dòng)處理完這些請(qǐng)求后再返回給前端矾柜。而在不同的虛擬化機(jī)制中,這一過(guò)程的實(shí)現(xiàn)手段也有所區(qū)別就谜,例如:Xen中的共享內(nèi)存怪蔑、授權(quán)表,KVM中的virtio丧荐。它相比于全虛擬化的好處在于缆瓣,不再需要宿主機(jī)上專門的軟件去模擬實(shí)現(xiàn)I/O請(qǐng)求,因此不會(huì)有VM-exit虹统,性能會(huì)有所提升弓坞。

半虛擬化中的virtio是IBM于2005年提出的一套方案[1],經(jīng)過(guò)了十多年的發(fā)展车荔,其驅(qū)動(dòng)現(xiàn)在基本已經(jīng)被主流的操作系統(tǒng)接納編入內(nèi)核渡冻,因此virtio也已經(jīng)成為半虛擬化的一套事實(shí)標(biāo)準(zhǔn)。其主要結(jié)構(gòu)如下圖所示忧便,前后端驅(qū)動(dòng)通過(guò)虛擬隊(duì)列通信菩帝,虛擬隊(duì)列中又包含used ring、avail ring和desc ring茬腿。其具體接口標(biāo)準(zhǔn)參見(jiàn)IBM網(wǎng)站https://www.ibm.com/developerworks/cn/linux/1402_caobb_virtio/
,這里不做過(guò)多介紹宜雀。

圖1 virtio環(huán)表.png

以virtio為標(biāo)準(zhǔn)的半虛擬化在其追尋性能的道路上也歷經(jīng)了三個(gè)演進(jìn)方案:virtio-net切平、vhost-net和vhost-user。

virtio-net

如下圖所示辐董,KVM負(fù)責(zé)為程序提供虛擬化硬件的內(nèi)核模塊悴品,QEMU利用KVM模擬VM運(yùn)行環(huán)境,包括處理器和外設(shè)等;Tap是內(nèi)核中的虛擬以太網(wǎng)設(shè)備苔严,可以理解為內(nèi)核bridge定枷。


圖2 virtio-net.png

當(dāng)客戶機(jī)發(fā)送報(bào)文時(shí),它會(huì)利用消息通知機(jī)制通知KVM届氢,并退出到用戶空間的QEMU進(jìn)程欠窒,然后由QEMU對(duì)Tap設(shè)備進(jìn)行讀寫(xiě)(需要說(shuō)明的是,QEMU是VM運(yùn)行的主進(jìn)程退子,因此才有退出這一說(shuō))岖妄。
在該模型中,宿主機(jī)寂祥、客戶機(jī)和QEMU存在大量的上下文切換荐虐,以及頻繁的數(shù)據(jù)拷貝、CPU特權(quán)級(jí)切換丸凭,因此性能差強(qiáng)人意福扬。其函數(shù)調(diào)用路徑如下:

圖3 virtio-net數(shù)據(jù)包處理調(diào)用流程.png

兩次報(bào)文拷貝導(dǎo)致性能瓶頸,另外消息機(jī)制處理過(guò)程太長(zhǎng):報(bào)文到達(dá)Tap時(shí)內(nèi)核通知QEMU惜犀,QEMU利用IOCTL向KVM請(qǐng)求中斷铛碑,KVM發(fā)送中斷到客戶機(jī)。

vhost-net

針對(duì)virtio-net的優(yōu)化是把QEMU從消息隊(duì)列的處理中解放出來(lái)向拆,直接在宿主機(jī)實(shí)現(xiàn)了一個(gè)vhost-net內(nèi)核模塊亚茬,專門做virtio的后端,以此減少上下文切換和數(shù)據(jù)包拷貝浓恳。

其結(jié)構(gòu)如下圖所示刹缝,以報(bào)文接收過(guò)程為例。數(shù)據(jù)通路直接從Tap設(shè)備接收數(shù)據(jù)報(bào)文颈将,通過(guò)vhost-net內(nèi)核模塊把報(bào)文拷貝到虛擬隊(duì)列中的數(shù)據(jù)區(qū)梢夯,從而使客戶機(jī)接收?qǐng)?bào)文。消息通路是當(dāng)報(bào)文從Tap設(shè)備到達(dá)vhost-net時(shí)晴圾,通過(guò)KVM向客戶機(jī)發(fā)送中斷颂砸,通知客戶機(jī)接收?qǐng)?bào)文。


圖4 vhost-net.png

在數(shù)據(jù)通路層面死姚,vhost-net減少了內(nèi)存拷貝人乓,但是由于其后端運(yùn)行在內(nèi)核態(tài),仍然存在性能瓶頸都毒。

vhost-user

vhost-user是采用DPDK用戶態(tài)后端實(shí)現(xiàn)的高性能半虛擬化網(wǎng)絡(luò)I/O色罚。其實(shí)現(xiàn)機(jī)理與vhost-net類似,但是整個(gè)后端包括ovs(openvswitch) datapath全部置于用戶空間账劲,更好的利用DPDK加速戳护。

然而由于OVS進(jìn)程是用戶態(tài)進(jìn)程金抡,無(wú)權(quán)限訪問(wèn)客戶機(jī)內(nèi)存,因此需要使用共享內(nèi)存技術(shù)腌且,提前通過(guò)socket通信在客戶機(jī)啟動(dòng)時(shí)梗肝,告知OVS自己的內(nèi)存布局和virtio中虛擬隊(duì)列信息等。這樣OVS建立起對(duì)每個(gè)VM的共享內(nèi)存铺董,便可以在用戶態(tài)實(shí)現(xiàn)上述vhost-net內(nèi)核模塊的功能巫击。


圖5 vhost-user.png

vDPA加速的vhost-user

在DPDK加速的vhost-user方案中,還有一次內(nèi)存拷貝柄粹。半虛擬化中僅剩的性能瓶頸也就在這一次拷貝中喘鸟,intel推出了一款硬件解決方案,直接讓網(wǎng)卡與客戶機(jī)內(nèi)的virtio虛擬隊(duì)列交互驻右,把數(shù)據(jù)包DMA到客戶機(jī)buffer內(nèi)什黑,在支持了virtio標(biāo)準(zhǔn)的基礎(chǔ)上實(shí)現(xiàn)了真正意義上的零拷貝

圖6 vDPA.png

在18.05以后的DPDK版本中堪夭,已經(jīng)有支持vDPA的feature供選擇了愕把。

3.I/O透?jìng)?/h1>

對(duì)于性能的追求是永無(wú)止境的,除了上述全虛擬化森爽、半虛擬化兩種I/O虛擬化以外恨豁,還有一種非常極端的做法。讓物理設(shè)備穿過(guò)宿主機(jī)爬迟、虛擬化層橘蜜,直接被客戶機(jī)使用,這種方式通掣杜唬可以獲取近乎native的性能计福。

這種方式主要缺點(diǎn)是:
1.硬件資源昂貴且有限类垦。
2.動(dòng)態(tài)遷移問(wèn)題呈枉,宿主機(jī)并不知道設(shè)備的運(yùn)行的內(nèi)部狀態(tài)耗绿,狀態(tài)無(wú)法遷移或恢復(fù)溉苛。

DPDK針對(duì)這兩點(diǎn)問(wèn)題都做了一定程度的解決。另外還提供了一種基于硬件的PF(物理功能)轉(zhuǎn)VF(虛擬功能)匙睹,這相當(dāng)于在網(wǎng)卡層面上就已經(jīng)有了虛擬化的概念灵临,把一個(gè)網(wǎng)卡的PF虛擬成幾十上百個(gè)VF坐求,這樣可以把不同的VF透?jìng)鹘o不同的虛擬機(jī)潮瓶,這就是我們最熟悉的SR-IOV陶冷。

對(duì)于I/O透?jìng)髟谔摂M化環(huán)境中最嚴(yán)重的問(wèn)題不是性能了,而是靈活性毯辅“0龋客戶機(jī)和網(wǎng)卡之間沒(méi)有任何軟件中間層過(guò)度,也就意味著不存在負(fù)責(zé)交換轉(zhuǎn)發(fā)功能的I/O棧悉罕,也就不會(huì)有軟件交換機(jī)赤屋。那么如果要想有一臺(tái)server內(nèi)部的軟件交換功能如何實(shí)現(xiàn)呢。業(yè)界的主要做法是把交換功能完全下沉到網(wǎng)卡壁袄,直接在智能網(wǎng)卡上實(shí)現(xiàn)虛擬交換功能类早。這又帶來(lái)了另一個(gè)問(wèn)題,成本和性能的權(quán)衡嗜逻。


圖7 SR-IOV.png

而DPDK 18.05以后的版本似乎也解決了這一靈活性問(wèn)題涩僻,為了充分發(fā)掘標(biāo)準(zhǔn)網(wǎng)卡(區(qū)別于智能網(wǎng)卡)在flow(流)層面上的功能,推出了VF representer栈顷∧嫒眨可以直接將OVS上的流表規(guī)則下發(fā)到網(wǎng)卡上,實(shí)現(xiàn)網(wǎng)卡在VF之間的交換功能萄凤,這樣就實(shí)現(xiàn)了高效靈活的虛擬化網(wǎng)絡(luò)配置室抽。

引用:
全虛擬化、半虛擬化和I/O透?jìng)髦黧w觀點(diǎn)來(lái)自《深入淺出DPDK》
[1] Russell R . virtio : Towards a De-Facto Standard For Virtual I/O Devices[M]. ACM, 2008.
圖引用:
圖1 引用自 IBM developer https://www.ibm.com/developerworks/cn/linux/1402_caobb_virtio/
圖2靡努、4坪圾、5 引用自 “Accelerating the Path to the Guest - Maryam Tahhan and Kevin Traynor, Intel”
圖6 引用自 KVM forum 2017 “virtio: vhost Data Path Acceleration towards NFV Cloud - Cunming Liang, Intel”
圖7 引用自 DPDK官網(wǎng)文檔
https://doc.dpdk.org/guides/prog_guide/switch_representation.html?highlight=representer

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者

  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市惑朦,隨后出現(xiàn)的幾起案子兽泄,更是在濱河造成了極大的恐慌,老刑警劉巖漾月,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件病梢,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡梁肿,警方通過(guò)查閱死者的電腦和手機(jī)蜓陌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)栈雳,“玉大人护奈,你說(shuō)我怎么就攤上這事「缛遥” “怎么了霉旗?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蛀骇。 經(jīng)常有香客問(wèn)我厌秒,道長(zhǎng),這世上最難降的妖魔是什么擅憔? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任鸵闪,我火速辦了婚禮,結(jié)果婚禮上暑诸,老公的妹妹穿的比我還像新娘蚌讼。我一直安慰自己辟灰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布篡石。 她就那樣靜靜地躺著芥喇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凰萨。 梳的紋絲不亂的頭發(fā)上继控,一...
    開(kāi)封第一講書(shū)人閱讀 51,274評(píng)論 1 300
  • 那天,我揣著相機(jī)與錄音胖眷,去河邊找鬼武通。 笑死,一個(gè)胖子當(dāng)著我的面吹牛珊搀,可吹牛的內(nèi)容都是我干的冶忱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼食棕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼朗和!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起簿晓,我...
    開(kāi)封第一講書(shū)人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤眶拉,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后憔儿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體忆植,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年谒臼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了朝刊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蜈缤,死狀恐怖拾氓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情底哥,我是刑警寧澤咙鞍,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站趾徽,受9級(jí)特大地震影響续滋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜孵奶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一疲酌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦朗恳、人聲如沸湿颅。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)肖爵。三九已至,卻和暖如春臀脏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背冀自。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工揉稚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人熬粗。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓搀玖,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親驻呐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子灌诅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

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

  • 在 QEMU/KVM 中,客戶機(jī)可以使用的設(shè)備大致可分為三類: 1. 模擬設(shè)備:完全由 QEMU 純軟件模擬的設(shè)備...
    51reboot閱讀 2,798評(píng)論 0 6
  • 虛擬化技術(shù)概覽KVM簡(jiǎn)介KVM的管理操作 一含末、虛擬化技術(shù)概覽 (一)虛擬化技術(shù)類型: 主機(jī)虛擬化:xen, kvm...
    哈嘍別樣閱讀 1,803評(píng)論 0 5
  • KVM與QEMU 網(wǎng)絡(luò)虛擬化屬于IO虛擬化猜拾,KVM模塊本身不提供任何設(shè)備模擬,模塊在初始化的時(shí)候會(huì)創(chuàng)建特殊設(shè)備文件...
    cb9e58ff5a37閱讀 1,784評(píng)論 0 3
  • 一.虛擬化技術(shù)的介紹 (1)虛擬化技術(shù)類型: 1.主機(jī)虛擬化:xen,kvm.virtualbox.openv2....
    楠人幫閱讀 1,962評(píng)論 0 5
  • 匆匆來(lái)匆匆走佣盒,行程總是走路上挎袜,不知道多少寒來(lái)暑往,多少日月星辰肥惭。始終沒(méi)有停下的時(shí)候盯仪,不知道什么時(shí)候是盡頭。 人活一...
    念影子閱讀 585評(píng)論 0 0