This page validates as XHTML 1.0, and will look much better in a browser that supports web standards, but it is accessible to any browser or Internet device. It was created using techniques detailed at glish.com/css/.
mpstat撒谎了!
mpstat和vmstat是观察系统资源使用情况最常用的工具,从这些工具的观察结果就可以大致判断系统资源的利用情况。但是在我们T2000系统下,mpstat和vmstat经常“撒谎”。

在T2000服务器上的性能测试,对于同一个系统,我们经常会发现,有时候用mpstat或vmstat观察出来很奇怪的结果,就是在CPU利用率比较低的时候,性能反而要好,而CPU利用得很充分的时候,响应时间反而很不好。按理说,CPU越忙就说明执行的指令越多,干活越多呀,为什么会慢呢?
T2000的服务器是单CPU的,但是这个CPU有8个核,每个核有4个硬件线程,在Solaris的操作系统下显示有32个虚拟CPU。实际上每个核有一个独立的执行单元(或叫Pipeline),因此,一般来说可以把T2000等同8CPU的机器。而每个核有4个硬件线程,主要是为每个核来准备可执行的指令集。硬件线程的利用率和核的利用率是两个不同的概念。而mpstat和vmstat主要用于单硬件线程的环境下,在多线程的CPU中,显示的结果有偏差。
通常来说,如果一个CPU不是idle状态,mpstat或vmstat就会认为这个CPU当前是busy。CPU在执行指令的时候,会遇上一些情况停止下来,不再执行任何指令。但是在非多线程的CPU中,如果当前的CPU因为一些原因无法执行其他的指令,也会被当做busy。这种情况经常出现,例如一些大指令(load),会跨好几个指令周期,在这段周期内,CPU暂时无法执行其他的指令,所以也算busy。但是在多线程的CPU下,当CPU在任何停顿的时间内,都可以切换到执行其他线程中的指令,因此,传统的mpstat或vmstat无法真实的反映这种情况。
那为什么mpstat或vmstat反映使用率较低,但系统的性能较好呢。这是因为,对于一个核中的4个线程,虽然每个线程的CPU占用率不高(例如各25%),但是这个核的执行单元却充分的得到了利用。
而有的时候,每个线程的CPU占用率都很高,CPU(核)也不一定在干活。例如这个核的每个线程都在执行load指令,在这些时候,四个线程的CPU都是100%的busy,但是CPU在一段周期内什么也没有执行。
在多线程的CPU环境下,需要其他的操作系统的命令才能真正观察到CPU的利用情况,例如cpustat:
cpustat -n -c pic0=L2_dmiss_ld,pic1=Instr_cnt -c pic0=L2_dmiss_ld,pic1=Instr_cnt,nouser,sys 1
或者到http://cooltools.sunsource.net/corestat/下载corestat工具包。
Posted at 02:22下午 九月 13, 2007 by 王昱 in Solaris | 评论[0]