基于TPC-W1.8的测试分析

1、引言

    事务性能处理委员会(transaction processing performancecouncil,TPC) 负责制定商务应用基准程序标准规范、性能和价格度量,并管理测试结果的发布。 TPC-W 是TPC委员会2000年发布的一个专门针对电子商务应用基准。 此基准构造了一个网上购书系统,进行大用户量的并发访问测试, 可以获得复杂电子商务环境下服务器运行的信息。 此基准选取了最能反映服务器性能的两个主要指标: 吞吐率(web interactions persecond,WIPS)和响应时间(webinteraction responsetime,WIRT)。

   之前进行测试时,使用是1.0版本, 关于怎样部署1.0版本的TPC-W,参考我之前在博客中发表的一篇文章, 这里释出文章地址:http://www.cppblog.com/LIULIANG/archive/2012/09/23/191710.html。 从官网中下载,测试效果不明显,修改参数也进行了很多次测试,但都不理想。 后我换了1.8版本的,牛津大学改进版的,在进行测试,效果挺好。 不同的测试参数会出现不同的测试结果,测试结果和测试参数相符, 同时使用MATLAB将测试数据以图形的形式表示出来。




2、测试硬件环境系统
  • 系统类型:ubuntu11.10
  • CPU型号:Inter(R) Core(TM)i7-3770 @ 3.40GHZ
  • CPU频率:6800MHZ/13600MHZ
  • CPU核数:2/4
  • 内存大小:2G



3、名词解释
3.1、测试参数
(1)参数:-EB rbe.EBTPCW1Factory 100
    说明:模仿100个浏览器,使用Browsing模式
       Browsing Mix = rbe.EBTPCW1Factory
       Shopping Mix = rbe.EBTPCW2Factory
       Ordering Mix = rbe.EBTPCW3Factory
(2)参数:-OUT run1.m
    说明:测试结果输出文件名为run1.m
(3)参数:-RU 100
    说明:系统启动时间,这里设置为100s
(4)参数:-MI 1000
     说明:稳定时间,设置为1000s
(5)参数:-RD 100
    说明:测试结束时间,设置为100s
(6)参数:-WWW http://localhost:8080/tpcw/
    说明:测试网站,设置为http://localhost:8080/tpcw/
(7)参数:-CUST 1000
     说明:客户数量,设置为1000,
(8)参数:-ITEM 1000
    说明:商品数量,设置为1000,只能设置为 其中的一种。
(9)参数:-MAXERROR 10
    说明:最大允许出错次数

3.2、测试时间计算公式

   测试时间=52+RU+MI+RD

4、测试结果
首先给出测试机的cpu信息,两个插槽,每插槽核数都为1。截图如下:


4.1、没有启动tpc-w客户端时
(1)两个处理器,每个处理器核数都为1系统性能截图如下:

(2)四个处理器,每个处理器核数都为1。系统性能截图如下:

可以系统CPU使用率和内存使用率都是很低的,此时系统处于空闲状态。

4.2、100个EB(模拟浏览器)测试

4.2.1 、模式1测试
(1)测试参数:
  • -EB rbe. EBTPCW1Factory 100 #模拟100个浏览器,进行购物模式测试
  • -OUT tpcs0101.m #测试结果文件名
  • -RU 100 #系统启动时间
  • -MI 50 #稳定时间
  • -RD 10 #测试时间间隔
  • -WWW http://localhost:8080/ #测试网站
  • -CUST 800 #模拟客户数量
  • -ITEM 1000 #模拟商品数量
(2)服务器系统性能
截图如下:

   cpu平均使用率约为26.7%,内存使用率约为40%,很明显,内存使用率变化不大, 但是cpu使用率是明显比未启动tpc-w客户端时要高了,而且接受的数据量也是明显提高了, 平均速度接近0.5MiB/s。

(3)使用matlab绘制测试结果
吞吐量(WIPS)

   吞吐量指单位时间内被测系统能够处理的交易数。 度量单位:WIPS(Web交易数/秒)。该指标反映了系统用户级的事务处理能力, 吞吐量越大,服务器的性能就越好。当前的测试结果平均事物处理能力是14.00。

   上述图中,红点表示某个时刻系统的事物处理情况;蓝色竖线是两个分界线, 第一个分界线是系统开始稳定的时候(系统稳定时间可预先设定), 第二分界线是系统一次MI(测试间隔)的截止时间,所以两个分界线间隔的时间值等于MI值 ,即命令中的MI值50秒;黑色线是每个时刻的平均WIPS值连接出来的;绿色的横线则是平均的WIPS值。

   基准给出对WIPS应该满足(浏览器数(EB数量)/14)<WIPS<(浏览器数(EB数量)/7), 在测试结果中, 计算得到平均WIPS是14.00,满足:7.14<14.00<14.29。

响应时间(WIRT)

   响应时间是服务器对用户每个请求的响应时间的平均值, 度量单位是WlRT,WlRT是指从模拟浏览器EB(emulate browser)请求Web交易所发出的第一个字节开始, 到EB收到交易最后一个字节结束的时间间隔。响应时间越短, 服务器性能越好。显示服务器14个页面的响应时间。 当前的测试结果平均WIRT是34.6462。

思考时间(Think时间)

   思考时间用于模拟用户在浏览不同页面时的间隔时间。 具体而言,指从模拟浏览器EB收到上一个交易最后一个字节的时间开始, 到EB发出第一个字节请求下一次交易的时问间隔。测量阶段, 每次Web交易前的平均思考时间在7~8s之间。 结果报告给出了平均思考时间以及思考时间的分布图, 理论上思考时间应按照负指数分布。本次测试中平均思考时间为7.07s。

4.3、500个EB(模拟浏览器)测试

4.3.1 、模式1测试
(1)测试参数:
  • -EB rbe. EBTPCW1Factory 500 #模拟500个浏览器,进行购物模式测试
  • -OUT tpcs0105.m #测试结果文件名
  • -RU 100 #系统启动时间
  • -MI 50 #稳定时间
  • -RD 10 #测试时间间隔
  • -WWW http://localhost:8080/ #测试网站
  • -CUST 800 #模拟客户数量
  • -ITEM 1000 #模拟商品数量
(2)服务器系统性能
截图如下:

   可以看出,测试系统的cpu使用率接近50%,而内存使用率也接近50%, 对网络带宽占用量大概是5MiB/s比模拟100个EB是有明显的提高。

(3)使用matlab绘制测试结果
吞吐量(WIPS)

响应时间(WIRT)

WIRT平均值:63.3335
思考时间(Think时间)

4.4、1000个EB(模拟浏览器)测试

4.4.1、模式1测试
(1)测试参数:
  • -EB rbe. EBTPCW1Factory 1000 #模拟1000个浏览器
  • -OUT tpcs0110.m #测试结果文件名
  • -RU 100 #系统启动时间
  • -MI 50 #稳定时间
  • -RD 10 #测试时间间隔
  • -WWW http://localhost:8080/ #测试网站
  • -CUST 1000 #模拟客户数量
  • -ITEM 1000 #模拟商品数量
(2)服务器系统性能
截图如下:

   当我们增加到1000个EB时,如果我们在使用两核的CPU将不能承担, 故这里增加两个CPU,增加后可以处理客户的请求。 测试系统的cpu平均使用率接近75%,而内存使用率也接近50%, 对网络带宽占用量大概是6MiB/s。

(3)使用matlab绘制测试结果
吞吐量(WIPS)

响应时间(WIRT)

WIRT平均值:83.4638
思考时间(Think时间)

4.4.2、模式2测试
(1)测试参数:
  • -EB rbe. EBTPCW2Factory 1000 #模拟1000 个浏览器
  • -OUT tpcs0210.m #测试结果文件名
  • -RU 100 #系统启动时间
  • -MI 50 #稳定时间
  • -RD 10 #测试时间间隔
  • -WWW http://localhost:8080/ #测试网站
  • -CUST 1000 #模拟客户数量
  • -ITEM 1000 #模拟商品数量
(2)服务器系统性能
截图如下:

   可以看出,测试系统的cpu使用率接近55%, 而内存使用率也接近50%。对网络带宽占用量大概是7MiB/s。

(3)使用matlab绘制测试结果
吞吐量(WIPS)

响应时间(WIRT)

WIRT平均值:40.9428
思考时间(Think时间)

4.4.3、模式3测试
(1)测试参数:
  • -EB rbe. EBTPCW3Factory 1000 #模拟1000 个浏览器
  • -OUT tpcs0310.m #测试结果文件名
  • -RU 100 #系统启动时间
  • -MI 50 #稳定时间
  • -RD 10 #测试时间间隔
  • -WWW http://localhost:8080/ #测试网站
  • -CUST 1000 #模拟客户数量
  • -ITEM 1000 #模拟商品数量
(2)服务器系统性能
截图如下:

   可以看出,测试系统的cpu使用率接近40%, 而内存使用率也接近50%,对网络带宽占用量大概是6MiB/s。

(3)使用matlab绘制测试结果
吞吐量(WIPS)

响应时间(WIRT)

WIRT平均值:19.0554
思考时间(Think时间)




5、测试数据分析
% -----------------------------------------------------------------------
%  说明:该文件就是测试的结果文件,如果我们在matlab进行仿真时,就必须将该文
%  件命令为tpcw.m,这里给出一些地方的详细自己的理解,这里理解是从源码中得出
%  的,故应该是没问题的。
%  主要是关于WIRT的。
% -----------------------------------------------------------------------
%声明函数tpcw,返回矩阵dat,不需要传入参数
function [dat] = tpcw()
%对初始化(Initial Home)页面访问响应时间记录
dat.wirt{1}.h = [
0       0                     
59950   0   
%---------------------
%这里省略了为0的情况        
%---------------------
];
dat.wirt{1}.samples = 0;
dat.wirt{1}.sum     = 0;
dat.wirt{1}.sumSq   = 0;
dat.wirt{1}.avg     = NaN;
dat.wirt{1}.stddev  = NaN;
%对管理员确认(Admin Confirm)页面访问响应时间记录
dat.wirt{2}.h = [
0       12          %0-49ms访问次数有12次
50      7           %50-99ms访问次数有7次
%---------------------
%这里省略了为0的情况        
%---------------------
];
dat.wirt{2}.samples = 19;
dat.wirt{2}.sum     = 786;
dat.wirt{2}.sumSq   = 38492;
dat.wirt{2}.avg     = 41.36842105263158;
dat.wirt{2}.stddev  = 17.735514552848294;
%对管理员请求(Admin Request)页面访问响应时间记录
dat.wirt{3}.h = [
0       20          
%---------------------
%这里省略了为0的情况        
%---------------------
];
dat.wirt{3}.samples = 20;
dat.wirt{3}.sum     = 189;
dat.wirt{3}.sumSq   = 2103;
dat.wirt{3}.avg     = 9.45;
dat.wirt{3}.stddev  = 3.980891859872609;
%对畅销书(Best Sellers)页面访问响应时间记录
dat.wirt{4}.h = [
0       239         
50      1288        
100     26          
150     3           
%---------------------
%这里省略了为0的情况        
%---------------------                     
59950   0           
];
dat.wirt{4}.samples = 1556;
dat.wirt{4}.sum     = 100050;
dat.wirt{4}.sumSq   = 6925372;
dat.wirt{4}.avg     = 64.29948586118252;
dat.wirt{4}.stddev  = 17.785649590475984;
%对购买确认(Buy Confirm)页面访问响应时间记录
dat.wirt{5}.h = [
0       121         
50      4           
%---------------------
%这里省略了为0的情况        
%---------------------         
59950   0           
];
dat.wirt{5}.samples = 125;
dat.wirt{5}.sum     = 2900;
dat.wirt{5}.sumSq   = 82366;
dat.wirt{5}.avg     = 23.2;
dat.wirt{5}.stddev  = 10.985809028014277;
%对购买请求(Buy Request)页面访问响应时间记录
dat.wirt{6}.h = [
0       124         
50      7           
%---------------------
%这里省略了为0的情况        
%---------------------
59950   0           
];
dat.wirt{6}.samples = 131;
dat.wirt{6}.sum     = 3031;
dat.wirt{6}.sumSq   = 89205;
dat.wirt{6}.avg     = 23.137404580152673;
dat.wirt{6}.stddev  = 12.067091934994636;
%对用户注册(Customer Registration)页面访问响应时间记录
dat.wirt{7}.h = [
0       136         
50      0                    
%---------------------
%这里省略了为0的情况        
%---------------------          
59950   0           
];
dat.wirt{7}.samples = 136;
dat.wirt{7}.sum     = 769;
dat.wirt{7}.sumSq   = 5925;
dat.wirt{7}.avg     = 5.654411764705882;
dat.wirt{7}.stddev  = 3.4049675572234084;
%对主页(Home Page)页面访问响应时间记录
dat.wirt{8}.h = [
0       4094        
50      20          
100     3           
150     0           
%---------------------
%这里省略了为0的情况        
%---------------------
59950   0           
];
dat.wirt{8}.samples = 4117;
dat.wirt{8}.sum     = 82893;
dat.wirt{8}.sumSq   = 1980381;
dat.wirt{8}.avg     = 20.134321107602624;
dat.wirt{8}.stddev  = 8.69680255314607;
%对新产品(New Products)页面访问响应时间记录
dat.wirt{9}.h = [
0       141         
50      1346        
100     39          
150     3           
%---------------------
%这里省略了为0的情况        
%---------------------           
59950   0           
];
dat.wirt{9}.samples = 1529;
dat.wirt{9}.sum     = 103223;
dat.wirt{9}.sumSq   = 7434825;
dat.wirt{9}.avg     = 67.51013734466972;
dat.wirt{9}.stddev  = 17.4620225659466;
%对订单显示(Order Display)页面访问响应时间记录
dat.wirt{10}.h = [
0       23          
50      9           
%---------------------
%这里省略了为0的情况        
%---------------------
59950   0           
];
dat.wirt{10}.samples = 32;
dat.wirt{10}.sum     = 1539;
dat.wirt{10}.sumSq   = 84575;
dat.wirt{10}.avg     = 48.09375;
dat.wirt{10}.stddev  = 18.164800052230138;
%对订单查询(Order Inquiry)页面访问响应时间记录
dat.wirt{11}.h = [
0       36          
50      0           
%---------------------
%这里省略了为0的情况        
%---------------------          
59950   0           
];
dat.wirt{11}.samples = 36;
dat.wirt{11}.sum     = 170;
dat.wirt{11}.sumSq   = 1006;
dat.wirt{11}.avg     = 4.722222222222222;
dat.wirt{11}.stddev  = 2.3759338644825663;
%对产品详情(Product Detail)页面访问响应时间记录
dat.wirt{12}.h = [
0       2988        
50      2           
100     1           
%---------------------
%这里省略了为0的情况        
%---------------------          
59950   0           
];
dat.wirt{12}.samples = 2991;
dat.wirt{12}.sum     = 26995;
dat.wirt{12}.sumSq   = 325373;
dat.wirt{12}.avg     = 9.02540956201939;
dat.wirt{12}.stddev  = 5.227427757572945;
%对搜索请求(Search Request)页面访问响应时间记录
dat.wirt{13}.h = [
0       1688        
50      7           
100     1           
150     1           
200     0           
%---------------------
%这里省略了为0的情况        
%---------------------
59900   0           
59950   0           
];
dat.wirt{13}.samples = 1697;
dat.wirt{13}.sum     = 30245;
dat.wirt{13}.sumSq   = 670697;
dat.wirt{13}.avg     = 17.822628167354154;
dat.wirt{13}.stddev  = 8.807895794762379;
%对搜索结果(Search Results)页面访问响应时间记录
dat.wirt{14}.h = [
0       959         
50      595         
100     21          
150     0           
%---------------------
%这里省略了为0的情况        
%---------------------          
59950   0           
];
dat.wirt{14}.samples = 1575;
dat.wirt{14}.sum     = 70222;
dat.wirt{14}.sumSq   = 3943840;
dat.wirt{14}.avg     = 44.58539682539683;
dat.wirt{14}.stddev  = 22.719326282865246;
%对购物车(Shopping Cart)页面访问响应时间记录
dat.wirt{15}.h = [
0       285         
50      0           
%---------------------
%这里省略了为0的情况        
%---------------------          
59950   0           
];
%该类型的测试总数量
dat.wirt{15}.samples = 285;
%该类型的响应时间总和
dat.wirt{15}.sum     = 5062;
%该类型的响应时间的平方和
dat.wirt{15}.sumSq   = 104248;
%该类型的响应时间的平均值
dat.wirt{15}.avg     = 17.76140350877193;
%该类型的响应时间的标准差
dat.wirt{15}.stddev  = 7.093306812688639;

%---------------------------------------------------------------------
%说明:这里给出关于以上几个参数的计算公式
%假设该类型的访问请求次数为5次,5次的响应时间分别为:t1,t2,t3,t4,t5。
%samples = 5 
%sum = t1 + t2 + t3 + t4 + t5
%sumSq = t1^2 + t2^2 + t3^2 + t4^2 + t5^2
%avg = sum/samples
%stddev = {[(t1-t)^2+(t2-t)^2+(t3-t)^2+(t4-t)^2+(t5-t)^2]/samples}的算术平方根
%(源码中给出的计算stddev的公式为:
( samp * sumSq - ((double) sum) * sum ) / (samp * samp))
其中:
(1)samp就是这里的samples(该类型的测试总数量)
          sumSq:该类型的响应时间的平方和
          sum:该类型的响应时间总和
(2)该公式就是从{[(t1-t)^2+(t2-t)^2+(t3-t)^2+(t4-t)^2+(t5-t)^2]/samples}
   推导出来的。 
%---------------------------------------------------------------------
%一下就是思考时间的数据部分,关于思考时间我没有过多的去理解它不过用上面的基
%础再来理解它并不是难事,只是现在我还用不到它,^_^
dat.tt.h = [
0       185         
100     191         
200     222         
%---------------------
%这里省略了大量数据      
%---------------------
74900   0           
];
dat.tt.samples = 14249;
dat.tt.sum     = 99494501;
dat.tt.sumSq   = 1414863489865;
dat.tt.avg     = 6982.560249842094;
dat.tt.stddev  = 7109.112914241501;
dat.trans = [
      0      0      0      0      0      0      0    306      0      0      0      0      0      0      0
      0      0      0      0      0      0      0     28      0      0      0      0      0      0      0
      0     28      0      0      0      0      0      3      0      0      0      0      0      0      0
      0      0      0      0      0      0      0   1480      0      0      0    214   1480      0     16
      0      0      0      0      0      0      0      7      0      0      0      0    222      0      0
      0      0      0      0    229      0      0     13      0      0      0      0      0      0      7
      0      0      0      0      0    249      0     10      0      0      0      0      7      0      0
      0      0      0   3205      0      0      0      0   3153      0     73      0   1621      0    392
      0      0      0      0      0      0      0    101      0      0      0   3002     14      0     20
      0      0      0      0      0      0      0      3      0      0      0      0     59      0      0
      0      0      0      0      0      0      0      2      0     62      0      0      8      0      0
      0      0     31      0      0      0      0   5013      0      0      0    852     89      0     65
      0      0      0      0      0      0      0    263      0      0      0      0      0   3239     15
      0      0      0      0      0      0      0   1176      0      0      0   1999     27      0     16
      0      0      0      0      0      0    267    263      0      0      0      0      0      0     59
];

dat.interact = [      0     28     31   3205    229    249    267   8668   3153     62     73   6067   3527   3239    590];
dat.wips = [
5
8
5
5
10
13
8
14
11
13
11
14
9
11
10
15
%---------------------
%这里省略了大量数据      
%---------------------
0
0
];
%每次发起访问的开始时间ms
dat.starttimes = [
0
163
225
492
577
%---------------------
%这里省略了大量数据      
%---------------------
2051300
2051313
2051626
];
%每次发起访问的结束时间ms,结束时间-开始时间就是此次访问的响应时间
dat.endtimes = [
73
74
279
530
618
797
864
1000
%---------------------
%这里省略了大量数据      
%---------------------
2051323
2051326
2051638
];

dat.numinteractions = 29082;
dat.startRU =  1374887265786;
dat.startMI =  1374887817786;
dat.startRD =  1374888817786;
dat.term    =  1374889317786;
dat.slowDown = 1.0;
% Errors
% Total Errors: 0
以上就是每次测试生成的数据的,这里省略了很多的数据,只是截取了一小部分数据进行分析。



6、matlab绘制图形一点讲解

6.1、wips图中红点
我在wips图中每个2s就一条竖线,并放大图形,如下图:

   上图我们可以看到,实际上每一个时刻, 只会绘制一个红色小点(一条竖线时候穿过一个红色小点), 代表该时刻的吞吐量,这里不要错误的认为一个时刻会有多个吞吐量。

6.2、wirt图中坐标含义

   (1)在wirt图中的横坐标表示时间,纵坐标表示比例, 特别这主意这个横坐标并不是我们认为的每一给时刻所占的比例, 这里我用一个例子记性说明。 假如0-1s占80%,1-2s占10%,2-3s占10%,一以1s单位, 那么在图中的表示成三个点, 三点坐标就是(1,20) :1-80%=20%
                 (2,10) :1-80%-10%=10%
                 (3,0) :1-80%-10%-10%=0
这些都是从wirti.m文件中得出的结论。

   (2)关于每个页面的标准请求时间,我在wirtcon.m下找到了四种标准, 默认使用的是第三种标准,这里将 wirtcon.m释出:

[root@localhost matlab]# cat  wirtcon.m
function [n] = wirtcon(i)	
%-------------------------------------------------------------------------
% function [n] = wirtcon(i)
%
% Returns the 90% WIRT contraint for a given interaction number.
%-------------------------------------------------------------------------

%'Initial Home', 'Admin Confirm', 'Admin Request', 'Best Sellers', 'Buy Confirm', 'Buy Request', 'Customer Regist.', 'Home'
%'New Products', 'Order Display', 'Order Inquiry', 'Product Detail', 'Search Request', 'Search Results', 'Shopping Cart'

% Official TPC-W Spec
% n = [1 20 1 5 5 1 2 1 5 2 1 1 1 10 1];

% Ours.
% n = [5 20 5 5 5 5 2 5 5 2 5 5 5 10 5];

% Single deadline class  :不知道该怎样翻译
n = [0.250 0.250 0.250 0.250 0.250 0.250 0.250 0.250 0.250 0.250 0.250 0.250 0.250 0.250 0.250];

% Official TPC-W Spec v1.8
%n = [3 20 3 5 5 3 3 3 5 3 3 3 3 10 3];

n = n(i);
我们将wirt图进行放大,并使用两种不同的标准。如下:
第三种标准(Single deadline class)

这种标准下Search Request,Product Detail,Home,Order Inquiry是不符合标准的。别的事都符合。
第四种标准(Official TPC-W Spec v1.8)

这种标准下我们是的响应时间90%都是满足要求的。



7、总结
  • TPC-W确实是CPU和IO密集型的应用系统。
  • 在使用700-1000个模拟浏览器进行测试时确实可以达到增加负载的作用。
  • 不同的参数,会影响测试结果,具体情况要通过多次的调节参数方能达到预期效果。
  • 不同模式对系统性能的需求也是不同的,模式1需求量最大,模式2需求量次之,模式3最低。



8、下载专区
  • tpcw.m
  • 基于TPC-W1.8的测试分析(最后在统一修订)