很久以前就列出了性能学习的计划,xmind画了一大坨东东,只是一直没有真正实施起来,现在做个开篇吧。

 iostat作为io性能分析的利器,早就想仔细看看了,列出常用参数说明:

参数说明:

-d 查看io设备的统计信息

-c 查看CPU相关的统计信息:

%user 用户态消耗的时间

%nice 用户进程空间中被调整过nice的进程消耗的时间

%sys 内核态消耗的时间

%idle 空闲实现

-x 查看io设备详细的统计信息:

 rrqm/s:   每秒进行 merge 的读操作数目。即 delta(rmerge)/s
 wrqm/s:  每秒进行 merge 的写操作数目。即 delta(wmerge)/s
 r/s:           每秒完成的读 I/O 设备次数。即 delta(rio)/s 
 w/s:         每秒完成的写 I/O 设备次数。即 delta(wio)/s
 rsec/s:    每秒读扇区数。即 delta(rsect)/s 
 wsec/s:  每秒写扇区数。即 delta(wsect)/s
 rkB/s:      每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算)
 wkB/s:    每秒写K字节数。是 wsect/s 的一半。(需要计算)
 avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)
 avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
 await:    平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
 svctm:   平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio) 
 %util:      一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)

作为硬件白痴我对avgqu-sz中的io队列的实现方式感兴趣,查了一些文档发现io队列应该是在OS层的东东,并不是由硬盘本身来控制的,理论上硬盘操作都是串行的,如果做raid就相当于是在并行,但是应该是说io队列的消费速度快了,整个存储的传输效率和容错性都提升了。不知道对io队列的理解是否正确?有待进一步研究。

另外mac下如何查看nice值呢,top命令里没有说明如何显示,ps xl倒是可以。

准备分析一个线上系统来验证一些想法,因为这个系统的IO压力还是比较大的,而且突发性很强,所以,用这个系统来分析系统IO的性能是个不错的选择,下周开搞,在补充完这个学习笔记吧。