看Linux及SQL如何構建網絡性能分析測試系統
豐富的開發工具和開源軟件組件是Linux環境的主要優點之一,如今,支撐通信網絡的設備無論在速度、吞吐量、性能還是其支持的服務方面都變得日益強大。顯然對用戶來說這是福音——但對生產商來說這卻是一項重大挑戰。
路由器的設計目標也許是與10000個其它設備流暢交互。那么其生產商就必須維護一個由所有服務器、網關、交換機及其他(用來重現設備可能面臨的標準狀態與壓力狀態的)裝置組成的測試網絡嗎?
顯然,這會導致成本不菲,更別說時間的耗費了,并且如果測試一個普通路由器都如此困難,生產商如何測試最大規模電信網絡設備(例如10GB以太網交換機)的功能,又如何度量系統交互與需求情景對于復雜服務(例如整合語音、數據與影像的“三合一”服務)的不同影響?
這就是Spirent Communications公司與其產品Spirent TestCenter要解決的問題。它的設計目標是復雜網絡性能分析系統,提供軟件與硬件真實模擬任何可能的網絡流量情景,以簡化并加速測試。通過在同一個應用程序中產生控制與數據層流量并收集測試結果,功能與性能測試集中于一個應用程序中。這樣做的效果是,用戶可以準確測量幾微秒量級的設備延遲時間。
獨一無二的基于Linux的高度分布式結構(在一個產品中可能分布有數百個甚至數千個運行在設備邊緣的獨立嵌入式Linux系統)使Spirent TestCenter能夠以線路速率跟上網絡數據包流量。操作所處的位置(位于Spirent TestCenter的端口,設備處理大量輸入、輸出數據包的地方)對于系統性能而言十分關鍵,因為它可以調節大量位于該處的CPU并確保只有測試結果(而非原始數據)被傳送到中央控制應用程序那里。
圖為Spirent TestCenter端口處的應用程序及數據庫
使用基于SQL的開源關系數據庫作為測試結果的后端存儲,而且端口處部署有現場可編程門陣列(FPGA),主要來自Xilinx公司,用來處理最為性能密集的任務:產生、捕獲與分解數據包。對于大規模測試,用戶可以將多種機箱加入到安裝中,形成多達720個端口。系統可以捆綁到一起以提供更多端口。這樣,一個端口可依次模擬32,000個數據流,使得系統能夠“創建”由數以百萬計主機與設備組成的網絡,以測試交換機、路由器或其他設備。
為進行測試,有端口(通常不少于2個)將被連接到測試設備上的端口。用戶通過運行在相連的PC或筆記本電腦上控制應用程序進行控制。輸入命令后,FPGA開始大量生成數據包,有效地將交換機或路由器“置于”用戶指定的速度與流量級別的網絡中。FPGA監控設備返回的流量,測試并分解輸入的數據包來度量延遲時間、抖動、丟包率以及數百種其它現象(根據測試需要),將這些數據發送給eXtremeDB內存嵌入式數據庫。
幾乎所有測試結果都由測試模塊的應用程序計算得到,盡管少部分(例如需要利用多種來源數據計算的平均值)在控制PC機中計算。在數據收集點處完成幾乎全部數據分析工作,可以充分利用分布于整個系統中的眾多CPU(其中一些為多核),從而提升系統性能。
這些測試可以傳輸的信息種類多的驚人。一些用戶僅僅關注第2或第3通訊子層(參考OSI 7層模型),或測量處于更高子層狀態流量的特性。對于防火墻與其他與安全相關的設備,設備可以對數據包進行深入分析以探測出帶有病毒及其它惡意程序特征的模式(一種更加CPU密集的分析)。系統支持相對簡單的工業標準網絡設備測試(例如:IETF RFC 2544和2889),但更適合進行關系到多種應用程序和流量的高度復雜分析。今天,人們期待網絡能夠同時處理IPTV、Web通信以及VoIP數據。與此同時還要應付不斷變更的IPTV頻道。最困難的挑戰之一是運行針對這些情況(尤其是它們同時發生時)的測試。
將定制FPGA功能與軟件處理相結合,我們可以在TestCenter中完成這個任務。在軟件方面,設備廣泛利用了Linux的多線程。測試程序隔離了各種功能(例如IPTV測試、VoIP測試以及多種數據庫行為)并將它們分配給不同的線程。相比之下,許多老式測試技術只利用了一個CPU線程,我們產品中最“硬”的實時性能來自FPGA。
與FPGA硬件相比,系統的嵌入式軟件并非“硬”實時,它只是非常快而已。我們不需要Linux的響應時間達到微秒量級,MontaVista Linux系統內建的Jiffy時間片管理工具對軟件需求已經是綽綽有余。
當我們在幾年前試圖將產品轉變為現在的分布式結構時,尋找一個能在端口處足夠快的進行分類、存儲以及檢索測試數據的數據庫是一個挑戰。我們需要一個內存式數據庫,從而避免文件I/O、緩存管理以及磁盤數據庫相關的其他開銷。系統性能得益于引導性的數據庫應用編程接口(API),即,嵌入代碼的API函數通過循環操作方式,一次只針對一條數據庫記錄工作,應用程序邏輯決定當前記錄行是否屬于目標集合。
SQL在測試系統中也占有一席之地,控制程序中包含開源的SQLite數據庫,從分布式Linux系統中提取的測試結果就保存在該DBMS中。之所以選擇SQLite是因為它對于這種非實時存儲足夠快,并且如果需要的話,可以“插入”一個不同的SQL數據庫作為后端。可靠性及速度使Linux成為我們理想的選擇。Linux的穩定性很好。如果有一千個端口,每個端口都有自己的Linux系統,并假設每個分布式系統的平均故障時間是1000分鐘,那么整個測試平均每分鐘都會出故障,這是無法接受的。因此,對如此大規模的分布式智能設備來說,穩定性是絕對的關鍵。
Linux環境豐富的開發工具和開源軟件組件也是主要優點之一。例如:利用Scons構建工具可以將軟件分布在Spirent的20或30臺專用機器上,并將工作交給那些空閑的計算機。用于該產品的一種Linux工具是MontaVista公司的Application Pre-Linking,它掃描系統中的所有二進制文件來發現鏈接依賴關系。這樣就不需要在應用程序運行時動態生成鏈接信息。
Spirent TestCenter依靠定制編程的FPGA來產生和分析數據包,它同樣也可以使用開源的PCAP(Packet Capture,數據包捕獲)API來進行數據包的捕獲和存儲。結果文件可以由基于PCAP的應用程序(如:WireShark)打開并查看,從而協助追蹤bug(如:設備抖動的原因)。您說出一種Linux工具我們就可能在使用它,因為Linux基本上是一組構件的集合,TestCenter的設計則是基于這些構件的。系統中的處理器一般是成品的Intel x86和Cavium Network處理器。
我們產品中的另一開源組件是tcl/tk —— 開源的工具命令行語言(Tool Command Language)及GUI工具包。tcl/tk腳本在自動運行一組時分別在10%、20%、30%等線路速率情況下測量第二層性能的測試,之后自動開始其他第二層測試。
用戶只需要按下“play”同樣可以執行更長時間的測試,因為用戶(包括制造商、認證機構以及以電信公司為代表的買方)需要從不同角度、針對多種模擬情況對網絡設備進行壓力測試,以確保設備能夠達到他們聲稱的能力。
【編輯推薦】