一种面向嵌入式系统的磁盘I/O测试系统转让专利

申请号 : CN201110338244.7

文献号 : CN102393829B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘发贵张晓杰刘飞谢然

申请人 : 华南理工大学

摘要 :

本发明公开了一种面向嵌入式系统的磁盘I/O测试系统,包括客户端、目标机端,客户端与目标机端网络连接,所述客户端包括:传输控制模块、数据处理模块、显示交换模块;所述目标机端包括:测试代理模块、测试执行模块。本发明的有益效果是测试在特定系统中嵌入式磁盘I/O的性能、对系统的磁盘I/O进行实时监测并分析是否存在瓶颈、对进程的磁盘I/O情况进行实时监测并实时获取系统中运行的软件对磁盘的I/O访问情况、对磁盘的每一次I/O访问进行跟踪记录并可存入数据库,本发明一方面是驱动层对磁盘I/O进行监测,另一方面可在磁盘测试中使用收集到的日常读写数据作为输入源以模拟实际应用,最终得到对被测试磁盘真实可靠的性能评价。

权利要求 :

1.一种面向嵌入式系统的磁盘I/O测试系统,包括客户端、目标机端,客户端与目标机端网络连接,其特征在于:所述客户端包括:

传输控制模块,用于接收显示交换模块的测试指令并向目标机端的测试代理模块转发该测试指令,以及转发测试代理模块返回的测试数据至数据处理模块;

数据处理模块,用于处理接收到的测试数据,并将处理后的测试数据输出至显示交换模块;

显示交换模块,用于显示接收到的测试数据,以及接受用户的测试指令输入并转发测试指令至传输控制模块;

所述目标机端包括:

测试代理模块,用于接测试指令并发送测试指令至测试执行模块,并转发测试执行模块返回的测试数据至客户端的传输控制模块;

测试执行模块,用于执行接收到的测试指令,返回测试数据;

测试执行模块包括:

磁盘I/O性能测试子模块,通过人为产生负载对磁盘的I/O性能进行测试;

系统I/O监测子模块,通过文件系统动态从系统内核读出信息,对整个系统的磁盘I/O情况的监测;

进程I/O监测子模块,在进程I/O操作开始时获取时间,I/O操作结束时在回调函数处再获取时间,并返回获取的进程信息;

I/O trace收集器子模块,在驱动程序的ATA层截获I/O信息。

2.根据权利要求1所述的面向嵌入式系统的磁盘I/O测试系统,其特征在于所述的通过人为产生负载对磁盘的I/O性能进行测试包括以下步骤:首先人为建立测试文件,获取系统时间,将系统时间按字符写,获取系统时间,发送测试结果给客户端,获取系统时间,将系统时间按字符读,获取系统时间,发送测试结果,获取系统时间,将系统时间按块写,获取系统时间,发送测试结果,获取系统时间,将系统时间按块读,获取系统时间,发送测试结果,删除测试文件,完成整个测试。

3.根据权利要求1所述的面向嵌入式系统的磁盘I/O测试系统,其特征在于:所述的文件系统为/proc文件系统。

4.根据权利要求1所述的面向嵌入式系统的磁盘I/O测试系统,其特征在于:客户端还包括用于储存测试数据的数据库模块。

5.根据权利要求1所述的面向嵌入式系统的磁盘I/O测试系统,其特征在于:所述的测试执行模块运行于嵌入式Linux的内核空间中。

说明书 :

一种面向嵌入式系统的磁盘I/O测试系统

技术领域

[0001] 本发明涉及信息存储技术领域,特别涉及一种面向嵌入式系统的磁盘I/O测试系统。

背景技术

[0002] 随着计算机技术和通讯技术相结合的信息时代的飞速发展,3c(即计算机、通信、消费电子)一体化趋势日益明显。嵌入式系统凭借自身特点成为3c一体化的理想载体,于是,对嵌入式系统的研究与开发成为当前的一个热点。信息时代对嵌入式系统的存储器性能和容量要求越来越高,不像早期的嵌入式系统没有外存储器或者只有简单的外存储设备。磁盘已逐渐引入嵌入式系统,磁盘技术的革新,特别是微磁盘的产生,使磁盘必将成为一种嵌入式系统外存储设备的主要存储器之一。
[0003] 当前引入磁盘的嵌入式系统发展迅速,苹果计算机ipod成功带起磁盘MP3的风潮,许多厂商纷纷投入这类便携式媒体播放器的研发行列,而且功能越来越多样化,微磁盘成为这类产品中最昂贵的部件。嵌入式数字磁盘录像机以其高性能,低成本,更稳定的优势逐渐全面进入小区,楼宇,金融测试领域。还有智能网络磁盘也成为网络发展的关键设备基础。特别随着数字家庭概念的推广,各种家电产品都开始了智能化的转变,与计算机技术的高度融合,磁盘被作为数字家电存储信息的主要存储设备如磁盘播放机、机顶盒、点歌机等等。在信息化的发展下,越来越多的嵌入式系统需要处理大量的信息。由于磁盘具有容量大,价格便宜,性价比高等优点,可以预见,未来将有大量的嵌入式系统需要选择磁盘作为外存储设备。
[0004] 在嵌入式领域,VxWorks、Windows CE以及嵌入式Linux是具有代表性的三种嵌入式操作系统。虽然VxWorks作为实时操作系统,在国防、工业上有着很大的优势,但是由于其昂贵的费用、相对有限的技术支持,一定程度上阻碍其广泛应用;Windows CE有着良好的开发调试环境和友好的图形用户界面,在嵌入式领域有着一定的市场,但是Windows CE是非开放性OS,第三方是很难实现产品定制的,版权费用也是厂商们不得不考虑的问题;相反,对于嵌入式Linux来说,其免费、开放源码、强大的开源社区支持、可定制性、跨平台、可裁剪、健壮稳定等特性,使得其在嵌入式操作系统中得以占有较大比重。但是在嵌入式领域中,嵌入式系统高更新速度,使得系统的升级较为频繁,同时对磁盘I/O要求也提高,用户在使用过程中不能及时地了解嵌入式系统的运作情况,缺乏对磁盘I/O与系统适应性测试。

发明内容

[0005] 为了解决上述现有技术中的不足,本发明提供了一种能够测试嵌入式磁盘I/O性能,实时监测并分析磁盘I/O存储瓶颈的面向嵌入式系统的磁盘I/O测试系统。
[0006] 本发明的技术方案是:一种面向嵌入式系统的磁盘I/O测试系统,包括客户端、目标机端,客户端与目标机端网络连接,所述客户端包括:传输控制模块,用于接收显示交换模块的测试指令并向目标机端的测试代理模块转发该测试指令,以及转发测试代理模块返回的测试数据至数据处理模块;数据处理模块,用于处理接收到的测试数据,并将处理后的测试数据输出至显示交换模块;显示交换模块,用于显示接收到的测试数据,以及接受用户的测试指令输入并转发测试指令至传输控制模块;所述目标机端包括:测试代理模块,用于接测试指令并发送测试指令至测试执行模块,并转发测试执行模块返回的测试数据至客户端的传输控制模块;测试执行模块,用于执行接收到的测试指令,返回测试数据。
[0007] 上述方案中,测试执行模块包括:磁盘I/O性能测试子模块,通过人为产生负载对磁盘的I/O性能进行测试;系统I/O监测子模块,通过文件系统动态从系统内核读出信息,对整个系统的磁盘I/O情况的监测;进程I/O监测子模块,在进程I/O操作开始时获取时间,I/O操作结束时在回调函数处再获取时间,并返回获取的进程信息;I/O trace收集器子模块,在驱动程序的ATA层截获I/O信息。
[0008] 所述的通过人为产生负载对磁盘的I/O性能进行测试包括以下步骤:首先按字符写,发送测试结果给客户端,再按字符读,发送测试结果,再按块写,发送测试结果,最后按块读,发送测试结果,删除测试文件,完成整个测试。
[0009] 所述的文件系统为/proc文件系统。
[0010] 客户端还包括用于储存测试数据的数据库模块。
[0011] 所述的测试执行模块运行于嵌入式Linux的内核空间中。
[0012] 与现有技术相比,本发明的有益效果是:一、测试在特定系统中嵌入式磁盘I/O的性能,分析其是否能满足系统的需求。二、对系统的磁盘I/O进行实时监测,分析是否存在瓶颈。三、对进程的磁盘I/O情况进行实时监测,实时获取系统中运行的软件对磁盘的I/O访问情况。一方面可维护系统安全,因为进程是进行信息安全研究工作所关注的重点,它是计算机系统的活跃体,任何系统安全问题最终都是由计算机系统的某个进程引起的。另一方面为软件的优化提供依据。四、对磁盘的每一次I/O访问进行跟踪记录,并可存入数据库。一方面是驱动层对磁盘I/O进行监测,另一方面可在磁盘测试中使用收集到的日常读写数据作为输入源以模拟实际应用,最终得到对被测试磁盘真实可靠的性能评价。这些数据在系统升级新的存储磁盘、对不同的实际应用进行评估等实验中都有很高的价值。

附图说明

[0013] 图1为本发明组成示意图;
[0014] 图2为磁盘I/O性能测试流程设计图;
[0015] 图3为进程I/O监测框架设计图;
[0016] 图4为I/O trace收集器框架设计图;
[0017] 图5为测试代理流程设计图。

具体实施方式

[0018] 以下结合附图对本发明进一步说明。
[0019] 实施例一
[0020] 如图1所示,一种面向嵌入式系统的磁盘I/O测试系统,包括客户端、目标机端,客户端与目标机端网络连接,所述客户端包括:传输控制模块,用于接收显示交换模块的测试指令并向目标机端的测试代理模块转发该测试指令,以及转发测试代理模块返回的测试数据至数据处理模块;数据处理模块,用于处理接收到的测试数据,并将处理后的测试数据输出至显示交换模块;显示交换模块,用于显示接收到的测试数据,以及接受用户的测试指令输入并转发测试指令至传输控制模块;数据库模块,用于储存测试数据;所述目标机端包括:测试代理模块,用于接测试指令并发送测试指令至测试执行模块,并转发测试执行模块返回的测试数据至客户端的传输控制模块;运行于linux内核空间的测试执行模块,用于执行接收到的测试指令,返回测试数据;测试执行模块包括:磁盘I/O性能测试子模块,通过人为产生负载对磁盘的I/O性能进行测试;系统I/O监测子模块,通过/proc文件系统动态从系统内核读出信息,对整个系统的磁盘I/O情况的监测;进程I/O监测子模块,在进程I/O操作开始时获取时间,I/O操作结束时在回调函数处再获取时间,并返回获取的进程信息;I/O trace收集器子模块,在驱动程序的ATA层截获I/O信息。
[0021] 如图2所示,所述的通过人为产生负载对磁盘的I/O性能进行测试包括以下步骤:建立测试文件,获取系统时间,按字符写,调用fsync()写回脏块,获取系统时间,发送测试结果给客户端,获取系统时间,按字符读,获取系统时间,发送测试结果,获取系统时间,按块写,调用fsync()写回脏块,获取系统时间,发送测试结果,获取系统时间,按块读,获取系统时间,发送测试结果,删除测试文件,完成整个测试。
[0022] [0020]如图5所示,测试代理模块的工作流程为:响应客户端的连接请求并建立连接,接收客户端的测试指令,判断指令的具体内容启动响应的功能模块,将功能模块测试所得的数据返回给客户端。
[0023] 如图1至图5所示,本系统的具体工作流程:客户端的前台是与用户交互的界面,负责用户选择操作和显示测试结果。后台负责控制控制测试代理执行相应操作、接收测试代理传送的数据和数据的处理。客户端采用Eclipse插件的形式运行在客户机上。
[0024] 显示交互界面显示测试结果与用户控制界面,分为四个界面,分别是:磁盘I/O性能测试、系统I/O监测、进程I/O监测和I/O trace收集器。用户通过对每个界面上的操作来选择执行要进行的测试与监测。
[0025] 传输控制模块根据用户在界面上选择要执行的操作,以命令的形式发给测试代理模块,控制测试代理模块执行相应操作,同时接收测试代理的数据,将其交给数据处理模块。
[0026] 数据处理模块负责数据处理。一、进行小端到大端的处理,由于客户端采用Eclipse插件的形式,基于平台无关的Java进行开发,字节序为大端(Big-Endian),而测试代理一般位于X86或ARM的嵌入式平台下,均为小端(Little-Endian),所以在客户端读取数据时要调整字节顺序,以免字节序的差异引起数据解析错误。二、对数据进行适应显示的处理,包括通过swtchart插件进行图形化处理。三、对数据进行存入数据库模块的处理。
[0027] 测试代理模块与客户端建立连接并接收用户的测试指令,同时负载启动各功能模块并对它们进行控制和交互。在测试开始时,在目标机上运行目标机端,客户机上运行客户端。测试代理先建立socket连接,然后将其与本机地址以及一个本地端口号绑定,然后在相应的socket上监听。客户端发送连接请求,测试代理与其建立连接。随后测试代理模块接收客户端发送的指令,并对指令进行解析。如果是结束命令,测试代理模块结束,如果是进行测试,测试代理父进程就创建一个子进程。测试代理父进程是服务进程,各个子进程是工作线程。服务进程的任务是与客户端进行交互,并且操作与工作线程共享的数据。工作线程的任务是调用相应的功能模块,执行相应的功能。各功能模块产生的测试结果数据,由测试代理每秒传送一次给客户机。
[0028] 系统I/O监测模块使用proc文件系统动态从系统内核读出信息。通过从/proc文件系统来获得是最便捷的途径。因为/proc文件系统不是在虚拟文件系统层和映射层来获得I/O信息,而是在通用块层和I/O调度层。所以能从proc文件系统获取的整个系统的磁盘I/O信息是高效且准确的。
[0029] 进程I/O监测子模块对进程的磁盘I/O的监测,应该要获取进程名,进程号,读写判断,读写位置和起止时间等信息。监测的必须是能真正产生实际的磁盘I/O操作的信息,所以要先找到能获取这些信息的I/O层,经研究发现在块设备层能截获这些信息。在获取进程I/O信息的过程中,我们应该首先要获得当前进程,再找到对应进程的I/O操作信息,在I/O操作开始时获取时间,I/O结束时在回调函数处再获取时间。将获取的进程信息传给测试代理模块,再由测试代理模块传送给客户端,客户端将进程I/O显示,同时可以选择存入数据库模块。
[0030] I/O trace收集器模块是在驱动程序的ATA层截获I/O信息,将这些I/O信息实时显示给用户可实现对ATA层的I/O监测,也能将这些I/O信息存入数据库模块,作为I/O输入,用于仿真测试。I/O trace的收集应该在磁盘驱动程序中截获,因为磁盘驱动层序直接与磁盘交互,在此截获的I/O信息是磁盘立即进行I/O操作。Linux下的I/O请求都是用request结构体来表示的,该结构体基本包括了上述进行I/O跟踪所需要的所有信息,但是,进行I/O请求的跟踪,还需要知道该请求的开始时间和结束时间。我们通过在磁盘驱动开始处理I/O请求时获取系统时间,在I/O操作结束后在驱动程序的结束处理函数触发时获取系统时间,这样能获得比较精准的磁盘I/O的开始时间和结束时间。在安装内核模块时,kprobe被设置在驱动程序中,当系统运行到要截获信息的驱动程序处,跳转到I/O收集模块,I/O收集模块截获I/O信息,并将其放入缓存中。I/O收集模块的工作完成后,内核返回原来的执行流程。测试代理每隔1秒向proc接口发出读请求,从缓存中读取数据。测试代理模块拿到数据后,发送给客户端。数据处理器负责对数据进行解析。并更新GUI上的组件,或存入数据库。