黃昱愷,耿金坤,令瑞林,李丹
(清華大學,北京 100084)
NFV數據平面的網絡性能優化技術
黃昱愷,耿金坤,令瑞林,李丹
(清華大學,北京 100084)
近年來,NFV因為其部署靈活、成本低廉等優良特性,受到了學術界與工業界的廣泛關注。然而,性能問題在NFV發展過程中變得愈加明顯,逐漸成為制約NFV技術進步的主要瓶頸。針對影響NFV數據平面網絡性能的主要因素進行了歸納概述,分析了NFV的性能瓶頸所在,并在此基礎上進一步歸納了相應的優化方法。最后,簡要介紹了當前比較成熟的兩種系統架構,能夠顯著提升NFV數據平面的網絡性能。
NFV;性能優化;系統架構
在過去的很長一段時間里,電信運營商每新增一項網絡服務都需要采購大量的專用設備,另一方面,設備提供商也需要投入大量的人員進行設計研發。從開始規劃到最后的部署,不僅周期漫長,而且造價昂貴。考慮到這些因素,運營商開始尋求成本低廉、部署靈活的新型解決方案[1]。網絡功能虛擬化(network function virtualization, NFV)正是在這種需求背景下產生的。2012年10月,ETSI(European Telecommunications Standards Institute,歐洲電信標準化協會)發布 NFV白皮書,其最終目標是通過軟件定義網絡功能,實現網絡功能的靈活部署。網絡功能虛擬化可以實現軟硬件的解耦,運營商只需購置通用硬件設備,甚至可以采用云計算的采購模式部署新型的網絡服務。更重要的是,由于網絡功能軟件化,網絡功能可以輕松地遷移與擴展。然而,NFV同樣面臨著諸多挑戰[2],性能問題成為制約 NFV技術發展的主要瓶頸,大量工作圍繞如何提高NFV數據平面的網絡性能而展開,力圖通過NFV數據平面的優化以實現接近硬件設備的性能。
本文首先總結了影響NFV數據平面網絡性能的主要因素,包括網卡中斷、內存復制、系統調用、鎖的爭奪、上下文切換、文件系統、緩存未命中等開銷,并針對這些開銷歸納總結了主流的優化方法,最后介紹了兩種可供參考的NFV架構設計,并簡要分析了兩種架構的優缺點。
NFV應用的性能很大程度上取決于網絡 I/O的性能,而數據分組從到達網卡到應用處理需要經歷多個階段。數據分組處理的流程如圖1所示。

圖1 數據分組處理的流程
圖1展示了在傳統NFV解決方案中數據分組處理的流程,當數據分組到達網卡后,通過DMA(direct memory access)復制到宿主機的內存空間并觸發中斷,宿主機協議棧處理完數據分組后交由虛擬交換機處理,隨后數據由虛擬交換機遞交至上層客戶機,經由虛擬網卡,客戶機內核協議棧最后到達提供網絡功能的應用程序。顯然,上述過程存在著諸多開銷,具體來講可以分為以下幾類。
2.1 網卡中斷開銷
輪詢與中斷是操作系統與外設進行 I/O通信的兩種主要方式。一般情況下,網絡中數據分組的到來具有不可預測性[3]。若采用輪詢模式對數據分組進行持續監聽,會造成很高的CPU占用率,進而影響系統其他進程的運行效率,故主流操作系統都采用中斷來處理網絡的請求。中斷處理方式在低速網絡I/O場景下非常有效[4],然而隨著高速網絡接口等技術的迅速發展,10 Gbit/s、40 Gbit/s甚至100 Gbit/s的網絡端口已經出現。隨著網絡I/O速率的不斷上升,網卡面對大量高速數據分組引發頻繁的中斷,中斷引起的上下文切換開銷將變得不可忽視,造成較高的時延[5],并引起吞吐量下降。
2.2 內存復制開銷
提供服務的應用進程運行在用戶空間,而通常情況下,操作系統首先將到來的數據分組讀取到內核空間,為了使上層應用能夠對接收到的數據進行相應處理,需要將內核將數據從內核空間復制到用戶空間;而對于應用進程產生的數據,也需要由用戶空間復制到內核空間,最后由網卡發出。操作系統在處理數據過程中往往需要進行多次復制操作,嚴重影響了高速網絡服務的性能[6,7]。
2.3 鎖開銷
當多個線程或進程需要對某一共享資源進行操作時,往往需要通過鎖機制來保證數據的一致性和同步性,而加鎖帶來的開銷會顯著降低數據處理的性能[3]。具體來說,鎖機制造成的開銷主要有兩方面:一方面,線程在為共享資源上鎖或者去鎖的過程中通常需要耗時幾十納秒[8];另一方面,在競爭鎖的過程中,等待線程在阻塞過程中無法進行有效的數據處理和計算,從而降低了整個系統的并發性能[9]。無論是宿主機還是客戶機的內核協議棧中,都存在大量的共享資源,這也制約著整個系統的可擴展性。
2.4 上下文切換開銷
NFV的擴展需要多核并行化的支持,然而在該場景下,數據平面需要進行資源的分配調度,調度過程中涉及多種類型的上下文切換,在網卡中斷、系統調用、進程調度與跨核資源訪問等上下文切換過程中,操作系統均需要保存當前狀態[10-14],而這一類的切換開銷往往相當昂貴,嚴重影響系統性能。
2.5 文件系統管理開銷
socket(套接字)作為網絡通信過程中的基本操作單位,在NFV數據平面中同樣扮演重要的角色。本質上說,socket也是一種文件抽象。Linux為了實現統一文件管理,通過虛擬文件系統(virtual file system,VFS)為套接字綁定了一系列對應的數據結構如inode、dentry等。通常情況下,這些重量級的數據結構對于套接字本身的功能來說是不必要的[15]。而在NFV的應用場景下,往往需要對socket進行頻繁的分配和釋放,因而操作系統在管理這些數據結構的過程中會引起較大的性能開銷[10]。
2.6 緩存未命中開銷
緩存是一種能夠有效提高系統性能的方式,然而由于設計的不合理造成頻繁的緩存未命中,則會嚴重削弱 NFV數據平面的性能。以 Intel XEON 5500為例,在L3緩存命中與緩存未命中條件下的數據操作耗時相差數倍[16]。如果在系統設計中沒有考慮到這一點,存在頻繁的跨核調用,由此帶來的緩存未命中會造成嚴重的數據讀寫時延,從而降低系統整體性能[3]。
綜合第2節中的分析可以看到,NFV數據平面操作過程中的開銷類型復雜多樣且彼此之間相互關聯。針對第2節中的性能開銷因素,目前主要的優化方法可歸納見表1。

表1 性能開銷及優化方法
3.1 輪詢取代中斷
作為 I/O通信的另一種方式,輪詢不存在中斷所固有的開銷。以網卡接收分組為例,在輪詢模式下,系統會在初始化時屏蔽收發分組中斷,并使用一個線程或進程不斷檢測收取分組描述符里的收取分組成功標志是否被網卡置位,以此來判斷是否有數據分組,整個收取過程沒有發生上下文切換,因此也就避免了相應的開銷。在高速網絡I/O下,輪詢帶來的性能提升是非常顯著的。根據PLVison公司的相關實驗,基于中斷方式的網絡吞吐速率與基于輪詢處理方式的網絡吞吐速率相差近20倍。
然而需要注意的是,輪詢并不一定總是優于中斷。確切地說,只有當I/O速率接近CPU速率時,中斷的開銷變得不可忽略,輪詢模式的優勢才能體現;相反,如果數據吞吐率很低,中斷能有更好的CPU利用率,此時不宜采用中斷模式。基于以上分析,針對網絡流量抖動較大的場景,可以選用中斷與輪詢的混合模式,即:在流量小時使用中斷模式,當遇到大流量時切換為輪詢模式。目前Linux內核(NAPI)與DPDK(data plane development kit,數據平面開發工作集)都支持這種混合中斷輪詢模式。
3.2 零復制技術
零復制技術主要用以避免CPU將數據從一個內存區域復制到另一個內存區域帶來的開銷。在NFV數據平面操作的場景下,零復制指的是除網卡將數據DMA復制進內存外(非CPU參與),從數據分組接收到應用程序處理數據分組,整個過程中不存在數據復制。零復制技術對于高速網絡而言是十分必要的。在高速網絡環境下,網絡I/O性能接近甚至超過CPU的處理能力,過于頻繁的數據復制幾乎會耗盡CPU所有的計算資源,從而使得CPU成為性能瓶頸。同時,數據從內核空間進入應用程序所處的用戶空間,該過程中引發的上下文切換開銷同樣不可忽略。DPDK、Netmap、PF-ring等高性能數據分組處理框架都運用了零復制技術,可以實現在通用平臺下高效的網絡處理。
3.3 高效虛擬化技術
目前在NFV領域常用的高效虛擬化技術大致可以歸為以下兩類。
(1)基于硬件的虛擬化技術
I/O透傳與 SR-IOV是兩種經典的虛擬化技術。I/O透傳,指的是將物理網卡直接分配給客戶機使用。這種由硬件支持的技術可以達到接近宿主機的性能。不過由于PCIe設備有限,PCI-SIG提出并制定了一套虛擬化規范——SR-IOV,即單根I/O虛擬化。通過SR-IOV,可以使一塊物理網卡提供多個虛擬功能(VF),而每個VF都可以直接分配給客戶機使用。通過SR-IOV解決了PCIe設備有限的問題,不過與透傳一樣,SR-IOV無法做到實時遷移,并且支持的VF仍有上限。
(2)半虛擬化技術
半虛擬化(paravirtualization),區別于完全虛擬化,無需對硬件做完全的模擬,而是通過客戶機的前端驅動與宿主機的后端驅動一同配合完成通信,而客戶機操作系統能夠感知自己處在虛擬化環境,故稱半虛擬化。由于半虛擬化擁有前后端驅動,不會造成VM-exit,所以半虛擬化擁有更高的性能。主流虛擬化平臺 KVM 就使用了Virtio作為半虛擬化的驅動,半虛擬化比起SR-IOV的優勢在于支持熱遷移,并且可以與主流vSwitch對接。相比之下SR-IOV只支持二層連接,因此半虛擬化技術具有更好的靈活性。
3.4 網絡協議棧優化
由于現有網絡功能如代理、IDS、負載均衡等都依賴于協議棧對到來數據分組進行拆封解析,短時間內構建完全脫離協議棧的網絡功能是不現實的,而協議棧的處理性能在小分組、高并發的場景下并不理想[15]。因此,眾多工作將重點落在了優化協議棧上。如前所述,內核協議棧除了中斷開銷和內存復制開銷之外,還有鎖、系統調用、文件系統、跨核等一系列開銷,這些開銷均嚴重制約了協議棧的可擴展性,使得協議棧成為性能瓶頸。
減少鎖開銷和跨核開銷,目前的主要解決方案是將共享的數據結構分區與連接本地化,即設法將同一個流的所有數據分組交由同一個CPU核處理,從而避免了不同核對于同一資源的競爭,進而也就避免了加鎖的開銷。同時,在同一個CPU核處理同一條流也可以提升緩存的命中率,避免跨核的開銷。Affinity-Accept、Megapipe以及Linux的So_Reuseport均實現了被動連接的本地化,通過拆分監聽散列表,實現了從3次握手到連接建立均在同一個核上進行。Fastsocket[15]則更進一步,通過控制主動連接的源端口,并配合網卡的Flow Director功能,實現了主動連接的本地化。
減少系統調用開銷,目前的解決方案可以分為兩種:一種方案是直接將協議棧移動到應用層實現,避免昂貴的上下文切換開銷,如mTCP、lwIP等方案;另一種方案則是采用批處理的思想,批量調用系統調用以平攤開銷,MegaPipe、FlexSC、VOS均使用批量系統調用來減小開銷。
減少文件系統開銷,目前的解決方案也可分為兩種:一種方案為自定義輕量級的 socket,一些優化方案如mTCP、lwIP等,選擇直接繞過VFS,在用戶態重新定義實現socket結構體,另外一些優化方案如MegaPipe等,雖然在內核實現,但也通過自定義API避免了原有VFS的文件操作;另一種方案則是繼承VFS的socket實現,但是簡化掉inode與dentry的初始化與銷毀過程,拋棄其中的鎖。這是因為對于socket而言,inode與dentry是完全無用的。此類方案的代表性工作是Fastsocket。相比前一種方案,該方案的優點在于能夠完全兼容傳統 socket,降低NFV應用的移植難度。
綜合以上分析可以看出,NFV數據平面中的性能開銷類型多樣,且相互關聯。因此,現有的比較成熟的解決方案往往需要結合多種優化技術,從而實現性能的顯著提升。針對NFV的特殊場景,存在兩種高性能的網絡數據分組 I/O體系架構。NFV數據平面架構設計如圖2所示。

圖2 NFV數據平面架構設計
如圖2(a)所示為第一種架構,使用SR-IOV或者PCIe穿透技術直接將物理設備或者虛擬功能分配給客戶機,在客戶機內部署成熟的協議棧優化方案(如Fastsocket),或者基于DPDK重構一個新型的應用層協議棧。這種架構的優點在于實現簡單,幾乎不需要修改現有網絡功能的程序就能實現整體性能的提升;然而缺點也十分明顯:由于SR-IOV的本身缺陷,使得業務鏈缺乏靈活性,不同虛擬機之間只能通過二層路由進行通信,且不支持熱遷移,這與NFV的思想是相悖的。因此該方案更適合業務鏈簡單、功能單一并希望盡量不修改應用程序的場景。
如圖 2(b)所示為第二種架構,客戶機使用半虛擬化網卡,并與宿主機里的 vSwitch相連,由vSwitch控制業務鏈,而vSwitch和半虛擬化的前后端均可使用DPDK優化,可以采用輪詢取代中斷、零復制等技術實現性能的大幅提升。NetVM[3]是采用此架構實現的典型代表方案。在NetVM的解決方案中,通過在客戶機與宿主機之間進行內存共享,從而實現了全程零復制。具體地,NetVM在宿主機里使用DPDK輪詢收取分組并放入共享的大頁內存,在客戶機內使用前端驅動映射地址空間并模擬PCI設備。客戶機內的應用程序可以通過 NetVM 提供的接口直接訪問共享內存的數據分組,并指定數據分組接下來的流向。NetVM通過這一整套機制,消除了宿主機與客戶機、客戶機與客戶機交互過程中的內存復制開銷,故可以提供極高的性能。盡管第二種架構的部署靈活、性能優秀,但是架構實現復雜,應用程序往往需要根據半虛擬化前端驅動做出修改,甚至需要直接處理裸分組,應用的代價遠高于第一種方案。
本文分析并總結了影響NFV數據平面處理性能的主要因素,具體包括網卡中斷開銷、內存分組開銷、鎖開銷、上下文切換開銷、文件系統管理開銷以及緩存未命中開銷等。在充分分析以上開銷成因的基礎上,進一步歸納總結了相應的性能優化方案。最后介紹了兩個可供參考的系統架構,并簡要分析了兩種架構的優點與缺點。未來NFV性能優化將主要側重兩個方面。一方面,隨著容器技術的日益成熟,基于容器的輕量級NFV優化方案將被廣泛關注,并逐漸取代基于虛擬機的傳統NFV方案,從而對系統資源實現更加高效靈活的利用;另一方面,通用性的NFV應用平臺將成為主要研究方向,今后工作應重點考慮如何兼顧高性能與通用性,簡化NFV應用的移植過程,實現應用與平臺的無縫對接。
[1] 李晨, 段曉東, 陳煒, 等. SDN和NFV的思考與實踐[J]. 電信科學, 2014, 30(8): 23-27. LI C, DUAN X D, CHEN W, et al. Thoughts and practices about SDN and NFV [J]. Telecommunications Science, 2014, 30(8): 23-27.
[2] 趙慧玲, 史凡. SDN/NFV的發展與挑戰[J]. 電信科學, 2014, 30(8): 13-18. ZHAO H L,SHI F. Development and challenge of SDN/NFV[J]. Telecommunications Science, 2014, 30(8): 13-18.
[3] HWANG J, RAMAKRISHNAN K K, WOOD T. NetVM: high performance and flexible networking using virtualization on commodity platforms[J]. IEEE Transactions on Network and Service Management, 2015, 12(1): 34-47.
[4] FIGURE E. Eliminating receive livelock in an interrupt-driven kernel[J]. ACM Transactions on Computer Systems, 1997, 15(3): 217-252.
[5] YANG J, MINTURN D B, HADY F. When poll is better than interrupt[C]//FAST, February 14?17, 2012, San Jose, CA, USA. New York: ACM Press, 2012: 3.
[6] WU W, CRAWFORD M, BOWDEN M. The performance analysis of Linux networking-packet receiving[J]. Computer Communications, 2007, 30(5): 1044-1057.
[7] KOH Y, PU C, BHATIA S, et al. Efficient packet processing in user-level Oses: a study of UML[C]//The 31th IEEE Conference on Local Computer Networks, November 14?16, 2006, Sydney, Australia. New Jersey: IEEE Press, 2006: 63-70.
[8] DEAN J. Designs, lessons and advice from building large distributed systems[J]. Keynote from LADIS, 2009(1).
[9] DINIZ P C, RINARD M C. Lock coarsening: eliminating lock overhead in automatically parallelized object-based programs[J]. Journal of Parallel and Distributed Computing, 1998, 49(2): 218-244.
[10] BOYD-WICKIZER S, CLEMENTS A T, MAO Y, et al. An analysis of Linux scalability to many cores[C]//Usenix Symposium on Operating Systems Design & Implementation, October 4?6, 2010, Vancouver, BC, Canada. New York: ACM Press, 2010: 86-93.
[11] KAMRUZZAMAN M, SWANSON S, TULLSEN D M. Inter-core prefetching for multicore processors using migrating helper threads[J]. ACM SIGPLAN Notices, 2011, 46(3): 393-404.
[12] KAZEMPOUR V, KAMALI A, FEDOROVA A. AASH: an asymmetry-aware scheduler for hypervisors[J]. ACM SIGPLAN Notices, 2010, 45(7): 85-96.
[13] VAHDAT A, YOCUM K, WALSH K, et al. Scalability and accuracy in a large-scale network emulator[J]. ACM SIGOPS Operating Systems Review, 2002, 36(SI): 271-284.
[14] EMMERICH P, RAUMER D, WOHLFART F, et al. Performance characteristics of virtual switching[C]// 2014 IEEE 3rd International Conference on Cloud Networking (CloudNet), October 8?10, 2014, Luxembourg. New Jersey: IEEE Press, 2014: 120-125.
[15] LIN X, CHEN Y, LI X, et al. Scalable kernel TCP design and implementation for short-lived connections[C]//International Conference on Architectural Support for Programming Languages & Operating Systems, April 2?6, 2016, Atlanta, Georgia, USA. New York: ACM Press, 2016: 339-352.
[16] LEVINTHAL D. Performance analysis guide for intel core i7 processor and intel XEON 5500 processors[J]. Intel Performance Analysis Guide, 2009(30): 18.

黃昱愷(1992?),男,清華大學碩士生,主要研究方向為軟件定義網絡、網絡功能虛擬化、高性能網絡協議棧設計與實現。

耿金坤(1994?),男,清華大學碩士生,主要研究方向為高性能網絡協議棧的設計與實現、數據中心帶寬資源分配方案的設計與實現。

令瑞林(1992?),男,清華大學碩士生,主要研究方向為數據中心網絡、網絡安全與網絡性能優化技術等。

李丹(1981?),男,清華大學計算機系特別研究員、博士生導師,主要從事網絡體系結構、網絡協議與網絡系統的研究工作。擔任國家“973”計劃(青年科學家專題)項目“軟件定義的云數據中心網絡基礎理論與關鍵技術”首席科學家,獲得2014年清華大學“學術新人獎”,獲得2015年國家優秀青年科學基金資助。主持或參加國家科研項目10多項,曾擔任國際學術期刊IEEE Transactions on Computer編委(2013-2015年)。《電信科學》雜志編委。發表論文50多篇,論文被引用2 000多次,獲得國內外專利20多項。
Performance optimization solutions for NFV data plane
HUANG Yukai, GENG Jinkun, LING Ruilin, LI Dan
Tsinghua University, Beijing 100084, China
In recent years, network function virtualization (NFV) is arousing concern widely from both academia and industry due to its flexible deployment and low cost. However, the performance bottleneck becomes increasingly distinctive and hinders the progress of NFV technology. The major factors were studied which could seriously affect the performance of NFV data plane. Firstly, an analysis was conducted on the causes for various kinds of performance overheads. Then, the optimization solutions were summarized to mitigate these overheads. Finally, a brief introduction was made on two types of architecture, which could significantly improve the performance of NFV data plane.
network function virtualization, performance optimization, system architecture
TP393
A
10.11959/j.issn.1000?0801. 2017088
2017?01?13;
2017?03?27