鐘超
摘要:在網(wǎng)絡(luò)測試中,流量生成是至關(guān)重要的一項技術(shù),結(jié)果的正確性誤差程度均決定于此。網(wǎng)絡(luò)測試是保證整個網(wǎng)絡(luò)系統(tǒng)的設(shè)備與功能以及運(yùn)行狀態(tài)的手段。現(xiàn)有的測試方法難以滿足網(wǎng)絡(luò)技術(shù)日新月異的發(fā)展需要。面對新形勢下的新需求,針對以萬兆級網(wǎng)絡(luò)為代表的高速網(wǎng)絡(luò)的測試方法,是十分迫切和必須的。
關(guān)鍵詞:流量生成;軟硬件協(xié)同;回放;多數(shù)據(jù)流模擬
1.流量回放方案分析
在進(jìn)行網(wǎng)絡(luò)測試時,流量可以來源于回放,真正的流量是被根據(jù)不斷回放歷史捕捉到的一些數(shù)據(jù)來實現(xiàn)的;同時,還可以對流量進(jìn)行模擬,這種并非還原真實,而是根據(jù)統(tǒng)計到的特點,自主地模仿出一些流量。兩種方法沒有很確定的優(yōu)劣之分。筆者首先理性地分析了上述目前廣泛應(yīng)用的兩種方法,同時基于FPGA對兩種方案進(jìn)行了修正與改進(jìn),詳細(xì)的描述如下:
(1)根據(jù)已有的回放的方案,加入硬件因素,形成軟硬件聯(lián)動的方案。該方案理論上解決了以萬兆級網(wǎng)絡(luò)為代表的高速網(wǎng)絡(luò)的流量生成問題。此方法將回放中的文件大小提高到了GB級,現(xiàn)有的方法只有64 MB,這有賴于FPGA與主機(jī)存儲優(yōu)勢的結(jié)合。為提高底層數(shù)據(jù)傳輸速度,采用了輪詢的方式,并利用映射優(yōu)化內(nèi)存訪問。同時從新設(shè)計了傳輸引擎,引擎基于PCIE 2.0總線實現(xiàn),實現(xiàn)網(wǎng)絡(luò)與主機(jī)本地數(shù)據(jù)交換速度達(dá)到16 Gbps。此外,結(jié)合隨機(jī)存取硬盤和主機(jī)內(nèi)存的特點,還設(shè)計了幾種新的回放方式:無拷貝利用靜態(tài)緩沖的回放,基于隨機(jī)存取硬盤的高速GB級回放模式和已經(jīng)達(dá)到TB級的針對硬盤的低俗回放。對內(nèi)存的優(yōu)化使得數(shù)據(jù)拷貝有了將近70%的性能提高。在誤差控制方面,利用FPGA設(shè)計基于令牌的方案,大大提高精度,相對誤差不超過10E-5。
(2)同樣的結(jié)合硬件特點改進(jìn)流量模擬的方法,先分析網(wǎng)絡(luò)中的數(shù)據(jù)的特征,根據(jù)各部件自身所特有的功能,最終形成一種標(biāo)志各部件的特征序列流,最后根據(jù)已有的特征序列,利用FPGA模擬生成流量數(shù)據(jù)。并且設(shè)計了對用戶友好的借口,流的配置根據(jù)具體的動態(tài)與靜態(tài)的特征描述確定。用戶可以自主的配置數(shù)據(jù)頭部不超過256字節(jié)的基于各種網(wǎng)絡(luò)協(xié)議的數(shù)據(jù)包格式。此外,還可以配置12字節(jié)域的變化模式,此后利用FPGA實現(xiàn)大量數(shù)據(jù)的模擬實現(xiàn)。經(jīng)過足夠的測試,此方案能正確穩(wěn)定的運(yùn)行,實現(xiàn)了模擬萬兆級網(wǎng)絡(luò)流量數(shù)據(jù)的預(yù)期功能。
近幾年網(wǎng)絡(luò)用戶的激增使得網(wǎng)絡(luò)流量飛速增長:在中國互聯(lián)網(wǎng)統(tǒng)計調(diào)查中顯示,我國的國際出口帶寬在2006-2011短短6年內(nèi)從256 696 Mbps激增到了1 389 529 Mbps,增長幅度達(dá)到了5.4倍,而為了適應(yīng)這種增長,主干網(wǎng)絡(luò)帶寬也在飛速推進(jìn),從千兆提升至10G甚至達(dá)到了40 G,同時也推動了網(wǎng)絡(luò)相關(guān)設(shè)備的升級:此外,伴隨著網(wǎng)絡(luò)硬件的不斷升級,以網(wǎng)絡(luò)為依靠的新興網(wǎng)絡(luò)業(yè)務(wù)層出不窮,諸如網(wǎng)絡(luò)電話、視頻點播、IPTV和以P2P技術(shù)為基礎(chǔ)的網(wǎng)絡(luò)共享等一系列新興網(wǎng)絡(luò)業(yè)務(wù)推動了網(wǎng)絡(luò)流量在速率分布、協(xié)議以及傳輸?shù)确矫娴膹?fù)雜化。
2.基于回放的流量生成方案
借助回放捕獲的流量文件來達(dá)到對真實網(wǎng)絡(luò)流量進(jìn)行還原的這種系統(tǒng)被稱為基于回放的測試流量生成系統(tǒng),并對實際網(wǎng)絡(luò)環(huán)境來對待測協(xié)議進(jìn)行模擬、測試設(shè)備或者系統(tǒng)。根據(jù)測試流量生成系統(tǒng)的實現(xiàn)方式之間的差異,可將其分為基于軟件和基于硬件這兩種類型。其中,基于軟件以利用通用PC軟件平臺為主要的實現(xiàn)途徑;而基于硬件的則以利用專用硬件為主,例如,通過網(wǎng)絡(luò)處理器以及FPGA等硬件進(jìn)行加速流量回放等處理。
盡管在概念方面看來,基于回放的流量生成方案相對較為簡單,但是在實現(xiàn)過程中這種方案卻有著眾多的挑戰(zhàn):一方面是生成流量速率?;谲浖幕胤欧桨赣捎谑芟抻赑C處理器性能以及網(wǎng)絡(luò)I/O性能,千兆線速發(fā)送難以實現(xiàn);另一方面,因為操作系統(tǒng)進(jìn)程間調(diào)度以及各種事件中斷會對軟件回放過程造成一定程度的影響,使得數(shù)據(jù)包之間的時間間隔難以被精確控制,進(jìn)而致使其生成的數(shù)據(jù)包時間間隔遠(yuǎn)差別于原始間隔。對于上述挑戰(zhàn),相關(guān)領(lǐng)域的研究者們不斷探索以求可以對此進(jìn)行改進(jìn)彌補(bǔ)。以下則為其中的一些典型方案,筆者將對其進(jìn)行簡單介紹分析。
基于軟件的流量回放生成方案有很久的歷史了,一種被廣泛使用在實踐中的工具是人們所熟知的TCPreplay但是這種所謂的TCPreplay只是在功能層面上對流量回放進(jìn)行了實現(xiàn),并未關(guān)注實現(xiàn)時的性能問題。而在實踐中性能問題恰恰是被廣泛關(guān)注的焦點,所以大量的學(xué)者結(jié)合技術(shù)特點對流量回放的性能提高進(jìn)行了研究,并形成了大量的文獻(xiàn)資料。比如數(shù)據(jù)包傳輸過程中的時間誤差采用操作系統(tǒng)的實時來實現(xiàn)降低的文獻(xiàn),OC-48量級的快速回放基于分割劃分文件并同時利用多臺PC機(jī)來并發(fā)地傳輸實現(xiàn)的文獻(xiàn)等。全面分析研究了如何基于通用的處理器和操作系統(tǒng)來提高回放精度的TCPivo是這些為了性能優(yōu)化的研究中非常具有代表性的一項研究。因為基于通用的處理器和操作系統(tǒng)對于PC和Linux機(jī)都具有很大的價值。該項研究采用預(yù)先把文件放入內(nèi)存中的方案也大幅度地減少了輸入輸出失言對數(shù)據(jù)包回放的影響。即將最大100 ms的文件的輸入輸出時延平均降低了103倍的文件與處理機(jī)制。一些文件過大無法讀入內(nèi)存的情況就是用文件映射方法采用32 MB數(shù)據(jù)塊讀取并在內(nèi)核中用采用提高讀取速度的順序讀取方法進(jìn)行。并且這種工具還使用了兩個線程配合兩個緩沖區(qū)的方法,即使用兩個線程分別負(fù)責(zé)從兩個緩沖區(qū)中接收讀取數(shù)據(jù)和取出發(fā)送。例如設(shè)置AB兩個不同的緩沖區(qū),當(dāng)目前接收數(shù)據(jù)在向A中寫入數(shù)據(jù)時,發(fā)送就先把B中的數(shù)據(jù)發(fā)送出去。而之后互相交換,從A中發(fā)送,向B中寫接收到的數(shù)據(jù)。這樣就實現(xiàn)了接受發(fā)送兩個操作的同時進(jìn)行,不必因為正在操作而掛起等待。而這種讀取的方法直接把輸入輸出的時延降低到10 us左右。
3.高速底層數(shù)據(jù)傳輸通道設(shè)計
其實想要同時利用PC機(jī)自身強(qiáng)大的物理存儲空間優(yōu)勢和硬件中的高速處理優(yōu)勢只要解決一個關(guān)鍵性的問題。那就是如何把PC中存儲的數(shù)據(jù)快速傳輸?shù)较鄳?yīng)的硬件平臺中。在傳統(tǒng)的軟件實現(xiàn)的回放方法中,主要限制了速度的地方就是如何把網(wǎng)卡中的數(shù)據(jù)快速傳輸?shù)较鄳?yīng)進(jìn)行處理的位置。筆者在一臺配置情況為intel 8-core core i7處理器,6GDDR2內(nèi)存,RTL8111/8168B兆網(wǎng)卡控制器,操作系統(tǒng)為CentOs5.4的服務(wù)器上,對TCPreplay工具中進(jìn)行了測試,主要針對不同幀觀察速率.
接下來進(jìn)行根深層次的發(fā)送分析,以便發(fā)現(xiàn)技術(shù)瓶頸。筆者分析了運(yùn)行在Linux環(huán)境下的數(shù)據(jù)發(fā)送機(jī)制。從用戶空間發(fā)送到系統(tǒng)的內(nèi)核空間是數(shù)據(jù)包發(fā)送過程中從用戶程序到網(wǎng)卡這整個過程的第一步,通過使用系統(tǒng)自身的系統(tǒng)調(diào)用函數(shù)才能完成從用戶空間到系統(tǒng)內(nèi)核的過程,利用這種方式來完成使用內(nèi)核對需要執(zhí)行的任務(wù)進(jìn)行相應(yīng)。用戶進(jìn)程在系統(tǒng)調(diào)用運(yùn)行過程中進(jìn)入掛起等待狀態(tài),與此同時用戶請求在內(nèi)核的進(jìn)程被嘗試運(yùn)行,在此過程中數(shù)據(jù)內(nèi)容完成了發(fā)送至內(nèi)核空間的過程,在上述運(yùn)行結(jié)束后,則會在成功信號被返回后喚醒在此之前被掛起的用戶進(jìn)程,使其繼續(xù)完成相關(guān)任務(wù)。由此可見,系統(tǒng)調(diào)用執(zhí)行一次除了數(shù)據(jù)拷貝的過程以外還需要上下切換兩次。
4.結(jié)語
網(wǎng)絡(luò)測試流量生成在網(wǎng)絡(luò)測試結(jié)果的正確性和誤差精度有著直接決定的作用,在網(wǎng)絡(luò)功能測試以及性能測試中扮演著極其重要的角色。在網(wǎng)絡(luò)帶寬飛速增長的同時,網(wǎng)絡(luò)相關(guān)的新協(xié)議以及新應(yīng)用也在不斷出新,這種狀況無疑在對網(wǎng)絡(luò)測試流量生成提出了更高的要求:一方面,要求測試流量在速率以及精度方面適應(yīng)日益提升的網(wǎng)絡(luò)速率的需求;另一方面,要求流量內(nèi)容設(shè)置能夠靈活兼容新的網(wǎng)絡(luò)協(xié)議格式,以此來對日益復(fù)雜的網(wǎng)絡(luò)流量特性進(jìn)行模擬。