我们可以通过iostat查看I/O性能数据
[root@mio-254 ~]# iostat -x Linux 2.6.32-431.el6.x86_64 (mio-254) 09/07/2014 _x86_64_ (4 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 2.56 0.00 0.39 0.29 0.00 96.76 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sdb 0.02 0.25 0.04 0.91 1.79 7.25 9.51 0.02 18.68 15.27 1.45 sda 0.00 0.42 0.03 0.54 1.89 14.12 27.99 0.00 6.44 3.68 0.21 dm-0 0.00 0.00 0.08 1.66 3.67 21.37 14.35 0.20 116.57 9.34 1.63
其中磁盘设备的数据含义如下:
rrqm/s 合并后每秒发送到设备的读入请求数
wrqm/s 合并后每秒发送到设备的写入请求数
r/s 每秒发送到设备的读入请求数
w/s 每秒发送到设备的写入请求数
rsec/s 每秒从设备读入的扇区数
wsec/s 每秒向设备写入的扇区数
rkb/s 每秒从设备读入的数据量
wkb/s 每秒想设备写入的数据量
avgrq-sz 发送到设备的请求的平均大小,单位是扇区
avgqu-sz 发送到设备的请求平均队列长度
await I/O平均请求执行执行时间,单位是毫秒
svctm 发送到设备I/O请求的平均执行时间,单位是毫秒
%util 在I/O请求发送到设备期间,占用CPU时间的百分比
一般来说,我们关心每秒的读写请求数,队列长度,请求执行时间和I/O占CPU的百分比
估算单块磁盘的IOPS
对于磁盘I/O,我们需要明确一件事情,即I/O性能优化是不可能无限提高的,所有机械硬盘的IOPS都在最根本上受限于机械转动的原理
机械硬盘完成一次I/O操作所需的时间主要包括寻道时间,盘片转动延时和数据传输时间
寻道时间,指将磁头移动到正确磁道上的时间,这个时间一般算作磁盘转动半周所需要的时间,假设一个15000转的磁盘,那么转动延迟就是60/15000/2 = 0.002S
传输时间,因为磁盘的数据传输率一般都高达数百兆,所以这个时间可以忽略不计
这样,我们就可以通过简单计算得到单块磁盘的极限
转速 IOPS
5400 50~80
7200 75-100
10000 125-150
15000 175-210
当然,整个服务器的IOPS取决于下列多个因素
多块磁盘组:通俗的说,磁盘多了,IOPS就会更高,一块150,两块300(不完全是这样)
更快的单盘:转速越高IOPS越高
RAID级别:如果使用RAID来组合多块磁盘,需要注意有些等级RAID会对写操作性能有较大影响,一次请求发生的磁盘操作越少,IOPS越高
读写比例:如果写操作较多,而RAID又设置成了膨胀写操作的RAID级别,那么就会影响IOPS