高速网络测速流量的生成探究与运用
钟超
摘要:在网络测试中,流量生成是至关重要的一项技术,结果的正确性误差程度均决定于此。网络测试是保证整个网络系统的设备与功能以及运行状态的手段。现有的测试方法难以满足网络技术日新月异的发展需要。面对新形势下的新需求,针对以万兆级网络为代表的高速网络的测试方法,是十分迫切和必须的。
关键词:流量生成;软硬件协同;回放;多数据流模拟
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.结语
网络测试流量生成在网络测试结果的正确性和误差精度有着直接决定的作用,在网络功能测试以及性能测试中扮演着极其重要的角色。在网络带宽飞速增长的同时,网络相关的新协议以及新应用也在不断出新,这种状况无疑在对网络测试流量生成提出了更高的要求:一方面,要求测试流量在速率以及精度方面适应日益提升的网络速率的需求;另一方面,要求流量内容设置能够灵活兼容新的网络协议格式,以此来对日益复杂的网络流量特性进行模拟。