IP网络性能测试系统的设计与实现
作者:网络转载 发布时间:[ 2012/5/24 13:16:37 ] 推荐标签:
增加对JFFS2的支持
系统进行测试时,测试的一些配置选项保存在配置文件里。大部分情况下,uClinux都采用只读文件系统romfs。当测试中需要修改测试配置文件内容时,romfs不能满足要求。尽管闪存是可以在线擦写的,但是同一个地址的内容不能连续写两次,而必须擦除原先的内容才能再写下一次的内容。这使得在闪存上不易构造ext2(扩展文件系统2)之类的常见文件系统。日志闪存(Journalingflashfilesystem,简称JFFS)文件系统是一种基于FLASH存储器的日志式文件系统。它将整块FLASH都看成一个日志(log),每次写操作也都像增加日志内容一般的仅仅加在文件系统的尾部。这是一种支持读写和删除的文件系统,非常适合无盘的嵌入式系统。为了支持不断出现的各种存储器,Linux使用了一种简称为MTD(MemoryTechnologyDevice)的子系统。它提供了上层和硬件间的一个抽象接口,JFFS2文件系统是建立在MTD系统之上的。
为动态存储测试配置,本终端的根文件系统(rootfs)选择为JFFS2文件系统。在uClinux下使用JFFS2文件系统,必须在内核配置里选取存储技术设备(MTD)等相应选项。另一个关键之处是要根据应用生成一个映射文件,该映射文件包含的核心信息是FLASH分区中JFFS2分区的详细信息,如起始地址、长度、读写函数指针等等。对于一些常见的开发板,uClinux带有这个映射文件,用户只需在配置内核时选中相应选项可以。对于用户自己开发的系统,则需自己手动加上这个文件。本系统的闪存为2MB,分区配置如图4。待编译完成后,将生成的映像文件通过Bootloader烧入FLASH中即可。
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(structtimeval*tv,structtimezone*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函数输出高精度时间。
增加对JFFS2的支持
系统进行测试时,测试的一些配置选项保存在配置文件里。大部分情况下,uClinux都采用只读文件系统romfs。当测试中需要修改测试配置文件内容时,romfs不能满足要求。尽管闪存是可以在线擦写的,但是同一个地址的内容不能连续写两次,而必须擦除原先的内容才能再写下一次的内容。这使得在闪存上不易构造ext2(扩展文件系统2)之类的常见文件系统。日志闪存(Journalingflashfilesystem,简称JFFS)文件系统是一种基于FLASH存储器的日志式文件系统。它将整块FLASH都看成一个日志(log),每次写操作也都像增加日志内容一般的仅仅加在文件系统的尾部。这是一种支持读写和删除的文件系统,非常适合无盘的嵌入式系统。为了支持不断出现的各种存储器,Linux使用了一种简称为MTD(MemoryTechnologyDevice)的子系统。它提供了上层和硬件间的一个抽象接口,JFFS2文件系统是建立在MTD系统之上的。
为动态存储测试配置,本终端的根文件系统(rootfs)选择为JFFS2文件系统。在uClinux下使用JFFS2文件系统,必须在内核配置里选取存储技术设备(MTD)等相应选项。另一个关键之处是要根据应用生成一个映射文件,该映射文件包含的核心信息是FLASH分区中JFFS2分区的详细信息,如起始地址、长度、读写函数指针等等。对于一些常见的开发板,uClinux带有这个映射文件,用户只需在配置内核时选中相应选项可以。对于用户自己开发的系统,则需自己手动加上这个文件。本系统的闪存为2MB待编译完成后,将生成的映像文件通Bootloader烧入FLASH中即可。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11