張宇烜++武堅
摘要:隨著IPv4地址的枯竭和IPv6技術(shù)的逐漸成熟,IPv6協(xié)議的商業(yè)化已經(jīng)迫在眉睫。同時,現(xiàn)階段全球互聯(lián)網(wǎng)絡(luò)的流量不斷增加,服務(wù)器并發(fā)連接帶寬達(dá)到了每秒千兆的級別,服務(wù)器性能受到極大約束。單純依靠硬件升級已經(jīng)無法從根本上解決超大流量并發(fā)的問題。DPDK(Data Plane Development Kit)平臺的出現(xiàn)使得傳統(tǒng)消息通訊方式出現(xiàn)改變,提高整個系統(tǒng)處理網(wǎng)絡(luò)并發(fā)流量的能力。該文結(jié)合現(xiàn)有文獻,以IPv6協(xié)議棧和DPDK平臺為研究對象,實現(xiàn)了高性能,支持并發(fā)的簡易IPv6協(xié)議棧。文中對DPDK平臺的消息通訊方式做了初步分析和研究。結(jié)合IPv6協(xié)議棧的實現(xiàn)和處理流程,對DPDK平臺如何讓提高網(wǎng)絡(luò)并發(fā)性能做了簡要分析。最后,結(jié)合實際的拓?fù)浣Y(jié)構(gòu),驗證了整個網(wǎng)絡(luò)的可行性,確定了其與標(biāo)準(zhǔn)的Linux網(wǎng)絡(luò)協(xié)議棧的兼容性。
關(guān)鍵詞:DPDK; IPv6協(xié)議;協(xié)議棧實現(xiàn)
中圖分類號:TP393 文獻標(biāo)識碼:A 文章編號:1009-3044(2017)03-0060-03
The Design and Implementation of IPv6 Address Stack Based on DPDK
ZHANG Yu-xuan,WU Jian
(AVIC Xian Aeronautic Computing Technique Institute , Xi'an 710065, China)
Abstract: With the exhaustion of IPv4 address and the mature development of IPv6 technology, IPv6 commercialization is imminent. At the same time, the server bandwidth of concurrent connections is raised to the level of gigabit per second because the global Internet network traffic is increasing continuously. The performance of the server is limited. It is not available to resolve the high concurrent flow with promotion in hardware. With appearance of DPDK (Data Plane Development Kit) Platform, the traditional communication method has been changed. And it also improves the capacity of handling the concurrent flow in all system. Combined with existing knowledge of IPv6 stack and DPDK platform, this paper implements a high performance IPv6 stack which supports concurrent flow on. Paper analysis the way of communication DPDK uses. With the achievement of IPv6 stack, it gives a brief talk on how to improve the capacity of concurrent flow by using DPDK. At last, we validate the feasibility of whole network with real topology, and make sure the compatibility of standard Linux IPv6 network stack.
Key words: DPDK; IPv6 protocol; stack implementation
1 介紹
隨著移動通訊網(wǎng)絡(luò)的發(fā)展,網(wǎng)絡(luò)容量受限得到持續(xù)關(guān)注?,F(xiàn)有以IPv4為基礎(chǔ)的網(wǎng)絡(luò)協(xié)議和傳輸設(shè)施已不能滿足現(xiàn)有設(shè)備的接入需求,IPv4協(xié)議與現(xiàn)有日益增長的網(wǎng)絡(luò)規(guī)模相矛盾[1]。
同時,隨著物聯(lián)網(wǎng)和移動網(wǎng)絡(luò)的蓬勃發(fā)展,互聯(lián)網(wǎng)已經(jīng)成為當(dāng)今社會的基礎(chǔ)設(shè)施之一。分布全球的服務(wù)器系統(tǒng)每時每刻處理數(shù)以萬計用戶請求?,F(xiàn)在的服務(wù)器系統(tǒng)需要具有高并發(fā)性和高可擴展性。服務(wù)器要能夠快速處理數(shù)以千萬計的并發(fā)請求。隨著摩爾定律逐漸失效,單純的硬件升級對于服務(wù)器整體的并發(fā)性能提高微乎其微。因此,解決并發(fā)性問題需要轉(zhuǎn)變思路。要從單純堆疊硬件的做法轉(zhuǎn)向改變處理數(shù)據(jù)的應(yīng)用程序架構(gòu)。
經(jīng)典的數(shù)據(jù)報文處理方式使用同步阻塞I/O中斷處理模型或異步非阻塞I/O模型。在小流量的情況下,此兩種模型可以大幅提高服務(wù)器的并發(fā)性能。但隨著請求數(shù)目不斷上升,服務(wù)器需要消耗大量的資源和時間用于非數(shù)據(jù)處理過程。服務(wù)器性能下降?,F(xiàn)在,服務(wù)器系統(tǒng)面對的是如何處理千萬級別的并發(fā)請求問題。通過改變應(yīng)用軟件架構(gòu),改善系統(tǒng)內(nèi)核等以往做法已經(jīng)不能滿足服務(wù)器的需求,針對上述問題,Intel 提出了 DPDK(Data Plane Development Kit)平臺,DPDK平臺是Intel公司為旗下Intel網(wǎng)卡在不同平臺下開發(fā)的一款高性能的網(wǎng)絡(luò)驅(qū)動組件。DPDK平臺提供了一系列基礎(chǔ)組件。通過使用 DPDK平臺,開發(fā)人員可以繞過 Linux 內(nèi)核,編寫自己的網(wǎng)絡(luò)協(xié)議棧,在用戶空間實現(xiàn)高性能的數(shù)據(jù)報文轉(zhuǎn)發(fā)程序。
由于IPv6協(xié)議復(fù)雜,協(xié)議棧處理所需時間更長,資源更多。因此,將DPDK平臺與IPv6技術(shù)相結(jié)合,使得IPv6協(xié)議??梢愿鞂?shù)據(jù)報文進行處理,以滿足未來服務(wù)器對數(shù)據(jù)處理的要求,加快IPv6的部署。
2 基于DPDK的IPv6協(xié)議棧設(shè)計模型
1)整體設(shè)計思想
相比于IPv4協(xié)議,IPv6協(xié)議更加復(fù)雜。IPv6報文分為基礎(chǔ)報頭和擴展報頭兩部分。兩部分報頭邏輯相互關(guān)聯(lián),功能各自獨立。IPv6協(xié)議使用鄰居發(fā)現(xiàn)協(xié)議代替原有的ARP協(xié)議,在初始時刻使用無狀態(tài)的地址配置[2]?;贒PDK的IPv6協(xié)議棧整體架構(gòu)如圖1所示。
整個協(xié)議棧包含數(shù)據(jù)鏈路層,IPv6協(xié)議層和系統(tǒng)配置三部分。數(shù)據(jù)鏈路層負(fù)責(zé)二層數(shù)據(jù)報文的轉(zhuǎn)發(fā)和處理。IPv6協(xié)議層負(fù)責(zé)IPv6報文解析,處理和轉(zhuǎn)發(fā)。系統(tǒng)配置負(fù)責(zé)全局配置的加載解析。下面主要介紹數(shù)據(jù)鏈路層和IPv6協(xié)議層的實現(xiàn)方式和功能特點。
2)數(shù)據(jù)鏈路層設(shè)計與實現(xiàn)
數(shù)據(jù)鏈路層主要承擔(dān)二層數(shù)據(jù)報文轉(zhuǎn)發(fā)任務(wù)。其功能較為簡單,主要負(fù)責(zé)MAC地址的識別和鏈路層的轉(zhuǎn)發(fā)任務(wù)。但由于其處于整個協(xié)議棧最底層,調(diào)用頻繁,因此對性能的要求較高。鏈路層模塊在編寫上使用強耦合關(guān)系模型,以減少數(shù)據(jù)在不同數(shù)據(jù)結(jié)構(gòu)之間交互,加快整個報文的處理速度。由于DPDK主要針對多核設(shè)備,因此數(shù)據(jù)轉(zhuǎn)發(fā)協(xié)議棧針對不同CPU內(nèi)核,將接收隊列和發(fā)送隊列與單個CPU核心綁定。從數(shù)據(jù)報文進入鏈路層開始,報文的處理只在一個CPU核心中進行。通過這種數(shù)據(jù)報文處理和CPU核心的綁定方式,整個數(shù)據(jù)報文處理過程變得單一化,核心的處理效率提高。
同時,在多核心的處理過程中,必然會涉及不同核心之間的內(nèi)存共享問題。針對內(nèi)存共享和使用,協(xié)議棧利用DPDK自身的特點,每個核心單獨使用一級緩存,共享使用二級緩存。這樣的使用方式可以減少數(shù)據(jù)在內(nèi)存之間的移動,保證數(shù)據(jù)報文盡可能少的在不同的內(nèi)存間進行復(fù)制,減少內(nèi)存操作的開銷。
由于一個數(shù)據(jù)包只被一個CPU核心處理,因此,必然涉及網(wǎng)卡與CPU多核心的對應(yīng)關(guān)系問題?;贒PDK的IPv6協(xié)議棧使用數(shù)據(jù)報文地址作為標(biāo)識。將地址與特定標(biāo)志一一對應(yīng),使得數(shù)據(jù)報文從進入網(wǎng)卡開始就對底層的地址進行解析,進行流量負(fù)載。同時,為了避免某一核心的負(fù)載過大,協(xié)議棧還可以通過判斷數(shù)據(jù)隊列使用情況,重新對協(xié)議棧的接收發(fā)送隊列進行流量負(fù)載。通過以上兩種方式,使得每個CPU核心及傳輸隊列可以均衡使用。
最后,對于數(shù)據(jù)報文的上報,使用輪詢機制,減少整個系統(tǒng)的中斷次數(shù)。通過減少系統(tǒng)中斷,減低出入棧的消耗,使得整個協(xié)議??梢詫①Y源傾斜于真正的數(shù)據(jù)處理過程。
3)IPv6協(xié)議棧設(shè)計與實現(xiàn)
IPv6協(xié)議棧的設(shè)計是整個協(xié)議棧設(shè)計的核心。其主要功能是完成IPv6數(shù)據(jù)報文的正確解析和轉(zhuǎn)發(fā)。
IPv6數(shù)據(jù)報文分為三部分:基本報頭報文,擴展報頭和上層報文。IPv6數(shù)據(jù)報文的解析主要涉及IPv6基本報頭的解析和擴展報頭的解析。在基本報頭中,協(xié)議棧對源地址,目的地址等基本信息進行解析。對比本機關(guān)鍵信息后,根據(jù)既定策略完成數(shù)據(jù)報文處理。如果目的地址為本機地址,則當(dāng)前協(xié)議棧將數(shù)據(jù)報文進行處理,剝離IPv6報頭,對擴展字段逐一進行處理。之后數(shù)據(jù)交與上層程序進行下一步處理。如果解析出的IPv6目的地址不是本機地址,且本機可以作為路由器進行數(shù)據(jù)轉(zhuǎn)發(fā),則協(xié)議棧查找靜態(tài)路由表。通過路由找出合適的IP地址。最后協(xié)議棧修改CRC校驗信息和MAC地址,將數(shù)據(jù)送往發(fā)送隊列,完成IPv6數(shù)據(jù)報文的協(xié)議轉(zhuǎn)發(fā)過程。
同時,協(xié)議棧實現(xiàn)了ICMPv6基本協(xié)議。協(xié)議棧使用ICMPv6協(xié)議中的鄰居發(fā)現(xiàn)協(xié)議進行物理地址的查詢,代替IPv4中的ARP功能。協(xié)議棧還可以利用鄰居發(fā)現(xiàn)協(xié)議向其他節(jié)點報告報文錯誤信息和當(dāng)前設(shè)備的工作狀態(tài)。IPv6協(xié)議棧的處理流程如圖2所示[3]。
當(dāng)IPv6數(shù)據(jù)報文進入?yún)f(xié)議棧后,首先檢查報文有效性,確認(rèn)數(shù)據(jù)報文是否接收正確。然后,協(xié)議棧查看數(shù)據(jù)報文目的地址,確認(rèn)報文接收方是否正確。同時,協(xié)議棧處理IPv6擴展報文,依次對所有類型的擴展報頭進行查看和解析。最后,協(xié)議棧根據(jù)報文的目的地址作出不同的處理。如果目的地址是本機,協(xié)議棧將數(shù)據(jù)報文上報上層應(yīng)用或其他協(xié)議處理平臺。如果目的地址是非本機地址,主機進行路由查詢,更改報文,使用鄰居發(fā)現(xiàn)協(xié)議進行物理地址查詢,最后將報文放入發(fā)送隊列。
因為使用的DPDK平臺繞過系統(tǒng)內(nèi)核,所以協(xié)議??梢宰杂墒褂脙?nèi)存空間,動態(tài)分配調(diào)整緩存空間和數(shù)據(jù)庫大小,對所有內(nèi)存空間進行精細(xì)管理。為了盡可能降低不同CPU核心之間不必要的交互,協(xié)議棧以CPU socket為基礎(chǔ)分配內(nèi)存。由于鄰居發(fā)現(xiàn)協(xié)議和ICMPv6協(xié)議的存在,IPv6報文分成了控制數(shù)據(jù)報文和流量數(shù)據(jù)報文兩種類型。協(xié)議棧根據(jù)不同類型報文的特點,把內(nèi)存分為兩部分,使得不同類型數(shù)據(jù)使用不同的內(nèi)存空間,方便協(xié)議棧的內(nèi)存管理[4]。
3 協(xié)議棧測試
1)測試環(huán)境與測試結(jié)果
搭建測試環(huán)境的目的是為了測試和驗證基于DPDK的IPv6協(xié)議棧的基本特性。其中包括鏈路的連通性和數(shù)據(jù)報文解析的正確性。
鏈路的連通性包含兩方面:(1)基于DPDK的IPv6協(xié)議棧間的數(shù)據(jù)報文的傳遞和解析的正確性;(2)基于DPDK的IPv6協(xié)議棧與標(biāo)準(zhǔn)Linux協(xié)議棧之間的數(shù)據(jù)報文的發(fā)送接收的正確性。
數(shù)據(jù)報文解析的正確性主要是指IPv6數(shù)據(jù)報文和基于ICMPv6的相關(guān)控制報文可以正確被基于DPDK的IPv6協(xié)議棧和標(biāo)準(zhǔn)協(xié)議棧的識別和解析。根據(jù)以上要求,驗證搭建了如圖三所示的測試拓?fù)洵h(huán)境。測試拓?fù)溆蓛蓚€單節(jié)點計算機和一個路由器組成。
網(wǎng)絡(luò)測試拓?fù)渲袡C器A使用標(biāo)準(zhǔn)的Linux操作系統(tǒng)(Ubuntu12.04),IPv6協(xié)議棧為Linux標(biāo)準(zhǔn)的IPv6協(xié)議棧,機器A的IPv6地址和子網(wǎng)掩碼為2001:da8::1234:5678/64。機器B使用與A相同的標(biāo)準(zhǔn)Linux操作系統(tǒng),但是機器B安裝了相關(guān)的DPDK驅(qū)動,運行基于DPDK的IPv6協(xié)議棧和相對應(yīng)的網(wǎng)絡(luò)驅(qū)動。機器B的IPv6地址和子網(wǎng)掩碼為2001:da8::5678:1234/64。路由器同樣使用基于DPDK的經(jīng)過剪裁的IPv6協(xié)議棧,完成IPv6數(shù)據(jù)報文的轉(zhuǎn)發(fā)功能。機器A,機器B,路由器均使用靜態(tài)的IPv6路由表。同時整個網(wǎng)絡(luò)中的在初始化時刻,所有設(shè)備的ARP緩沖區(qū)為空。
通過發(fā)送ping6命令,可以完成整個測試項目的驗證。實驗方式從機器A向機器B發(fā)送ping6命令。網(wǎng)絡(luò)實驗測試結(jié)果如圖4所示。
2)結(jié)果分析
通過圖4的數(shù)據(jù)可以對整個協(xié)議棧的基本特性進行驗證。首先,通過ping6命令可以驗證和測試網(wǎng)絡(luò)的鏈路連通性:由于ICMPv6協(xié)議底層的承載協(xié)議為IPv6協(xié)議和以太網(wǎng)協(xié)議,因此,通過ICMPv6數(shù)據(jù)報文在不同設(shè)備之間進行傳遞檢測。因此,可以通過ping6命令驗證基于DPDK的IPv6協(xié)議棧中MAC層對MAC數(shù)據(jù)報文和IPv6數(shù)據(jù)報文的改動是否符合標(biāo)準(zhǔn)協(xié)議。是否能正確被標(biāo)準(zhǔn)協(xié)議棧所識別。同時,由于ICMPv6數(shù)據(jù)報文經(jīng)過交換機轉(zhuǎn)發(fā),中間數(shù)據(jù)報文需要穿越標(biāo)準(zhǔn)的Linux協(xié)議棧。因此,可以驗證基于DPDK的IPv6協(xié)議棧與標(biāo)準(zhǔn)Linux協(xié)議棧之間的數(shù)據(jù)報文的發(fā)送接收的正確性。
由于上面的實驗涉及到基于DPDK的IPv6協(xié)議棧和標(biāo)準(zhǔn)協(xié)議棧之間的數(shù)據(jù)交互,因此可以同時驗證整個IPv6報文和ICMPv6數(shù)據(jù)報文解析的正確性和在基于DPDK的IPv6協(xié)議棧與標(biāo)準(zhǔn)的Linux協(xié)議棧的兼容性。
4 總結(jié)
本文以DPDK為平臺,通過對DPDK平臺的初步分析,搭建了一個基于DPDK的IPv6協(xié)議棧。概述了在充分利用多核優(yōu)勢下的IPv6協(xié)議棧的搭建過程。對協(xié)議棧的內(nèi)存進行了進一步優(yōu)化。最后驗證了IPv6協(xié)議棧與標(biāo)準(zhǔn)Linux的IPv6協(xié)議棧的兼容性和協(xié)議棧對IPv6數(shù)據(jù)報文正確處理的能力。
參考文獻:
[1] 白瑩,趙振東,戚銀城,李潔.從IPv4到IPv6的改進和過渡.電力系統(tǒng)通信,2004(9):40 -43.
[2] Deering S,Hinden R.Internet Protocol Version 6 (IPv6) Specification [J].RFC2460 Network Working Group, 1998, 17(6):1860-1864.
[3] Silvia Hagen. IPv6 Essentials[M]. O'Reilly Media, Inc, 2006:1-16 .
[4] Lamport L. How to Make a Multiprocessor Computer That Correctly Executes Multiprocess Programs Computers[C]. IEEE Transactions on, 1979.