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