« 七月 2009
星期日星期一星期二星期三星期四星期五星期六
   
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
       
今天

Blog::Navigation

Blog::Editing

Bookmarks::Blogroll

Blog::Referers

Site notes

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/.

Powered by Roller Weblogger.
« Race Condition引起的性能问... | Main
星期四 九月 13, 2007

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工具包。

 

评论:

发表一条评论:
该日志评论功能被禁用了。
Copyright (C) 2003, 王昱