>
首页 » 技术文章 » IP网络性能测试系统的设计与实现

IP网络性能测试系统的设计与实现

作者:张彤,田辉,高巍  时间:2007-04-10 15:40  来源:

摘要:网络性能的实时监测已经成为一项必要的工作,网络性能测试终端正是这样一种设备。用嵌入式系统实现网络测试终端是一个理想的选择。文中介绍了一种以若干个测试终端组成一个测试网络来监控网络性能的方法,具体分析了嵌入式网络性能测试终端的软硬件设计,利用GPS解决多个测试终端时间同步的问题。给出了修改操作系统内核以获取高精度时间和文件系统设计及配置的方法。

关键词:嵌入式系统;GPS;uClinux

随着计算机网络的普遍使用,人们越来越关注网络服务质量,某些应用程序和协议对网络服务质量也有一定的要求。网络的带宽、时延是表征网络服务质量的一个重要参数,通过对它们的测量和监督可以了解网络在一段时间内的服务质量。网络性能测试终端通过按一定的方式发送、接收各种网络测试包,计算各个测试点之间的丢包率、双向和单向的时延来监测网络服务质量。

网络时延的测量方式

本系统测量网络时延有两种方式:单向式和双向式。双向式测量的原理类似于网络应用程序ping。在这种方式下,网络时延可近似视为时间之差的1/2。这种方法的优点是不用同步发送方和接收方的时间,缺点是测试包在两个测试终端间的传递可能经过不同的路线。单向测量的过程与双向测量方式相似,但接收方不再将测试包返回,而是通过比较本机的接收时间和测试包里的时间戳,得到网络时延。在这种测试过程中,对多个测试终端的时间同步要求非常高,否则计算结果毫无意义。

对于一个具有一定规模的网络,可以用多个测试终端来监视网络的运行情况。在这种情况下,若干个测试终端组成一个测试网络,根据测试人员的要求,每个测试终端有相应的测试配置,例如测试包的类型、长短,发送过程的随机过程类型及参数等。整个测试网络由少量的测试控制服务器控制测试过程。测试终端和服务器的通信采用C/S结构,测试终端启动时从服务器得到测试配置,开始测试过程后记录测试结果并将结果发回测试服务器,服务器接收数据并存入数据库。本测试终端采用以三星公司的微处理器S3C4510B为核心的一个嵌入式系统来实现上述功能。


图1 IP网络性能测试系统结构

硬件设计

测试终端的硬件应具备以下功能:①有网络接口,可以发送多种网络测试包;②有高精度时钟源,并且多个时钟源间可以良好同步,用于单向测试;③有一定的用户接口,可以让用户设定基本的测试参数;④因为要进行多点长期运行,所以应该功耗低,便于携带安装。

微处理器单元
S3C4510B是三星公司的一款32/16位的基于ARM7DTMI内核的微处理器。它功耗低,速度高(大约45Mips),片内资源丰富,自带有以太接口、两个32位的定时器、I2C接口、HDLC接口、串行通接口等。S3C4510B有6个DRAM片选组,4个ROM片选组,并且有SDRAM控制器,可以访问64MB的地址空间。由于地址空间大,接口丰富,总线宽度适宜,一些嵌入式操作系统如uClinux,ucOS-II可以顺利地移植到S3C4510B平台上。S3C4510B还自带有一个10~100MB的以太控制器,可以工作在半双工或全双工模式下,支持媒体独立接口(MII)和带缓冲的DMA接口,配上相应的物理层芯片就可以轻易实现网络通讯。


图2 测试终端结构

存储器部分

通常,计算机系统都带有ROM和RAM两种存储器,ROM存储固定的代码,而RAM则作为堆栈来保存运行时的临时性数据。本测试终端的ROM存储器采用了一片AMD公司的AM29LV160。这是一种容量为2MB,16位宽的FLASH存储器(闪存)。FLASH存储器除了具有非易失的特点外,它的另一个很大的优点是可以在线被重新擦写。利用这个特点测试终端可以在测试中实时修改终端的配置和测试参数。不过,虽然FLASH存储器虽然可以被重新擦写,但读写速度都较慢,只适宜保存需固化的数据,如嵌入式操作系统的内核等等。

S3C4510B芯片里自带有8kB的静态RAM,但对于本应用来说,8kB的SRAM显然不能满足要求。SDRAM有大容量、高速度的优点,S3C4510B片内有SDRAM的接口,可以自动刷新SDRAM。本系统采用两片8MB16位宽的HY57V641620构成一个32位宽16MB的SDRAM存储器系统。启动时,启动程序(BOOTLOADER)将ROM中的用户程序拷贝到RAM中去,并最终跳转到那里而完全脱离ROM运行,由于SDRAM读写速度较快。这样做还可以得到较好的运行效率。

GPS单元
做单向测试需要多个测试终端之间时间同步,使用NTP(网络时间协议)来进行多机同步是一个简单廉价的方案,但由于现在网络的速度较高,网络延迟的典型值一般为1~100μs,而最新的NTP协议及其实现所能达到的精度仅为200μs,无法在本应用中使用。另外还可以采用电话系统授时和GPS授时,其中以GPS授时的精度最高,通常小于1μs。考虑到本系统时间同步要求较高,所以选用GPS作为每个测试终端的时钟源。本设计采用的GPS接收机是NOVMAN的JUPITER-12。这种GPS有两路串行输出,能够输出标准的NEMA格式数据。在本设计中,GPS的主串行输出接在S3C4510的串口2上,处理器从串口2按NEMA0183格式读出GPS数据。

由于NEMA格式的串行数据里没有精确到毫秒级的数据,并且数据从串口读出本身也要耗费一些时间,所以利用串口2读出的数据不能做到精确的时间同步。大部分GPS接收机都有一个秒脉冲输出引脚,在GPS正确定位了足够数量的卫星后,该引脚上输出与协调世界时(UTC)的秒对齐的1Hz的脉冲。除了该输出外,JUPITER还提供一个10kHz的时钟方波输出。这个时钟也是与UTC的秒精确对齐的。利用这个信号配合从串口读出的数据可以做到精确授时。

用户输入输出接口
本终端允许用户人工干预测试过程,比如输入更改本机IP地址、测试服务器地址等,所以必须有一定的用户接口。系统的输入设备为一简易的4x4的小键盘,4根行扫描线和4根列扫描线分别与S3C4510B的8个通用IO引脚相连,当有键按下时输出一个字节的扫描码。输出设备为一自带汉字库的128x64的点阵式液晶显示模块TG12864E。这种液晶显示模块内置的LCD控制器ST7920与CPU接口简单。本系统中该LCD模块挂接在外部片选组0上。

软件设计

根据本应用的设计要求,本测试终端应该支持大部分的网络协议,并且其编程接口应该尽可能的丰富,系统软件应运行稳定可靠。尽管可以直接写程序控制S3C4510的网络接口收发数据,但即使实现部分的TCP/IP协议栈的功能也是非常耗时耗力的,所以系统的软件最好是运行于带网络支持的操作系统上。uClinux是Linux操作系统的一个分支,支持包括S3C4510B在内越来越多的CPU。本系统采用的就是uClinux2.4的内核及其对应的应用程序。并在此基础上构建了用户应用程序。

uClinux有着良好的内核用户定制界面,可以让用户选择系统所使用的库、内核特征、系统应用程序。根据本应用的要求,内核最主要的特征如下:①支持网络(这是测试的核心内容);②支持串口仿真终端,为了调试方便;③支持JFFS2文件系统。这是一个在FLASH存储器上实现的支持读写操作的文件系统。利用这种文件系统,用户应用程序可以方便地向FLASH存储器写入数据。


除了这些定制的特征外,还要根据实际要求对内核做一些改动。

修改内核以支持GPS时间同步
本系统没有实时时钟(RTC),所以每次开机后都要通过GPS来设定系统时间,GPS精确授时通过S3C4510B的通用IO口完成。如前所述,GPS接收机正常工作后,输出一个与UTC精确对齐的秒脉冲,将该输出引脚接至S3C4510B的一个通用IO口上,每次系统启动初始化时钟部分时,从串口2读出当前UTC时间,然后读取该通用IO口,等待GPS接收机的秒脉冲,完毕后设置系统时间。系统运行后,每隔1h重复一次时间同步。

修改gettimeofday函数
在Linux操作系统里,该函数用来读取系统当前精确时间,其函数原型为intgettimeofday(struct timeval *tv,struct timezone *tz);

函数调用成功后,可得到精确到微秒的当前时间。无论是双向测试还是单向测试,测试包时间戳里的数据都是调用该函数得到的。从Pentium开始,IntelX86的芯片里带有一个64位的时间戳计数器(TSC),每个时钟使它加1。X86处理器所使用的Linux内核中该函数正是读取TSC来实现的(早期的则是读Intel8253)。遗憾的是,uClinux支持S3C4510B架构的内核版本里对该函数支持欠佳,仅仅精确到0.01s,S3C4510B里也没有时间戳计数器。所以必须对内核做一定的修改。

S3C4510B内部有两个32位计数器,可以工作在间隔模式(interval)和触发模式(toggle)。读取内部的TDATA1/TDATA2寄存器可以得到当前的计数器计数值,工作在间隔模式时,每当计数减到0就产生一个时钟中断。在uClinux里,正是利用了计数器1产生的时钟中断来生成时钟滴答的,周期是0.01s。uClinux的系统时间更新是靠计算时钟滴答实现的,所以精度完全取决于时钟滴答的长短,故而精度较低。在uClinux的sys-gettimeofday函数中增加读取TDATA1寄存器计数值的代码,计算gettimeofday函数调用时刻偏移值(图3中阴影部分时间长度),可以让gettimeodfday函数输出高精度时间。


图3 时钟滴答示意图

增加对JFFS2的支持
系统进行测试时,测试的一些配置选项保存在配置文件里。大部分情况下,uClinux都采用只读文件系统romfs。当测试中需要修改测试配置文件内容时,romfs就不能满足要求。尽管闪存是可以在线擦写的,但是同一个地址的内容不能连续写两次,而必须擦除原先的内容才能再写下一次的内容。这就使得在闪存上不易构造ext2(扩展文件系统2)之类的常见文件系统。日志闪存(Journaling flash file system,简称JFFS)文件系统是一种基于FLASH存储器的日志式文件系统。它将整块FLASH都看成一个日志(log),每次写操作也都像增加日志内容一般的仅仅加在文件系统的尾部。这是一种支持读写和删除的文件系统,非常适合无盘的嵌入式系统。为了支持不断出现的各种存储器,Linux使用了一种简称为MTD(Memory Technology Device)的子系统。它提供了上层和硬件间的一个抽象接口,JFFS2文件系统就是建立在MTD系统之上的。

为动态存储测试配置,本终端的根文件系统(rootfs)选择为JFFS2文件系统。在uClinux下使用JFFS2文件系统,必须在内核配置里选取存储技术设备(MTD)等相应选项。另一个关键之处是要根据应用生成一个映射文件,该映射文件包含的核心信息是FLASH分区中JFFS2分区的详细信息,如起始地址、长度、读写函数指针等等。对于一些常见的开发板,uClinux带有这个映射文件,用户只需在配置内核时选中相应选项就可以。对于用户自己开发的系统,则需自己手动加上这个文件。本系统的闪存为2MB,分区配置如图4。待编译完成后,将生成的映像文件通过Bootloader烧入FLASH中即可。


图4 FLASH分区示意图及代码


用户应用程序
实现网络时延测量的重要部分是用户程序。根据应用,用户程序应该分为两大部分:服务器端和测试客户端。服务器端负责搜集客户端传回的测试数据并保存在数据库中,同时也为操作员提供一个用户界面管理测试配置,以浏览测试结果和监视测试情况。用户应用程序的主要工作就是根据配置发送、接收测试包,并且把计算结果通过网络传给服务器。在客户端启动时,它连接服务器获得配置,然后进入测试循环。

主要介绍了一种网络时延测试终端的硬件设计和嵌入式操作系统内核定制及修改。该终端具有较好的性价比,体积小,功耗低,可扩展性良好。测试表明,该终端输出的测试结果与PC机上运行的客户端输出结果十分接近。

相关推荐

u-blox发表适用于低功耗装置的新款GPS/GLONASS 接收器平台u blox 8

GPS  GLONASS  GNSS  U-BLOX  2016-01-11

u-blox发布整合3D传感器的终极室内/室外定位模块NEO-M8L

GPS  u-blox  GNSS  2014-11-12

u-blox发布全球最小的独立式定位模块EVA-M8M

2014-11-09

u-blox发表业界最小的独立式GNSS模组- EVA-7M

u‑blox  GNSS  EVA-7M  GPS  2013-11-21

从TI“蝗虫战略”到雷军“芯片免费”

芯片  嵌入式系统  2013-11-07

u-blox与垂克科技携手帮你找到爱犬

u-blox  垂克科技  MSP340  追踪器  无线  GPS  GSM  2013-10-23
在线研讨会
焦点