摘要:隨著云計(jì)算的蓬勃發(fā)展和 5G 時(shí)代的到來,虛擬網(wǎng)絡(luò)中對(duì)數(shù)據(jù)流轉(zhuǎn)發(fā)效率的需求也越來越高,但是當(dāng)前所使用的常見網(wǎng)絡(luò)加速技術(shù)已不能滿足日益增長(zhǎng)的需求。文中主要介紹了當(dāng)前虛擬網(wǎng)絡(luò)轉(zhuǎn)發(fā)技術(shù)的基本原理,研究了一種基于 vDPA(vhost 數(shù)據(jù)路徑加速)技術(shù)的優(yōu)化數(shù)據(jù)流轉(zhuǎn)發(fā)的解決方案。通過對(duì)優(yōu)化前后的虛擬網(wǎng)絡(luò)數(shù)據(jù)流轉(zhuǎn)發(fā)性能進(jìn)行對(duì)比測(cè)試,可以看到網(wǎng)絡(luò)帶寬速率在原來的基礎(chǔ)上提高了近一倍,驗(yàn)證了文中設(shè)計(jì)方案的有效性,優(yōu)化了虛擬網(wǎng)絡(luò)轉(zhuǎn)發(fā)性能。
關(guān)鍵詞:虛擬網(wǎng)絡(luò);數(shù)據(jù)流轉(zhuǎn)發(fā);vDPA;性能優(yōu)化
歐陽(yáng)卓玥; 鄒素雯 電子設(shè)計(jì)工程 2022-01-05
5G 時(shí)代的到來,加速了網(wǎng)絡(luò)虛擬化的進(jìn)程。隨著軟件定義網(wǎng)絡(luò)(SDN)和網(wǎng)絡(luò)功能虛擬化(NFV)的快速發(fā)展,云數(shù)據(jù)中心網(wǎng)絡(luò)的架構(gòu)也隨之發(fā)生轉(zhuǎn)變,開始使用虛擬化技術(shù)[1] 。在虛擬網(wǎng)絡(luò)轉(zhuǎn)發(fā)過程中,雖然內(nèi)核模塊可以直接訪問硬件設(shè)備,但是用戶空間應(yīng)用程序需要執(zhí)行系統(tǒng)調(diào)用并在內(nèi)核中執(zhí)行中間步驟,增加了主要任務(wù)的開銷[2] 。基于Intel x86架構(gòu)的數(shù)據(jù)平面開發(fā)套件(Data Plane Development Kit,DPDK)是一套為 Linux 用戶空間應(yīng)用程序提供優(yōu)化庫(kù)的解決方案,可以避免從用戶空間到內(nèi)核態(tài)空間報(bào)文的復(fù)制過程。雖然基于 DPDK 的 OVS 方案在數(shù)據(jù)包處理效率方面相對(duì)于傳統(tǒng)的 Linux數(shù)據(jù)收發(fā)方案有很大提高,但依然無法滿足現(xiàn)在日益增長(zhǎng)的對(duì)網(wǎng)絡(luò)轉(zhuǎn)發(fā)性能的需求。vhost數(shù)據(jù)路徑加速(vhost Data Path Acceleration, vDPA)技術(shù)在基于 DPDK 的 OVS 方案的基礎(chǔ)上,通過優(yōu)化 virtio數(shù)據(jù)平面的 vhost數(shù)據(jù)路徑,使得數(shù)據(jù)流轉(zhuǎn)發(fā)達(dá)到線速性能,提升了虛擬網(wǎng)絡(luò)轉(zhuǎn)發(fā)效率。
1 虛擬網(wǎng)絡(luò)轉(zhuǎn)發(fā)技術(shù)
1.1 DPDK虛擬化技術(shù)
DPDK(Data Plane Development Kit)是 Intel 提 供的基于 x86 架構(gòu)的數(shù)據(jù)平面開發(fā)工具集[3] ,主要以 Intel Architecture(IA)多核處理器為目標(biāo)平臺(tái),實(shí)現(xiàn)了高性能數(shù)據(jù)包處理。DPDK 是一個(gè)全面的網(wǎng)絡(luò)內(nèi)核旁路解決方案,不僅支持眾多的網(wǎng)卡類型,也有多種內(nèi)存和 CPU 調(diào)度的優(yōu)化方案。 DPDK 的主要模塊包括核心庫(kù) Core Libs、PMD 庫(kù) 、Classify 庫(kù) 和 QoS 庫(kù) 等 [4] 。 核 心 庫(kù) Core Libs 是 DPDK 程序的基礎(chǔ),包括系統(tǒng)抽象層、內(nèi)存管理、無鎖環(huán)、緩存池等;PMD 庫(kù)提供全用戶態(tài)的驅(qū)動(dòng),通過輪詢和線程綁定得到極高的網(wǎng)絡(luò)吞吐,支持各種物理和虛擬網(wǎng)卡;Classify 庫(kù)支持精確匹配、最長(zhǎng)匹配和通配符匹配,提供常用包處理的查表操作;QoS 庫(kù)提供網(wǎng)絡(luò)服務(wù)質(zhì)量相關(guān)組件,如限速和調(diào)度等。 DPDK 解決了 IA 多核處理器對(duì)高性能數(shù)據(jù)包處理的需求[5] ,其核心思想主要包括以下幾個(gè)方面: ①輪詢模式[6] ,DPDK 輪詢網(wǎng)卡檢測(cè)是否有網(wǎng)絡(luò)報(bào)文的接收或者發(fā)送,避免了傳統(tǒng)網(wǎng)卡驅(qū)動(dòng)的中斷上下文的開銷;②用戶態(tài)驅(qū)動(dòng),DPDK 通過用戶態(tài)驅(qū)動(dòng)的開發(fā)框架在用戶態(tài)操作設(shè)備及數(shù)據(jù)包,避免了不必要 的 用 戶 態(tài) 和 內(nèi) 核 態(tài) 之 間 的 數(shù) 據(jù) 拷 貝 和 系 統(tǒng) 調(diào)用;③親和性與獨(dú)占,利用線程的 CPU 親和綁定的方式,將特定的線程指定在固定的核上運(yùn)行,避免線程在不同核之間頻繁切換帶來的開銷,提高并行處理的吞吐量;④降低訪問存儲(chǔ)開銷,DPDK 使用大頁(yè)技術(shù)降低 TLB(Translation Lookaside Buffer)未命中率,利用預(yù)取命令提高緩存的訪問率等。
1.2 Open vSwitch及相關(guān)技術(shù)
Open vSwitch(OVS)主要用于云環(huán)境中虛擬網(wǎng)絡(luò)的管理,使得對(duì)網(wǎng)絡(luò)狀態(tài)的流量監(jiān)控變得更容易。 OVS 是一個(gè)高質(zhì)量的多層虛擬交換機(jī),滿足了不同虛擬化平臺(tái)間的移植性。OVS 支持可編程自動(dòng)化網(wǎng)絡(luò)大規(guī)模部署及拓展,能夠支持標(biāo)準(zhǔn)網(wǎng)絡(luò)管理接口和協(xié)議,還支持與其他現(xiàn)有虛擬交換方案的混合部署。OVS 在物理服務(wù)器上創(chuàng)建一個(gè)或多個(gè) vSwitch 供各個(gè)虛擬機(jī)接入,將接入到 OVS 的虛擬機(jī)分配到不同的 VLAN 中實(shí)現(xiàn)網(wǎng)絡(luò)隔離。 Open vSwitch產(chǎn)生的主要目的是管理和配置虛擬機(jī)網(wǎng)絡(luò),如圖 1所示,在軟件定義網(wǎng)絡(luò)的架構(gòu)下,OVS 作為SDN交換機(jī),向上連接控制器,向下連接主機(jī),同時(shí) OVS 交換機(jī)可以與物理交換機(jī)通信,相互交流數(shù)據(jù)。OVS 的基本功能主要包括:①自動(dòng)化控制:OVS 支持 Open Flow[7] ,用戶可以通過 ovs- ofctl 使用 Open Flow協(xié)議連接交換機(jī),實(shí)現(xiàn)查詢和控制;②QoS:支持擁塞管理和流量整形;③安全:支持 VLAN 隔離、流量過濾等功能,保證了虛擬網(wǎng)絡(luò)的安全性;④監(jiān)控:支持 Netflow、SFlow、SPAN、RSPAN 等網(wǎng)絡(luò)監(jiān)控技術(shù)。
1.3 基于DPDK的OVS轉(zhuǎn)發(fā)技術(shù)
雖然 OVS 作為虛擬交換機(jī)已經(jīng)進(jìn)行了優(yōu)化,但是它在網(wǎng)絡(luò)功能虛擬化場(chǎng)景下的轉(zhuǎn)發(fā)性能、時(shí)延等方面還需要提高。Intel 利用 DPDK 的加速思想,通過配置軟件架構(gòu),使得從 OVS 連接的某個(gè)網(wǎng)絡(luò)端口接收到的報(bào)文不需要 openvswitch.ko 內(nèi)核態(tài)的處理,報(bào) 文 直 接 通 過 DPDK PMD 驅(qū) 動(dòng) 到 達(dá) 用 戶 態(tài) ovsvswitchd里[8] ,對(duì) OVS的轉(zhuǎn)發(fā)性能進(jìn)行了優(yōu)化。 DPDK加速的 OVS利用了 DPDK的 PMD驅(qū)動(dòng)、向量指令、大頁(yè)等技術(shù),來優(yōu)化用戶態(tài)的數(shù)據(jù)通路,直接繞過內(nèi)核態(tài)的數(shù)據(jù)通路,加速物理網(wǎng)口和虛擬網(wǎng)口的報(bào)文處理速度。圖 2 顯示了基于 DPDK 加速的 OVS 轉(zhuǎn)發(fā)流程圖。
2 vDPA技術(shù)簡(jiǎn)介 2.1 vDPA技術(shù)
vDPA(vhost Data Path Acceleration)虛擬數(shù)據(jù)路徑加速,主要目的是標(biāo)準(zhǔn)化網(wǎng)卡的 SRIOV 數(shù)據(jù)通路,讓 SRIOV 的虛擬功能可以支持 virtio ring 的 layout,并且在 Guest的空間可以使用標(biāo)準(zhǔn)的 virtio驅(qū)動(dòng)。 vDPA 本質(zhì)上是一種使用 virtio ring layout 標(biāo)準(zhǔn)化 NIC SRIOV 數(shù)據(jù)平面并將單個(gè)標(biāo)準(zhǔn) virtio 驅(qū)動(dòng)程序放置在與任何供應(yīng)商實(shí)現(xiàn)分離的方法,同時(shí)向其中添加了通用控制平面來支持它[9] 。因?yàn)?vDPA 是 SRIOV 之上的抽象層,因此它還可以支持可擴(kuò)展 IOV 等新興技術(shù)。 vDPA 有潛力成為為虛擬機(jī)提供線速以太網(wǎng)接口的解決方案,它具有以下優(yōu)勢(shì):①開放的公共規(guī)范:任何人都可以看到、使用和參與更新規(guī)范(virtio 規(guī)范),而不用鎖定特定的供應(yīng)商;②線速性能:與 SRIOV 類似,中間沒有 memory 地址翻譯;③單個(gè)通用 NIC 驅(qū)動(dòng)程序:可以將 virtio-net 驅(qū)動(dòng)程序作為標(biāo)準(zhǔn)驅(qū)動(dòng)程序,和用于存儲(chǔ)設(shè)備的 NVMe 驅(qū)動(dòng)程序一樣,通過 vDPA 框架支持不同廠家的網(wǎng)卡。
2.2 vDPA DPDK設(shè)計(jì)
DPDK 基于 vhost-user 的協(xié)議為 vDPA 技術(shù)提供了一個(gè)后端實(shí)現(xiàn)。在內(nèi)核里,DPDK 主要基于 mdev 框架實(shí)現(xiàn)。DPDK 中設(shè)計(jì)增加兩個(gè)新組件:vDPA 驅(qū)動(dòng)和用戶態(tài)驅(qū)動(dòng),來控制 vDPA 設(shè)備硬件;vDPA 框架提供 vhost- user socket 和 vDPA 驅(qū)動(dòng)的連接。vDPA DPDK 框架提供一系列的設(shè)備回調(diào)函數(shù),由網(wǎng)卡廠家實(shí)現(xiàn),這些函數(shù)被 vhost-user 調(diào)用來創(chuàng)建數(shù)據(jù)路徑[10] 。vDPA 在 vhost-user 庫(kù)中添加選擇性的數(shù)據(jù)路徑 支 持 ,將 設(shè) 備 驅(qū) 動(dòng) 程 序 與 vhost socket 關(guān) 聯(lián) ,將 vswitch 添加為端口代表,同時(shí)能將信息返回到數(shù)據(jù)路徑中。在應(yīng)用場(chǎng)景中使用 vDPA 設(shè)備,其數(shù)據(jù)路徑還是全硬件卸載,而控制路徑可以使用 vDPA API。相對(duì)于全卸載的 virtio PMD 模式,這種方式的好處是更加靈活,可以切換到其他使用 vDPA 的硬件設(shè)備或回到全軟件路徑,同時(shí)也可以實(shí)現(xiàn)對(duì)熱遷移的支持并實(shí)現(xiàn)標(biāo)準(zhǔn)化。
3 基于vDPA轉(zhuǎn)發(fā)優(yōu)化的實(shí)現(xiàn)
自 DPDK18.05 版本開始,DPDK 實(shí)現(xiàn)了對(duì) vDPA的支持。它基于 vhost-user協(xié)議,為前端提供統(tǒng)一的控制路徑[11] 。在 DPDK 中支持 vDPA 功能,使得內(nèi)核中基于 MDEV 框架的 vDPA 框架能更標(biāo)準(zhǔn)地實(shí)現(xiàn)。如圖 3 所示,為運(yùn)用 vDPA 技術(shù)的數(shù)據(jù)流在各個(gè)模塊中的轉(zhuǎn)發(fā)流程圖。硬件層中有一個(gè) vDPA 設(shè)備,位于網(wǎng)卡中虛擬功能(Virtual Function,VF)和物理功能(Physical Function,PF)中間的模塊,該設(shè)備使用其專有的控制路徑直接填充虛擬隊(duì)列。virtio-net 設(shè)備實(shí)現(xiàn)了驅(qū)動(dòng)底層 vDPA 設(shè)備的實(shí)際功能。這個(gè) vDPA 設(shè)備采用將 virtio 數(shù)據(jù)路徑卸載到該設(shè)備的方式 。 virito- mdev 設(shè) 備 通 過 自 身 的 API 接 口 傳 輸 virtio-mdev命令[12] ,并執(zhí)行命令轉(zhuǎn)換、仿真或調(diào)解。
vDPA DPDK 框架引入了一組由供應(yīng)商 vDPA 設(shè)備驅(qū)動(dòng)程序?qū)崿F(xiàn)的回調(diào),由 vhost-user庫(kù)調(diào)用以設(shè)置數(shù)據(jù)路徑,在 rte_vdpa_dev_ops 結(jié)構(gòu)體中可以看到,這些回調(diào)中一半與標(biāo)準(zhǔn) vhost-user 協(xié)議請(qǐng)求具有一一對(duì)應(yīng)的關(guān)系,例如獲取和設(shè)置 virito功能[13] 、獲取受支持的 vhost-user 協(xié)議功能等。其中 dev_conf 回調(diào)函數(shù)用于設(shè)置和啟動(dòng)設(shè)備,并在 vhost-user層接收到設(shè)置和啟用數(shù)據(jù)路徑所需的所有信息后被調(diào)用。在此回調(diào)函數(shù)中,vDPA 設(shè)備驅(qū)動(dòng)程序?qū)⒃O(shè)置環(huán)地址、 DMA mapping并啟動(dòng)設(shè)備[14] 。
4 性能測(cè)試
在 Linux環(huán)境中對(duì)虛擬機(jī)之間的通信進(jìn)行測(cè)試,主要是 vDPA 技術(shù)使用前后對(duì)網(wǎng)絡(luò) I/O 性能的對(duì)比測(cè)試。在兩臺(tái)相同的服務(wù)器中搭建實(shí)驗(yàn)環(huán)境,服務(wù)器的配置如表 1所示。
在第一臺(tái)服務(wù)器中搭建基于 DPDK 加速的 OVS 實(shí)驗(yàn)環(huán)境,在第二臺(tái)服務(wù)器中搭建 vDPA 的實(shí)驗(yàn)環(huán)境,分別在兩種實(shí)驗(yàn)環(huán)境中創(chuàng)建虛擬機(jī)進(jìn)行通信測(cè)試。實(shí)驗(yàn)環(huán)境中使用 iperf命令行作為網(wǎng)絡(luò)性能的測(cè)試工具,可以測(cè)試兩臺(tái)虛擬機(jī)之間的帶寬性能[15] 。在 DPDK-OVS 實(shí)驗(yàn)環(huán)境中,配置、編譯 DPDK 和 OVS 并進(jìn)行大頁(yè)設(shè)置和 VFIO[16] 。vDPA 實(shí)驗(yàn)環(huán)境中的測(cè)試方案如圖 4 所示,在環(huán)境中修改.config 文件進(jìn)行配置,用 Linux 命令啟動(dòng) librte_pmd_mlx5_vdpa 程序,使 DPDK 應(yīng)用程序與 libibverbs 連接。然后創(chuàng)建兩臺(tái)虛擬機(jī),其中一臺(tái)作為客戶端,另一臺(tái)作為服務(wù)端,從客戶端向服務(wù)端發(fā)送數(shù)據(jù),數(shù)據(jù)直接通過數(shù)據(jù)平面到達(dá)網(wǎng)卡進(jìn)行轉(zhuǎn)發(fā),進(jìn)一步提高了數(shù)據(jù)轉(zhuǎn)發(fā)效率。實(shí)驗(yàn)中分別測(cè)試 TCP 協(xié)議和 UDP 協(xié)議在虛擬機(jī)之間的傳輸帶寬值。
對(duì)實(shí)驗(yàn)測(cè)試結(jié)果進(jìn)行整理,TCP 轉(zhuǎn)發(fā)測(cè)試數(shù)據(jù)如圖 5所示,UDP 轉(zhuǎn)發(fā)測(cè)試數(shù)據(jù)如圖 6所示。可以看到使用 vDPA 技術(shù)優(yōu)化后網(wǎng)絡(luò)帶寬在原來 DPDKOVS基礎(chǔ)上幾乎增加了一倍。
5 結(jié)束語
文中首先對(duì)當(dāng)前虛擬網(wǎng)絡(luò)轉(zhuǎn)發(fā)技術(shù)進(jìn)行了分析研究,提出了一種新的基于 vDPA 技術(shù)的虛擬網(wǎng)絡(luò)轉(zhuǎn)發(fā)性能優(yōu)化設(shè)計(jì)方案并進(jìn)行實(shí)現(xiàn),通過加速數(shù)據(jù)路徑達(dá)到優(yōu)化數(shù)據(jù)流轉(zhuǎn)發(fā)過程的目的,通過在實(shí)驗(yàn)環(huán)境中進(jìn)行優(yōu)化前后的對(duì)比測(cè)試驗(yàn)證了該解決方案的可行性。
論文指導(dǎo) >
SCI期刊推薦 >
論文常見問題 >
SCI常見問題 >