暢海峰,嵩 天,楊雅婷
北京理工大學 計算機學院,北京100081
網絡功能虛擬化[1](Network Functions Virtualization,NFV)的目標在于:使用基于x86 的通用標準服務器代替傳統網絡中的專用電信網元設備,通過虛擬化技術實現軟硬件解耦,使網絡功能不再依賴于專用硬件。
然而,與傳統專用電信設備相比,將網絡功能(Network Functions,NFs)以軟件形式部署在虛擬環境中會導致網絡功能報文處理能力下降。虛擬化技術的固有性能損失會直接影響NFs性能。此外,基于通用設備的軟件NFs 與專用電信設備之間的報文處理能力仍存在較大差距。DPDK[2](Intel Data Plane Development Kit)是Intel 提供的數據平面開發工具集,專注于網絡數據包的高性能處理,已在很多場景中被用來加速虛擬網絡功能。
NFV使用通用標準服務器作為統一計算平臺,在有限物理資源條件下,如何在合理分配資源的前提下部署虛擬網絡功能(Virtual Network Function,VNF),以滿足用戶各種業務需求,是網絡功能發展過程中重要的挑戰之一。現有網絡功能虛擬化資源分配的相關研究多數是從編排層面提出部署方案,決定VNFs 的物理部署位置。本文則考慮實際部署環節,針對單物理節點部署多VNFs場景,采用DPDK加速虛擬網絡功能,并研究網絡功能虛擬化中的單節點資源分配問題(NFV Single Node Resource Allocation,NFV-SNRA)。
NFV將網絡功能從專用網元設備中抽象出來,以軟件形式實現,并部署在通用標準服務器上,從而實現網絡功能的靈活部署。NFV架構[3]由三部分構成:網絡服務、網絡功能虛擬化基礎設施(Network Functions Virtualization Infrastructure,NFVI)以及網絡功能虛擬化管理和協調控制器。
運營商通過軟件方式定制網絡功能,通過組織一系列VNFs 實現特定的網絡服務,從而更靈活快速地部署新服務。NFV 架構使用通用標準服務器作為統一計算平臺,運營商能夠更靈活高效地利用虛擬化基礎設施物理資源[4]。
目前NFV已被學術界廣泛接受,具有美好的前景,但NFV技術整體上仍處于起步階段,在性能、資源分配等方均面臨挑戰。
2.1.1 性能
VNFs通常運行在虛擬環境中,相較宿主設備,虛擬設備(例如,虛擬磁盤、虛擬網卡)的訪問性能明顯下降。Passthrough 技術可以支持虛擬機直接訪問外圍設備,提高虛擬機對外圍設備的訪問性能。但該技術下,設備以獨占方式分配給某個客戶域,無法在多客戶域之間共享。SR-IOV[5](Single Root I/O Virtualization)規范定義了一個標準化的硬件虛擬化機制,原生地支持多客戶機共享物理設備,使設備資源得到充分利用。
網絡I/O 能力是VNF 性能的核心關鍵。傳統模式中,Linux 內核態網卡驅動基于異步中斷模式處理網絡讀寫事件。DPDK 則采用用戶態網卡驅動基于輪詢(PMD)或者輪詢中斷混雜模式處理網絡讀寫事件。相較中斷方式,輪詢方式避免了上下文切換造成的性能損失。另一方面,用戶態PMD 驅動將網卡設備直接映射到用戶空間,通過旁路Linux內核網絡協議棧,減少內存拷貝次數,進而提升報文轉發能力。
Passthrough 技術、SR-IOV 技術以及DPDK 從多個不同方面縮小了基于通用設備的VNF與專用電信設備之間的性能差距。
2.1.2 資源分配
網絡功能虛擬化資源分配問題[6-9](Network Functions Virtualization Resource Allocation,NFV-RA)一直是NFV發展過程中的研究熱點之一。相關研究以QoS、利潤最高、容錯、負載平衡、節省能源等為目標,同時考慮性能、能耗、安全等多方面因素,解決構建虛擬網絡功能鏈[10-12]、部署虛擬網絡功能[13-15]、調度虛擬網絡功能[16]等方面的資源分配問題。
其中,部署虛擬網絡功能階段解決如何將VNFs 映射到NFVI 中的物理節點,虛擬網絡功能部署問題已被證明是NP 難問題。在網絡規模較小時,使用線性規劃能夠得到最優解。但網絡規模越大,線性規劃模型越復雜,無法在可接受時間內得到全局最優解。使用啟發式算法或元啟發式算法能夠在線性時間內得到近似最優解。
為解決網絡功能部署和編排問題,Chi 等[17]提出一種基于3-tire 樹形結構的VNF 部署和流量調度算法。Cohen等[18]對VNF部署問題進行線性約束建模,提出一種近似最優的部署算法;Sang 等[19]將VNF 部署問題規約為集合覆蓋問題,基于貪心算法提出一種可驗證的高效部署方案。段通等[20]考慮硬件加速資源,提出一套VNF硬件加速資源編排機制。然而,上述研究都是從編排和部署方案層面分析NFV 資源分配問題,卻鮮有涉及VNF 具體部署環節,即對于部署到同一個物理節點上的所有VNFs,如何更高效地共享該節點的物理資源。畢軍等[21]考慮VNF并行加速,根據網絡功能之間的依賴性,提出一個高性能編排框架,但仍屬于編排設計層面,未解決具體的節點資源分配問題。
本文考慮實際部署環節,針對單物理節點部署多VNFs場景,使用DPDK加速虛擬網絡功能,研究虛擬網絡功能的資源分配問題,使用最少的物理資源滿足所有VNFs性能需求。
通過實驗深入分析DPDK 對虛擬網絡功能的加速效果,測試內核協議棧方式和DPDK方式的網絡包轉發性能及CPU資源消耗情況。
基于2 臺配備有兩塊Intel?Xeon?E3-1220 v3 @3.10 GHz CPU,32 GB 內存和一塊雙端口Intel?82599 10 Gbit網卡的服務器組成實驗平臺,進行性能測試。虛擬機以Passthrough 方式獲得網卡的訪問權限。內核協議棧發包程序采用Linux 內核發包模塊pktgen,內核協議棧收包程序基于libpcap實現;DPDK收發包程序基于DPDK-16.11.3實現。
圖1(a)為普通虛擬網絡功能配置結構,圖1(b)為經過Passthrough、DPDK加速后的虛擬網絡功能配置結構。普通配置結構中,物理網卡和虛擬網卡均由Linux內核驅動控制;后者以Passthrough方式將網卡直接分配給虛擬機,并通過DPDK用戶態驅動將網卡直接映射到用戶空間。
網絡包發送測試結果如圖2所示。

圖1 (a) 普通配置

圖1 (b) 經Passthrough和DPDK加速的配置

圖2 不同包長的網絡包發送性能
對比虛擬機中DPDK 和pktgen 的網絡包速發送速率。不同包長情況下,pktgen 發送速率均處于較低水平;而DPDK發送速率在不同包長情況下變化顯著。包長越小,pktgen與DPDK的性能差距越明顯。發送64 B小包時,DPDK 網絡包發送速率為pktgen 的7.7 倍。發送1 500 B 大包時,DPDK 發送速率提升約2.5%。實驗結果表明,在虛擬機中,包長越小,DPDK對網絡包發送性能提升越大,當包長達到最大時,二者性能間幾乎不存在差距。
對比物理機中DPDK 的網絡包發送速率與10 Gb鏈路的理論帶寬值。物理機中DPDK 的發送速率接近10 Gb鏈路的理論帶寬。最差情況是發送64 B小包,此時DPDK的發送速率為10 Gb鏈路理論帶寬的97.2%。實驗結果表明,物理機中DPDK 的發送速度幾乎達到10 Gb鏈路的理論帶寬。
圖3 顯示libpcap 與DPDK 在不同環境、不同包長情況下的網絡包接收速率。與圖2 中規律相似,相較libpcap,DPDK 處理小包的優勢明顯。在虛擬機中,DPDK接收64 B小包速率是libpcap的18倍。

圖3 不同包長的網絡包接收性能
上述實驗結果表明,DPDK能夠顯著提升虛擬網絡功能的網絡包轉發性能。
測試pktgen和DPDK的CPU資源消耗情況,對比在虛擬環境中不同包長、不同發送速率情況下,兩種方式的CPU占用率。
如圖4所示,pktgen的CPU占用率隨發送速率增加而升高,當發送速率超過9.95 kp/s 時,其CPU 占用率為100%;DPDK的CPU占用率始終為100%。

圖4 pktgen和DPDK的CPU占用率
綜上,DPDK 能夠更好地處理高負載網絡,但在處理低負載網絡時,CPU 有效利用率低。基于以上發現,針對不同網絡負載大小,采用不同方式(Linux 內核或DPDK)實現的VNF 實例。負載較低時,采用傳統基于Linux內核實現的實例,使用較低CPU資源即可滿足網絡負載;負載較高時,傳統方式VNF實例的CPU占用率升高,并發生頻繁丟包,此時切換采用基于DPDK 實現的VNF實例。
針對單物理節點部署多VNFs場景,如圖5所示,在考慮利用DPDK加速虛擬網絡功能的基礎上,提出一種基于貪心算法的啟發式資源分配方法,保證虛擬網絡功能性能的同時,降低CPU資源消耗。

圖5 單節點部署多個VNFs
針對網絡流量負載的潮汐現象,提出一種基于網絡負載的VNF 實例自動切換方案,根據實時網絡負載自動切換VNF實例,滿足網絡負載需求的同時,降低CPU計算資源消耗。
DPDK 能顯著提升VNF 的轉發性能,其CPU 親和性特點要求特定任務只在特定CPU 核上運行。然而,普通部署方法中,虛擬CPU 核與物理CPU 核之間的對應關系具有不確定性,這導致DPDK特定任務實際綁定的物理CPU 核不固定,違背了DPDK 的CPU 親和性原則,從而造成性能損失。
基于上述發現,提出一種基于貪心算法的啟發式資源分配算法,確定虛擬CPU與物理CPU的對應關系,并在保證虛擬網絡功能性能需求的同時,將CPU 資源占用降低到最小。
4.1.1 問題描述
NFV-SNRA問題相關定義如下:
(1)F={f1,f2,…,fm} ,F 表示部署在一個物理節點上的所有虛擬網絡功能集合。|F|=m ,表示該物理節點共部署m 個虛擬網絡功能。
(2)R={r1,r2,…,rn},R 表示物理節點各CPU 核的計算資源量,可用CPU核數為n 個。
(5)Xij表示是否將虛擬網絡功能fj部署在CPU核i 上,1表示是,0表示否。
(6)L={l1,l2,…,ln},L 表示一個可行解,li表示CPU核i 上部署的虛擬網絡功能集合。
(7)E(i)表示CPU 核i 上是否部署了虛擬網絡功能。若CPU 核i 沒有被分配給任何虛擬網絡功能,則E(i)為0;否則為1,表示CPU 核i 上至少部署了一個虛擬網絡功能。

NFV-SNRA 所解決的問題是,在滿足所有VNF 需求的前提下占用最少CPU資源,形式化描述如下:
目標:

滿足:

其中,公式(3)表示,部署在CPU核i 上所有虛擬網絡功能的CPU 需求量之和不超過該CPU 核的CPU 資源量。公式(4)表示,所有虛擬網絡功能都應得到資源分配,即滿足所有虛擬網絡功能的CPU資源需求。目標是使用最少CPU核。
4.1.2 困難性分析
集合覆蓋問題是一個經典NP 難問題,通過將集合覆蓋問題規約到NFV-SNRA 問題,證明NFV-SNRA 問題是NP難類型。
集合覆蓋問題中,集合U={e1,e2,…,em}共有m 個元素,Φ={u1,u2,…,un}是集合U 的n 個子集,Φ 中所有子集的并集等于集合U 。其目標是使用最少子集ui,使其并集等于U 。
以下證明NFV-SNRA是NP難問題。
證明 給定一個集合覆蓋問題實例(U,Φ),構造一個NFV-SNRA問題實例(F,S,C)。對集合U 中的每個元素ej,構造一個虛擬網絡功能fj。對Φ 中的每個子集ui,構造一個VNF集合li,表示在CPU核i 上部署集合li中的所有VNFs。集合S 表示CPU 核負載情況,si表示CPU 核i 當前可用資源量。NFV-SNRA 問題的目標是,使用最少CPU 核滿足所有VNFs 需求,即使用最少集合li覆蓋所有fj。這與集合覆蓋問題使用最少子集ui覆蓋U 中所有元素ej的目標一致。由此證明,NFV-SNRA是NP難問題。
4.1.3 基于貪心算法的啟發式資源分配算法
對于集合覆蓋問題,貪心算法能夠在多項式時間內得到近似最優解,本節提出一種基于貪心算法的啟發式資源分配算法。
假設,某物理節點需部署m 個虛擬網絡功能,用集合F 表示。物理節點當前CPU 負載為S0。各虛擬網絡功能的最大CPU 占用率為C0。集合L 表示CPU 資源分配方案,初始值為空。集合U 表示未被分配的虛擬網絡功能集合,初始值為F。
基于貪心算法,每次選擇包含未分配VNFs 最多的集合,直到所有VNFs都得到資源分配。
算法1 VNF-SNRA啟發式資源分配算法
輸入:虛擬網絡功能集F、虛擬網絡功能最大CPU 占用率C0、物理節點CPU核負載情況S0。
輸出:VNF資源分配方案L。
1. 令集合Φ 為集合F 的所有子集集合。
2. 對于Φ 中的元素uk,若所有CPU核si都無法滿足uk中所有VNFs的CPU需求之和,則將uk從Φ 中移除。
3.令U 為未分配的VNFs 集合。初始化U=F。令li∈L,i=1,2,…,n 為空集。
4. while U ≠? do
5. 選擇元素個數最多的子集u*,依據S0判斷是否存在CPU 核能夠滿足u*中所有VNFs 的需求,若存在一個或多個滿足需求的CPU核,選擇數值最小的核i*。
6. 令li*=u*,更新
7. 更新集合Φ,刪除Φ中所有包含子集u*中元素的子集。
8.更新集合U ,移除子集u*所包含的所有元素。
9.end while
由3.2節實驗結果可知,網絡負載較低時,傳統方式在保證VNF性能的同時,消耗CPU資源更少,但隨著網絡負載升高,傳統方式將消耗更多CPU資源,同時會產生可靠性問題,例如頻繁丟包;而DPDK 能更加可靠地處理高負載網絡,但在網絡負載較低時,CPU 有效利用率低。
綜上所述,考慮到網絡功能流量負載的潮汐現象,提出一種基于網絡負載的VNF實例自動切換方案。網絡負載較低時,采用基于Linux 內核方式的VNF 實例,以較少CPU資源處理低負載網絡。當網絡負載超過一定閾值時,使用DPDK方式的VNF實例,高速處理網絡包。基于網絡負載的VNF實例自動切換方案相關定義如下:(1)Ht={},表示t 時刻虛擬網絡功能fj的網絡負載。
(2)H*={} ,表示虛擬網絡功能fj的實例切換閾值。
切換VNF 實例后,該VNF 對應的CPU 資源需求量隨之改變。更新集合C 后,根據算法1 對該節點的VNFs重新進行資源分配。
對單物理節點部署多VNFs 進行模擬實驗,評估資源分配算法和自動切換方案的效果。基于兩臺配備有兩塊Intel?Xeon?E3-1220 v3@3.10 GHz CPU,32 GB內存,一塊雙端口Intel?82599 10 Gbit網卡和一塊四端口Intel?I350 1 Gbit網卡的服務器組成實驗平臺,進行模擬實驗。服務器運行環境為CentOS7,使用KVM 虛擬化技術運行VNF。
在單節點啟發式資源分配算法實驗中,以一個物理節點部署6個VNF為例,每個VNF實例分別部署在獨立的虛擬機中。每個虛擬機分配4個CPU核,以Passthrough方式訪問網卡端口,其中VNF1和VNF2對應萬兆網口,VNF3~VNF6 對應千兆網口。以網絡包發送速率作為VNF性能測量指標。
實驗采用普通部署方法和算法1兩種方式進行VNFs部署。對兩種不同的部署方法,分別進行10次實驗,每次實驗持續10 min,記錄VNFs實例的網絡包發送速率,取10次實驗數據的平均值。
實驗結果如圖6 所示,使用啟發式資源分配算法,VNF1的性能提高了30%,VNF2、VNF3和VNF4的性能提高了10%。普通部署方法中,由宿主操作系統決定虛擬CPU與物理CPU的綁定關系,但這種綁定并不固定,在綁定關系發生變化時,會產生上下文切換、cache 失效,從而造成性能損失。VNF5 和VNF6 的性能略有下降,但都不超過3%。需要說明的一點是,凡是完成部署的VNFs 實例,分配給VNFs 實例的CPU 資源總能滿足其當前所需。

圖6 兩種部署方案的VNF網絡包發送性能
在VNF 實例自動切換方案實驗中,發送端使用基于DPDK-16.11.3 實現的發包工具,模擬潮汐規律產生網絡流量,發送流量從100~600 kp/s潮汐變化,如圖7所示。接收端使用基于libpcap 和DPDK 實現的收包工具模擬VNF 實例,記錄虛擬網絡功能實例的網絡包接收速率、丟包率以及CPU占用率。

圖7 發送端發送潮汐流量
分別進行以下三組實驗:
(1)VNF實例全部采用libpcap方式實現;
(2)VNF實例全部采用DPDK方式實現;
(3)VNF實例根據流量負載自動切換。
如表1 所示,數據包長為1 500 B 時,libpcap的最大接收速率為287 656 p/s,僅為10 Gb 鏈路理論帶寬的35.0%;當數據包長為64 B 時,libpcap 的最大接收速率756 550 p/s 僅為10 Gb 鏈路理論帶寬的5.1%。本實驗以300 kp/s 作為切換閾值,確保VNF 實例能夠處理300 kp/s 以上的高速網絡。切換閾值可以根據具體場景、具體目標進行設置。

表1 libpcap網絡包接收性能
圖8 顯示接收端使用libpcap 方式VNF 實例的收包情況,負載為500~600 kp/s區間時,平均丟包率為16.9%;負載為100~200 kp/s區間時,平均丟包率為1.7%。

圖8 接收端使用libpcap實現的VNF實例
圖9 顯示接收端使用DPDK 方式VNF 實例的收包情況,在實驗期間均未發生網絡包丟失。

圖9 接收端使用DPDK實現的VNF實例
圖10 顯示接收端基于網絡負載自動切換VNF實例的收包情況。實驗中,切換閾值設為300 kp/s。網絡負載在100~200 kp/s區間時,采用libpcap方式實現的VNF實例;負載在500~600 kp/s 區間時,采用DPDK 方式實現的VNF 實例。實驗結果顯示,在高負載區間內未發生網絡包丟失。

圖10 接收端自動切換VNF實例
圖11 為三種方式的CPU資源消耗情況。libpcap方式下,CPU 占用率隨網絡負載線性變化。DPDK 方式下,CPU 占用率始終為100%。自動切換方式下,使用libpcap方式VNF 實例時,CPU 占用率較低,使用DPDK方式VNF實例時,CPU占用率為100%。

圖11 三種方式的CPU占用率
基于上述實驗結果,得出以下結論:
(1)網絡負載較高時,libpcap方式的VNF實例會消耗更多CPU資源,且伴隨頻繁丟包現象。
(2)DPDK 方式實現的VNF 實例CPU 占用率始終為100%,在網絡負載較低時浪費CPU資源。
(3)自動切換方案在網絡負載較低時采用libpcap方式的VNF 實例,以較低CPU 資源消耗處理低負載網絡;網絡負載較高時,采用DPDK 方式的VNF 實例,以較高CPU資源消耗高效處理高網絡負載,相較libpcap,性能提升了20%。
綜上所述,本文所提基于網絡負載的VNF 實例自動切換方案能夠在保證VNF 報文處理性能的同時,降低CPU資源消耗。
首先分析了NFV技術在性能和資源分配方面遇到的挑戰。然后,通過實驗測試了DPDK 對VNF 的加速效果及對CPU 資源的利用情況。實驗結果顯示,在虛擬環境中使用DPDK,網絡包接收速率是傳統方法的18倍,網絡包發送速率是傳統方法的7.7倍。
在此基礎上,針對單物理節點部署多VNFs場景,提出了一種基于貪心算法的啟發式資源分配算法。實驗結果顯示,所提算法能夠顯著提升VNF實例性能,提升10%~30%。
考慮到網絡負載的潮汐現象,提出了一種基于網絡負載的VNF 實例自動切換方案。實驗結果顯示,該方案能夠在保證VNF 報文處理性能的同時,降低CPU 資源消耗,在高網絡負載情況下,VNF性能較普通方式提高了20%。
總的來說,本文以高效利用物理節點CPU 計算資源為優化目標進行方法設計。在未來的工作中,將會引入存儲資源、帶寬資源等其他資源因素,進行更全面的資源分配研究。