丰富的开发工具和开源软件组件是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”同样可以执行更长时间的测试,因为用户(包括制造商、认证机构以及以电信公司为代表的买方)需要从不同角度、针对多种模拟情况对网络设备进行压力测试,以确保设备能够达到他们声称的能力。
【编辑推荐】