流水线设计及测试

上一篇 / 下一篇  2011-02-13 10:20:33



流水线设计及测试



           Lujian



什么是流水线



工业中,cpu的设计中广泛应用,了解就行。将一次生产过程,分割为多个生产过程,多个过程同时作业,以增大单位时间内生产能力的作业方式,叫做流水线作业方式。基于流水线作业方式的设计,则被成为流水线设计。





流水线的优缺点:



   好处:



      1增加模块单位时间的处理能力



      2理论上流水线越长,模块处理能力越大



   缺点:



      1流水线越长,流水线万一出错,该流水线上所有请求都有可能会出错.



      2流水线越长,每个请求的处理时间在做流水切换时,会有略微延迟,造成单位请求处理时间会上升。



 



大搜索的体系结构中的流水线应用:



在网络体系结构中,可以把线程当作流水线上干活的工人,因此每类线程就作为一级流水。主要体现在单个请求的处理过程是由一个线程以同步的方式完成该请求,还是多个线程异步的完成。



cache模块为例,cache在拿到请求的第一步,需要判断该请求在自己的cache中是否有命中,命中发给自己,不命中发给query。构造环境,如果query返回很慢,而新来的请求很多,这种情况下,两种结构的区别就显现了出来。



      非流水线结构:导致cache已分配的线程均被占用,这样即使来了一个命中cache的请求,也会因为无线程分配最终超时而返回空结果。



      流水线结构:发送query的流水处于队列堆积状态,但cache从上层收请求的流水还是空闲的,如果这时候来了命中cache的请求,cache是可以正常处理的。





如何测试:



1.       
了解多线程的概念。在程序中每级流水初始化时,打出相应的log,通过观察log验证流水初始化是否正确。



2.       
流程中不同逻辑下各级流水调用是否正确。



3.       
流水内部线程数的设定是否正确及各流水线程数的设定是否合理。



4.       
验证各级流水的性能状况。



5.       
流水间接口内容传递是否正确。



6.       
注意流水的健壮性,某一级流水断掉,对于整个模块的影响进行评估。



7.       
流水内部的单元测试做,现在还没有做,现在是通过集成测试来保证的正确性,即各级流水已经串起来的状况下,一方面通过telnet的方式输入请求,待请求处理完毕之后,验证各级流水工作是否正常,同时验证输出是否正确;另一方面通过对输入接口进行压力测试的同时,不会出现请求串掉的情况。



不同的流水测试要因而异



1         
流水所做的任务为异步的流水任务。如向底层传送一个数据结构,这样的流水模块可以完全异步,需注意在发送和接收请求的过程中,需用标识指明请求。防止请求串掉;验证压力很大的情况下,该流水饱和作业,队列工作是否能够暂时存放请求;如果因所连接模块处理速度过慢,超时策略是否正常工作。



2         
如果流水做的任务是同步的任务,如存取一个数据库对象。这样势必需要加锁,验证在多线程存储的情况下是否会造成死锁;并且由于同步存储,需注意该数据库存储的性能能否符合整个系统的要求





目前测试所缺:



      各流水的单元测试工具。



      因为现在cache的各级流水都已经很成熟。并且整个流水线都是由同一个开发设计完成,因此,开发在设计过程中基本上保证了流水间接口的正确性;而各级流水作业功能如果存在问题的话,在集成测试的过程中,通过针对功能的正确性测试准备,是可以覆盖到的。因此,目前的测试还是满足要求的。



      但是如果有时间,且考虑到以后的自动化测试,各个流水性能的统计,以及加强流水的容错性设计,就必须要将测试细化到各个流水,各个功能单元。





: Cache的流水分布图:



      


 
 
 
 
 
 
 
 
 
 
 
 








TAG:

 

评分:0

我来说两句

Open Toolbar