lly00 2010-07-22
#iostat-x1
avg-cpu:%user%nice%sys%idle
16.240.004.3179.44
Device:rrqm/swrqm/sr/sw/srsec/swsec/srkB/swkB/savgrq-szavgqu-szawaitsvctm%util
/dev/cciss/c0d0
0.0044.901.0227.558.16579.594.08289.8020.5722.3578.215.0014.29
/dev/cciss/c0d0p1
0.0044.901.0227.558.16579.594.08289.8020.5722.3578.215.0014.29
/dev/cciss/c0d0p2
0.000.000.000.000.000.000.000.000.000.000.000.000.00
上面的iostat输出表明秒有28.57次设备I/O操作:总IO(io)/s=r/s(读)+w/s(写)=1.02+27.55=28.57(次/秒)其中写操作占了主体(w:r=27:1)。
平均每次设备I/O操作只需要5ms就可以完成,但每个I/O请求却需要等上78ms,为什么?因为发出的I/O请求太多(每秒钟约29个),假设这些请求是同时发出的,那么平均等待时间可以这样计算:
平均等待时间=单个I/O服务时间*(1+2+...+请求总数-1)/请求总数
应用到上面的例子:平均等待时间=5ms*(1+2+...+28)/29=70ms,和iostat给出的78ms的平均等待时间很接近。这反过来表明I/O是同时发起的。
每秒发出的I/O请求很多(约29个),平均队列却不长(只有2个左右),这表明这29个请求的到来并不均匀,大部分时间I/O是空闲的。
一秒中有14.29%的时间I/O队列中是有请求的,也就是说,85.71%的时间里I/O系统无事可做,所有29个I/O请求都在142毫秒之内处理掉了。
delta(ruse+wuse)/delta(io)=await=78.21=>delta(ruse+wuse)/s=78.21*delta(io)/s=78.21*28.57=2232.8,表明每秒内的I/O请求总共需要等待2232.8ms。所以平均队列长度应为2232.8ms/1000ms=2.23,而iostat给出的平均队列长度(avgqu-sz)却为22.35,为什么?!因为iostat中有bug,avgqu-sz值应为2.23,而不是22.35。