技术开发 频道

并行化技术在测试工具开发中的应用

  【IT168 技术】

  注:本文为IT168&NVIDIA联合举办的“如何并行化我的应用”方案征集活动的参赛作品。本次方案征集活动详情见:http://cuda.itpub.net/thread-1299715-1-1.html。近期活动的大部分方案,将会逐步与大家分享,不可错过哦!

  CUDA ZONE专区:http://cuda.it168.com/

  CUDA技术论坛:http://cuda.itpub.net

  1.项目应用背景

  随着数据大集中趋势的发展,信息系统性能特性越来越受到重视。在大型信息系统上线运行前通常还需要聘请测试机构对系统的性能水平进行专门的测试和评估,以判断系统在目前以及将来某一个时间范围内的服务水平。

  为了测试信息系统的性能水平,就需要相应的测试策略和专业的测试工具来支持。测试策略是指测试方案的定义、测试方法的选择;测试工具是指通过软件程序模拟众多用户的同时操作,形成对被测系统的性能压力,并对结果进行收集、统计和分析,以衡量系统的性能水平。

  当CPU进入多核时代,软件架构进入分布式计算和云计算时代后,并行计算已经成为一个新的热点,为此我们尝试采用并行化技术应用到性能测试工具的研发中, 以提升性能测试工具的效率。

  2.应用的业务瓶颈、规模

  性能测试工具运行的原理是采用软件模拟一定数目的用户同时向服务器发送请求,接收和分析服务器的应答,以验证服务器性能指标。在工作时,通常可以划分为三个步骤,首先编写测试脚本记录单次操作的动作;然后依据测试策略的定义创建指定数目的线程或进程,每一个线程或进行执行脚本中记录的动作;最后,通过对运行结果的收集、分析判断系统的性能水平。

  性能测试的目的有很多种,衡量的指标也很多。在本文中我们关注的测试目的是在给定衡量指标的前提下,测试系统可支持的并发用户数量,这里的衡量指标可以指响应时间、吞吐量。响应时间是指一个事务所需要的时间,吞吐量是指服务器单位时间向外发送数据量。依据系统不同,并发的数据规模一般可达到几百或几千,甚至更多,也就是说,在我们的测试工具中要创建几百或几千个线程,可能满足工作的需要。

  目前的测试工具在给定用户数量的情况下,评价系统的响应时间和吞吐量是比较容易和高效的。但如果在给定响应时间和吞吐量的指标后,测试系统在当前条件下系统可支持的并发用户数时,就需要花费大量的时间。

  因此,为了解决这一问题,提高测试的效率,使测试更能贴近用户的真实感受,将并行化技术应用到测试工具的研发中将会取得一定的效果。

  3.具体并行化的想法

  从单纯提高主频到如今提供更多的核,以往基于文本的顺序编程模式已经不再适用,一个最简单的例子就是当PC被升级为多核处理器之后,很多应用程序的执行速度并没有任何的提高,最主要的原因是并不是所有的核都得到了充分的利用。

  为了提高测试工具的效率,需要分析工具运行时哪些模块最耗资源与处理时间,如果将这些模块并行执行,那么对于整个应用程序在多核上的性能提升会最有效果。另外,在工具运行时创建多个线程应依据负载的不同让它们运行在各自的核上。

  具体的并行化想法是:测试工具在模块划分上分为四个主模块,分别为调度模块、压力产生模块、实时收集模块、实时分析模块。其中调度模块是整个工具的核心,它实时的管理压力产生模块,控制压力的大小;压力产生模块就是一组模拟用户操作的线程,它们负责用被测系统施加压力,受调度模块管理;实时收集模块可以实时的收集压力产生模块的结果数据,提供给实时分析模块;实时分析模块通过对结果的分析,比较实时的结果与预设结果的差异,提供给调度模块,调度模块依据其结果判断是否要改变调度策略。如此实时测试,实时分析、实时调整,可以大大提高测试的效率。

  4.具体实施和效果

  在具体的实施中采用了并行编程语言OpenMP,OpenMP (Open Multi-Processing ,开放多处理 )是一种面向共享内存以及分布式共享内存的多处理器多线程并行编程语言,提供指导多线程、共享内存并行的应用程序编程接口( API ), 包含一组编译器指令、库程序、和影响运行时行为的环境变量 。OpenMP对并行处理提供了较多的支持,例如通过#pragma omp parallel num_threads(4)就可以方便的创建4个并行的线程。

  在测试工具原型的对比试验中,采用了并行化处理后,测试工具的效率有显著的提高。但采用并行化也存在一定的问题,比如线程间的通讯、切换、同步以及安全性等问题要变得更为复杂,给程序的开发提出了更多的挑战。

0
相关文章