一般回答这个问题都会帖上这Eff的官方解释(Efficiency. The ratio of the total CPU time to the total time the threads ran on the virtual processor.)那么我们已经知道这是一个比值,而且是把输出的前两列的比值,作为单独一列,可见它的重要性。问题:Eff值的高和低有什么实际意义,或者通过这个值能大概知道什么事情。是否能根据以往经验通过简单例子介绍一下它所展示的魅力。
CPU内部调度算法决定,当并发任务多时,线程将切换到适当的CPU上运行。
也就是当系统压力足够时,CPU将均衡分担。
当任务较少时,繁忙的CPU集中在前面几个,表示CPU足够运行任务,对性能没有影响的。你可以并发测试多个任务来看单个任务的执行时间来判断。
收起非常感谢耐心详细的回答,对eff参数所体现出的资源问题也有一些理解。想再问个问题。若cpu core较多,分配给cpu vp的个数也较多(小于cpu core数),会出现执行的thread集中在前面几个cpu中(thread 没有 switch 到资源充足的cpu上),其它cpu使用较少,不能均匀使用cpu资源。
问题:是否有什么方法使thread均匀使用cpu vp资源(绑定cpu不灵活一般不想用)。
例如:
Individual virtual processors:
vp pid class usercpu syscpu total Thread Eff
1 4886 cpu 135.61 6.85 142.46 169.66 83%
2 4887 cpu 138.61 6.85 145.46 186.66 63%
3 4888 cpu 2.01 4.21 6.22 6.82 98%
4 4889 cpu 0.00 0.04 0.04 0.04 100%
5 4890 cpu 0.00 0.07 0.07 0.07 100%
收起1.Eff=total(user CPU+sys CPU)/thread
其中total为有效的CPU时间,thread为线程在该VP上的总共运行时间(秒)。
TOTAL与THREAD总时间值有差异,那么差值去哪里了?就是问题。
首先需要了解Informix/GBase 8t采用多线性、多进程的架构。
线程有多个状态:通常包括:sleeping,running,cond wait,waiting lock等。
当线程为running状态时,运行的CPU时间片统计到thread值中,但当一个线程处于running状态时,可能需要等待系统资源(latch on resource),比如:IO/内存等。LATCH时间非常短暂,线程会不断的尝试申请该资源,尝试次数超过1000次,就计入:lngspins 统计值。
running状态的现场等待latch的时间就是上面提的差异值。
这样我们就明白了EFF的含义了。当系统内部资源紧张,总竞用时,就会出现EFF<100,或者更低值。一般此值越低表示CPU资源有效利用率偏低。
可以通过模拟多个读SQL语句,发起大的IO操作,就会出现AIO VP的EFF值非常低。
通过EFF值我们就可以判断系统是否存在内部资源的竞用,不过还需要进一步通过onstat -g spi等来监控具体原因。
如下是:我模拟发起多个任务,造成CPU资源,IO资源不足下,onstat -g glo的输出结果。
其中lngspins 值非常高,AIO 的EFF非常低,可以通过onstat -g wai和onstat -g ath,onstat -g act命令监控线程的更多的信息。
onstat -g glo
GBase 8t Database Server Version 12.10.FC4G1AEE -- On-Line -- Up 02:24:55 -- 2529364 Kbytes
MT global info:
sessions threads vps lngspins time
15 227 19 138 851
sched calls thread switches yield 0 yield n yield forever
total: 14875249 5854451 13141415 287154 36857
per sec: 102556 84856 86367 5488 542
Virtual processor summary:
class vps usercpu syscpu total
cpu 2 240.32 14.52 254.84
aio 12 20.38 43.86 64.24
lio 1 0.00 0.07 0.07
pio 1 0.00 0.04 0.04
adm 1 0.05 0.19 0.24
msc 1 0.01 0.02 0.03
fifo 1 0.00 0.04 0.04
total 19 260.76 58.74 319.50
Individual virtual processors:
vp pid class usercpu syscpu total Thread Eff
1 4886 cpu 135.61 6.85 142.46 169.66 83%
2 4887 adm 0.05 0.19 0.24 0.00 0%
3 4888 lio 0.00 0.07 0.07 0.38 18%
4 4889 pio 0.00 0.04 0.04 0.08 47%
5 4890 aio 2.01 4.21 6.22 155.62 3%
6 4891 msc 0.01 0.02 0.03 0.03 100%
7 4892 fifo 0.00 0.04 0.04 0.00 0%
8 4893 cpu 104.71 7.67 112.38 139.86 80%
9 4894 aio 1.92 4.09 6.01 154.57 3%
10 4895 aio 1.71 3.87 5.58 152.73 3%
11 4896 aio 1.82 3.69 5.51 152.44 3%
12 4897 aio 1.59 3.65 5.24 151.84 3%
13 4898 aio 1.67 3.53 5.20 151.19 3%
15 4899 aio 1.62 3.55 5.17 149.75 3%
16 4900 aio 1.58 3.46 5.04 149.21 3%
14 4901 aio 1.59 3.55 5.14 150.73 3%
17 4902 aio 1.60 3.44 5.04 148.89 3%
18 4903 aio 1.64 3.28 4.92 148.43 3%
19 4904 aio 1.63 3.54 5.17 147.71 3%
tot 260.76 58.74 319.50
收起