張宇巍,曾 一,楊燕寧
(重慶大學 計算機科學與工程學院,重慶 400000)
基于VPP的虛擬路由器數(shù)據(jù)平面加速方法①
張宇巍,曾 一,楊燕寧
(重慶大學 計算機科學與工程學院,重慶 400000)
本文提出了一種使用VPP對虛擬路由器數(shù)據(jù)平面加速的方法,此方法將數(shù)據(jù)平面與控制平面分開,然后將數(shù)據(jù)平面的轉(zhuǎn)發(fā)工作轉(zhuǎn)移到Linux用戶空間下的VPP上面,并通過監(jiān)聽控制平面信息,實現(xiàn)數(shù)據(jù)平面路由表的更新.通過此種方法,可消除虛擬路由器在報文轉(zhuǎn)發(fā)速率上的瓶頸,使得使用標準x86平臺服務器替代專用網(wǎng)絡設備成為可能,從一定程度上促進了網(wǎng)絡功能虛擬化的發(fā)展,使得網(wǎng)絡資源更加具有彈性,易于管理.
虛擬路由器; 網(wǎng)絡功能虛擬化; 計算機網(wǎng)絡; VPP
在過去的十幾年里,互聯(lián)網(wǎng)已經(jīng)成為整個社會的基本支柱之一,伴隨著數(shù)據(jù)中心與日俱增的數(shù)據(jù)流量,傳統(tǒng)互聯(lián)網(wǎng)架構(gòu)已經(jīng)難以滿足各大互聯(lián)網(wǎng)公司數(shù)據(jù)中心的基本需求,所以業(yè)界對互聯(lián)網(wǎng)架構(gòu)進行了更深入的研究,但互聯(lián)網(wǎng)在應對安全性、移動性和服務質(zhì)量等方面的挑戰(zhàn)時,采用修補解決的方式阻礙了創(chuàng)新型網(wǎng)絡架構(gòu)的部署和評估,無法有效解決互聯(lián)網(wǎng)本身固有的問題[1].目前的趨勢指出,一個靈活的,創(chuàng)新的網(wǎng)絡架構(gòu)才是符合現(xiàn)實需求的[2].對此,各種新型的網(wǎng)絡結(jié)構(gòu)及對現(xiàn)有網(wǎng)絡的改進方法被提了出來,其中軟件定義網(wǎng)絡 (Software define network)及網(wǎng)絡功能虛擬化(Network function virtualization)無疑是最熱門的話題之一.SDN將傳統(tǒng)的網(wǎng)絡結(jié)構(gòu)劃分為數(shù)據(jù)平面和控制平面,其中,數(shù)據(jù)平面是負責網(wǎng)絡內(nèi)容的轉(zhuǎn)發(fā)即網(wǎng)絡中的主要流量,報文內(nèi)容可能是視頻流,即時通信信息等,控制平面轉(zhuǎn)發(fā)的內(nèi)容則是路由信息等網(wǎng)絡控制報文,例如BGP,RIP等路由協(xié)議報文,目的是為設備維護和更新路由表.SDN網(wǎng)絡中的路由器只負責數(shù)據(jù)流量的轉(zhuǎn)發(fā),將控制平面交給中央控制器負責,中央控制器通過下發(fā)流表的方式對路由器進行控制.傳統(tǒng)的網(wǎng)絡設備不僅價格昂貴,而且封閉性較強,用戶只能以各大網(wǎng)絡設備商允許的方式對網(wǎng)絡設備進行配置和使用,這無疑不利于互聯(lián)網(wǎng)的發(fā)展,NFV技術顛覆了傳統(tǒng)電信網(wǎng)絡封閉專用的思想,同時引入了資源彈性管理的思想,將各種網(wǎng)絡功能通過軟件定義的方式,結(jié)合虛擬化的思想,運行于通用服務器之上.相較于專用網(wǎng)絡設備,通用服務器有著價格相對低廉,開放性較強及可靈活定制的優(yōu)點.
路由功能是整個互聯(lián)網(wǎng)的基礎骨架結(jié)構(gòu),所以,隨著NFV的發(fā)展,路由功能的虛擬化越來越被重視起來.各種虛擬路由器被發(fā)布出來,例如Quagga,RouterOS等.同時,伴隨著虛擬化技術的發(fā)展,使得多臺虛擬路由器可以同時運行在一臺主機之上,每一臺虛擬路由器邏輯上都是獨立的,可以滿足不同的應用需求[3].將不同路由器運行于同一個物理平臺上可以使每個虛擬路由器運行于不同的網(wǎng)絡環(huán)境中,有效的節(jié)省了硬件資源[4-6].而有關路由器虛擬化的設計與研發(fā),路由器廠商和科研機構(gòu)已經(jīng)著手對支持異構(gòu)網(wǎng)絡和服務且運行在同一共享底層平臺的虛擬路由器進行深入的研究[7-9].虛擬路由器相較于傳統(tǒng)路由器最大的問題在于網(wǎng)絡接口收發(fā)包速度的差距和路由選擇速度的差距.本文將針對減小網(wǎng)絡接口收發(fā)包速度的差距這一方面,提出一種改進方法.Quagga作為一款虛擬路由器,支持RIP,OSPF,BGP 等大部分主流路由協(xié)議,故本文選擇Quagga為研究對象并進行改進.
虛擬路由器將傳統(tǒng)路由器路由的功能通過軟件的方式實現(xiàn),減少了對專用封閉設備的依賴,提高了設備的可定制性.Linux系統(tǒng)本身通過路由表的形式提供了路由的功能,但是Linux系統(tǒng)只能通過手動加入或修改靜態(tài)路由的方式更新路由表.故此,以Quagga為代表的虛擬路由器通過維護Linux路由表,并用軟件實現(xiàn)各種動態(tài)路由算法的方式,實現(xiàn)了虛擬路由器動態(tài)路由的功能.
相較于傳統(tǒng)路由器,虛擬路由器存在以下問題:1)傳統(tǒng)路由器通過專有硬件加速的方式實現(xiàn)高速的路由選擇,虛擬路由器只能以較慢的速度通過軟件方式進行路由選擇.2)虛擬路由器通過中斷的方式進行數(shù)據(jù)報文的收發(fā),每次需要陷入Linux內(nèi)核態(tài)并進行memory copy,導致極大的 I/O 延遲.本文將針對第二點,對虛擬路由器Quagga進行優(yōu)化,使用戶態(tài)空間收發(fā)包的形式對數(shù)據(jù)平面進行加速.
隨著高速網(wǎng)卡技術的發(fā)展,10G,20G乃至100G的網(wǎng)卡紛紛進入市場并被各大數(shù)據(jù)中心使用,針對高速網(wǎng)卡,傳統(tǒng)的內(nèi)核態(tài)中斷方式處理數(shù)據(jù)包的方式難以滿足高速網(wǎng)卡的要求,針對這個需求,多種用戶態(tài)處理數(shù)據(jù)包的工具被開發(fā)出來,其中比較有代表性的就是 Intel公司推出的 DPDK(Data plan development kit).DPDK通過將中斷改為輪訓的處理方式,將需要內(nèi)核態(tài)處理的部分轉(zhuǎn)移到用戶態(tài)空間,減少了I/O中斷時上下文保存和恢復以及memory copy的時間,大大提升了數(shù)據(jù)報文處理速率.同時DPDK還運用Linux提供的hugepage技術,Hugepage使用有別于傳統(tǒng)頁表的2MB大小的頁表,使用此種技術,將會極大的增加了cache的命中率,從而對報文處理的速率進行提升.DPDK主要基于鏈路層進行快速收發(fā)包的工作,Cisco利用DPDK高速收發(fā)包的能力,開發(fā)出一款數(shù)據(jù)平面的報文處理工具 VPP(Vector packet process),實現(xiàn)了IP層路由的功能,從而使得運行VPP的服務器具有高速收發(fā)數(shù)據(jù)報文并根據(jù)路由表進行轉(zhuǎn)發(fā)的能力.VPP采用Graph Node的形式進行報文處理,每一個Node作為一個邏輯單元而存在,可完成相對獨立的任務,例如VLAN標簽的處理,MPLS標簽處理等.VPP將所接收到的報文按組的形式組織起來形成向量,每個向量有固定數(shù)量的報文組成,以向量為單位通過每個Node,通過這種方式,使得每個節(jié)點同時處理一定數(shù)量的報文,可以較明顯的提高Cache和內(nèi)存的命中率,減少了頁表換出換入的操作,從而提高了整體性能.VPP通過Graph Node的形式,提供給了開發(fā)者較強的可定制性,開發(fā)者可以向VPP加入自己制定的Node,并將其和其它Node進行串聯(lián),從而對特定環(huán)境下的網(wǎng)絡報文進行處理.VPP平臺可以用于構(gòu)建任何類型的數(shù)據(jù)包處理應用,比如負載均衡、防火墻、IDS、主機棧.也可以是一個組合,比如給負載均衡添加一個vSwitch.本文選擇VPP作為數(shù)據(jù)平面的加速工具來對虛擬路由器進行優(yōu)化.
Quagga作為傳統(tǒng)虛擬路由器的代表,整體架構(gòu)如圖1所示.VTYSH作為與用戶的交互模塊,提供了以命令行的形式配置路由器的途徑.VTYSH仿照大多數(shù)商業(yè)路由器的通用模式(例如Cisco和Huawei的商用路由器)進行配置.OSPF,BGP,RIP 作為動態(tài)路由協(xié)議由Quagga進行實現(xiàn),并可以通過配置文件的形式?jīng)Q定啟用哪一個動態(tài)路由協(xié)議.Zebra作為Quagga的管理模塊,負責Quagga的配置管理的生成和更新路由表的操作,Zebra通過Netlink的方式與內(nèi)核進行通信以達到修改內(nèi)核路由表的目的.

圖1 Quagga 架構(gòu)圖
將Quagga數(shù)據(jù)平面轉(zhuǎn)移到VPP上有兩個問題需要解決
當虛擬路由器啟動后,Quagga將啟動用戶所配置的路由協(xié)議,通過與其他路由器的通信建立初始路由表,并在運行中持續(xù)更新路由表.
Netlink是Linux提供的用戶空間與內(nèi)核進行通信的方式之一,Netlink 是基于 socket的通信機制,由于socket本身的雙共性、突發(fā)性、不阻塞特點,因此能夠很好的滿足內(nèi)核與用戶空間小量數(shù)據(jù)的及時交互,因此在Linux 2.6內(nèi)核中廣泛使用.
Quagga的數(shù)據(jù)平面運行于內(nèi)核空間下,用戶空間向內(nèi)核空間轉(zhuǎn)換過程中的環(huán)境保存和memory copy過程限制了報文轉(zhuǎn)發(fā)過程的速度,成為了Quagga轉(zhuǎn)發(fā)速率的瓶頸,所以,將數(shù)據(jù)平面轉(zhuǎn)移到用戶空間下成為加速Q(mào)uagga轉(zhuǎn)發(fā)速率的最有效方法.
經(jīng)過分析,有兩種方式可以作為轉(zhuǎn)移Quagga數(shù)據(jù)平面到VPP的選擇:1)將Quagga中操作Linux路由表的部分用VPP提供的操作自身路由表的API替換.2)不修改 Quagga 代碼,通過增加 VPP 插件的方式,同步VPP與Linux路由表.
通過比較,方法1)相較于方法2),由于直接操作VPP 路由表,會有一定的性能優(yōu)勢,但是,需要較大程度的修改Quagga源代碼,對程序有較大的侵入性,往往不利于開源軟件的發(fā)布.所以我們選擇侵入性較小的通過增加VPP插件來同步路由表的方式.
(1)如何通過Quagga同步VPP自身所維護的路由表.
(2)VPP綁定的網(wǎng)卡需要運行特定的驅(qū)動而不是Linux提供的驅(qū)動,所以無法被Quagga識別.
下面部分將針對上述兩個問題進行解決.
針對第一個問題,VPP為了減少陷入內(nèi)核態(tài)所需要的開銷完全運行于用戶空間下,所以需要自身維護一張路由表,該路由表與Linux內(nèi)核所維護的路由表結(jié)構(gòu)相似.如前文所述,Zebra通過Netlink方式與Linux內(nèi)核進行通信,同時Netlink支持多播組的形式,所以選擇將Zebra改為通過Netlink多播的方式與Linux通信,然后將VPP加入到該多播組中.以此方式,可以使VPP獲取到Quagga對內(nèi)核路由表的每一次更新,然后VPP可以根據(jù)每次收到的Netlink消息更新自身的路由表,以達到同步VPP路由表和Linux路由表的目的.
針對第二個問題,VPP基于DPDK運行,所以需要將所使用的網(wǎng)卡綁定DPDK所提供的驅(qū)動igb_uio,該驅(qū)動運行于用戶空間下.但是由于該網(wǎng)卡未綁定Linux所提供的驅(qū)動,所以無法被Linux系統(tǒng)所識別,導致不能被Quagga配置和管理.當接收到的報文轉(zhuǎn)發(fā)所需要的路由條目已存在與VPP路由表中,將不會存在這個問題,VPP將根據(jù)路由條目對該報文直接進行轉(zhuǎn)發(fā).當VPP路由表中不存在與接收到的報文目的IP地址相符的路由條目,則需要VPP將該報文傳遞給Quagga通過動態(tài)路由協(xié)議獲取所需要的路由信息.為解決這個問題,本文選擇使用Linux TAP虛擬網(wǎng)卡技術來解決這個問題.Tap驅(qū)動程序的數(shù)據(jù)接收和發(fā)送并不直接和真實網(wǎng)卡打交道,他在Linux內(nèi)核中添加了一個TUN/TAP虛擬網(wǎng)絡設備的驅(qū)動程序和一個與之相關連的字符設備/dev/net/tun,字符設備tun作為用戶空間和內(nèi)核空間交換數(shù)據(jù)的接口.當內(nèi)核將數(shù)據(jù)包發(fā)送到虛擬網(wǎng)絡設備時,數(shù)據(jù)包被保存在設備相關的一個隊列中,直到用戶空間程序通過打開的字符設備tun的描述符讀取時,它才會被拷貝到用戶空間的緩沖區(qū)中,其效果就相當于,數(shù)據(jù)包直接發(fā)送到了用戶空間.運用此種技術,在內(nèi)核中創(chuàng)建一個虛擬網(wǎng)卡作為VPP綁定網(wǎng)卡的一個映射,所有針對虛擬網(wǎng)卡的配置和操作將映射到VPP綁定的物理網(wǎng)卡上面.以此種方式,可以使Quagga對物理網(wǎng)卡進行控制.
根據(jù)以上兩個方式設計出的路由器架構(gòu)如圖2.圖中VPP Plugin作為增加的節(jié)點,用于處理接收到的報文的路由工作.Physical NICs 和 Virtual Device 為一一對應的關系,將由VPP管理的物理網(wǎng)卡映射到內(nèi)核中進行操作.

圖2 基于 VPP 優(yōu)化的 Quagga 架構(gòu)圖
VPP Plugin作為一個新增加的VPP節(jié)點完成以下工作:VPP將所有接收到的報文進行預處理,將物理層和數(shù)據(jù)鏈路程頭部和尾部去掉,然后將報文傳遞到新增加的節(jié)點,新增節(jié)點工作流程如下:
1)根據(jù)報文目的ip地址在VPP路由表中進行查找,若存在則 2),否則 3).
2)VPP根據(jù)路由表進行路由轉(zhuǎn)發(fā).
3)將報文上傳給創(chuàng)建的虛擬設備,并由該設備傳遞給Quagga進行路由.
4)Quagga根據(jù)運行的動態(tài)路由協(xié)議與鄰居進行交互并獲取所允許的路由信息,然后通過Netlink協(xié)議更新到Linux路由表中.
5)新增節(jié)點通過監(jiān)控Netlink多播協(xié)議,將更新到Linux路由表中的內(nèi)容同步到VPP路由表中,然后1).
工作流程圖如圖3所示至此,虛擬路由器的數(shù)據(jù)平面已經(jīng)轉(zhuǎn)移到了用戶空間下的VPP上,而控制平面則保留在Quagga上面.

圖3 VPP 插件工作流程圖
為了模擬真實情況下的虛擬路由器性能數(shù)據(jù),本文設計如下的拓撲結(jié)構(gòu)進行實驗:兩臺標準x86服務器作為實驗環(huán)境,每臺服務器上有一個兩口的intel10G網(wǎng)卡,將兩臺服務器各自的一個網(wǎng)口通過光纖與另一個服務器網(wǎng)口相連,組成一個線性拓撲結(jié)構(gòu).兩臺機器的另一個接口分別于Traffic Generator相連.本實驗選擇IXIA設備作為Traffic Generator來進行試驗,IXIA是專業(yè)的網(wǎng)絡測試設備,可根據(jù)配置產(chǎn)生高速動態(tài)變化的網(wǎng)絡報文.本實驗選擇BGP作為動態(tài)路由協(xié)議進行測試.BGP協(xié)議是基于TCP協(xié)議的動態(tài)路由協(xié)議,作為自制系統(tǒng)間的動態(tài)路由協(xié)議而廣泛應用于大型網(wǎng)絡中.為了進行精確測試,本實驗選擇對單core下的性能進行分析.
實驗步驟如下,啟動兩臺服務器的Quagga服務,分別通過shell腳本自動注入100條左右的路由信息,通過配置,使兩臺服務器作為BGP協(xié)議中Neighbor關系相連并交換路由信息.不同長度的報文長度將對性能產(chǎn)生較大的影響,所以選擇 64 bit至 1513 bit的不同長度的報文進行測試.從IXIA端口向一臺服務器的端口發(fā)送目的地址動態(tài)變化的報文,在另一端的IXIA端口觀察手包速率,得出以下實驗結(jié)果,如表1.
針對以上結(jié)果進行分析,可以得出,在 64 bit至256 bit情況下,相較于傳統(tǒng)虛擬路由器,轉(zhuǎn)發(fā)性能有了極大的 提升.在 256 bit以上的情況,單 core 的轉(zhuǎn)發(fā)能力基本可以達到線性速度.本實驗只針對單core性能進行測試,通過結(jié)果可以推斷出,當增加core的數(shù)量時,虛擬路由器將可以在任何報文長度條件下,達到線性速度.由此可以得出,通過將虛擬路由器的數(shù)據(jù)平面轉(zhuǎn)移到用戶空間下,可以較大的提升路由器性能.此外,通過對內(nèi)核態(tài)下虛擬路由器的性能進行分析,可以得到,傳統(tǒng)的數(shù)據(jù)平面轉(zhuǎn)發(fā)方式已經(jīng)難以滿足高速網(wǎng)卡的需求.
1Gao XM,Zhang XZ,Lu ZX,et al.面向虛擬路由器的轉(zhuǎn)發(fā)平面改進機制.Proc.of Chinese Control Conference,2013,(23):0–1.
2Mckeown N,Anderson T,Balakrishnan H,et al.OpenFlow:Enabling innovation in campus networks.ACM SIGCOMM Computer Communication Review,2008,38(2):69–74.[doi:10.1145/1355734]
3Keller E,Green E.Virtualizing the data plane through source code merging.Proc.of the ACM Workshop on Programmable Routers for Extensible Services of Tomorrow.Seattle,WA,USA.2008.9–14.
4Gupta M,Singh S.Greening of the internet.Proc.the 2003 Conference on Applications,Technologies,Architectures,and Protocols for Computer Communications.Karlsruhe,Germany.2003.19–26.
5Lyons AM,Neilson DT,Salamon TR.Energy efficient strategies for high design telecom application.Princeton:Princeton University,2008.
6Fu J,Rexford J.Efficient IP-address lookup with a shared forwarding table for multiple virtual routers.Proc.of the 2008 ACM CoNEXT Conference.Madrid,Spain.2008.
7Cisco.Multi-topology routing.http://www.cisco.com/c/en/us/td/docs/ios/12_2sr/12_2srb/feature/guide/srmtrdoc.html.[2006-08-18]
8Turner JS,Crowley P,Dehart J,et al.Supercharging planetlab:A high performance,multi-application,overlay network platform.Proc.the 2007 Conference on Applications,Technologies,Architectures,and Protocols for Computer Communications.Kyoto,Japan,2007.
9Feamster N,Gao LX,Rexford J.How to lease the internet in your spare time.ACM SIGCOMM Computer Communication Review,2007,37(1):61–64.[doi:10.1145/1198255]
Method to Accelerate Virtual Router Data Plan Based on VPP
ZHANG Yu-Wei,ZENG Yi,YANG Yan-Ning
(Computer Science and Teconology,Chongqing University,Chongqing 40000,China)
This paper proposes a method to accelerate the virtual router’s data plan by VPP.This method separates the virtual router into control plan and data plan,then moves the data plane’s transform work to the VPP running in Linux userspace and alters the VPP’s route table by listening to the control plan info.In this way,it could eliminate the bottleneck of the traditional virtual route’s rate of transform packets which make it possible to replace the network device with standard x86 platform server.It can promote the network function virtualization in some way and make the network resource more flexible and easier to be managed.
virtual router; network function virtualization; computer network; VPP
Framesize CoresInput (Mp/sec)Input (Mb/sec)Perf (Mp/sec)Perf (Mb/sec)Quagga+Kernel Dataplane 64 64 1 14.882 952.383 0.745 47.887 Quagga+Kernel Dataplane 128 128 1 8.446 1081.081 0.747 90.108 Quagga+Kernel Dataplane 256 256 l 4.529 1159.422 0.703 181.641 Quagga+Kernel Dataplane 512 512 1 2.349 1203.007 0.703 348.346 Quagga+Kernel Dataplane 1024 1024 1 1.197 1226.503 0.728 759.506 Quagga+Kernel Dataplane 1512 1512 1 0.816 1233.681 0.713 1021.186 Quagga+VPP 64 64 1 14.882 952.385 5.852 374.871 Quagga+VPP 128 128 1 8.446 1081.081 5.803 743.091 Quagga+VPP 256 256 1 4.528 1159.403 4.582 1159.403 Quagga+VPP 512 512 1 2.349 1203.007 2.349 1202.993 Quagga+VPP 1024 1024 1 1.197 1226.053 1.197 1226.891 Quagga+VPP 1512 1512 1 0.816 1233.681 0.815 1233.699
5 總結(jié)與展望
張宇巍,曾一,楊燕寧.基于VPP的虛擬路由器數(shù)據(jù)平面加速方法.計算機系統(tǒng)應用,2017,26(10):276–280.http://www.c-s-a.org.cn/1003-3254/6058.html
2017-02-11; 采用時間:2017-03-20
本文提出了一種針對虛擬路由器數(shù)據(jù)平面加速的方法,通過此種方法將虛擬路由器的數(shù)據(jù)平面轉(zhuǎn)移到具有高速數(shù)據(jù)處理能力的用戶空間數(shù)據(jù)高速轉(zhuǎn)發(fā)工具上,使得通用標準設備替代高速網(wǎng)絡設備成為了可能.以目前的虛擬路由器替代商業(yè)專用路由器還存在一些問題,本文只是在收發(fā)和將報文交給CPU處理的環(huán)節(jié)進行了加速,但對于整個路由器的核心功能路由選擇卻沒有進行優(yōu)化.物理路由器通常選擇使用專有硬件輔助的形式加速路由選擇的過程,而虛擬路由器單純使用軟件進行路由效率上有比較大的差距,可以對這一方面進行深入研究,利用多核CPU的優(yōu)勢改進路由選擇算法.