磁盘IO性能

服务器磁盘IO是最可能影响服务器性能发挥的指标之一,在很多情况下,服务器负载异常都可能与磁盘IO性能不足有关。所以很多时候我们需要做磁盘测试,hdparm就是一个很好的磁盘测试工具。

命令语法

1
hdparm [-CfghiIqtTvyYZ][-a <快取分区>][-A <0或1>][-c <I/O模式>][-d <0或1>][-k <0或1>][-K <0或1>][-m <分区数>][-n <0或1>][-p <PIO模式>][-P <分区数>][-r <0或1>][-S <时间>][-u <0或1>][-W <0或1>][-X <传输模式>][设备]

补充说明:hdparm可检测,显示与设定IDE或SCSI硬盘的参数。

参数解析:

  • -a<快取分区>:设定读取文件时,预先存入块区的分区数,若不加上<快取分区>选项,则显示目前的设定。
  • -A<0或1>:启动或关闭读取文件时的快取功能。
  • -c<I/O模式>:设定IDE32位I/O模式。
  • -C:检测IDE硬盘的电源管理模式。
  • -d<0或1>:设定磁盘的DMA模式。
  • -f:将内存缓冲区的数据写入硬盘,并清楚缓冲区。
  • -g:显示硬盘的磁轨,磁头,磁区等参数。
  • -h:显示帮助。
  • -i:显示硬盘的硬件规格信息,这些信息是在开机时由硬盘本身所提供。
  • -I:直接读取硬盘所提供的硬件规格信息。
  • -k<0或1>:重设硬盘时,保留-dmu参数的设定。
  • -K<0或1>:重设硬盘时,保留-APSWXZ参数的设定。
  • -m<磁区数>:设定硬盘多重分区存取的分区数。
  • -n<0或1>:忽略硬盘写入时所发生的错误。
  • -p<PIO模式>:设定硬盘的PIO模式。
  • -P<磁区数>:设定硬盘内部快取的分区数。
  • -q:在执行后续的参数时,不在屏幕上显示任何信息。
  • -r<0或1>:设定硬盘的读写模式。
  • -S<时间>:设定硬盘进入省电模式前的等待时间。
  • -t:评估硬盘的读取效率。
  • -T:评估硬盘快取的读取效率。
  • -u<0或1>:在硬盘存取时,允许其他中断要求同时执行。
  • -v:显示硬盘的相关设定。
  • -W<0或1>:设定硬盘的写入快取。
  • -X<传输模式>:设定硬盘的传输模式。
  • -y:使IDE硬盘进入省电模式。
  • -Y:使IDE硬盘进入睡眠模式。
  • -Z:关闭某些Seagate硬盘的自动省电功能。

用法举例

普通磁盘测试

1
2
3
4
5
6
# hdparm -t /dev/sda
/dev/sda:
Timing buffered disk reads: 316 MB in 3.02 seconds = 104.71 MB/sec
# hdparm -T /dev/sda
/dev/sda:
Timing cached reads: 19328 MB in 1.99 seconds = 9691.24 MB/sec

RAID0测试(两块盘)

1
2
3
4
5
6
# hdparm -t /dev/sdb
/dev/sdb:
Timing buffered disk reads: 622 MB in 3.01 seconds = 206.89 MB/sec
# hdparm -T /dev/sdb1
/dev/sdb1:
Timing cached reads: 19632 MB in 1.99 seconds = 9844.20 MB/sec

RAID0测试(三块盘)

1
2
3
4
5
6
# hdparm -t /dev/sdb
/dev/sdb:
Timing buffered disk reads: 846 MB in 3.00 seconds = 281.54 MB/sec
# hdparm -T /dev/sdb
/dev/sdb:
Timing cached reads: 18412 MB in 1.99 seconds = 9229.67 MB/sec

RAID0测试(四块盘)

1
2
3
/dev/sdb:
Timing cached reads: 19608 MB in 1.99 seconds = 9832.76 MB/sec
Timing buffered disk reads: 860 MB in 3.00 seconds = 286.35 MB/sec

显示硬盘的相关设置

1
2
3
4
5
hdparm /dev/sda
/dev/sda: IO_support = 0 (default 16-bit)
readonly = 0 (off)
readahead = 256 (on)
geometry = 19457[柱面数]/255[磁头数]/63[扇区数], sectors = 312581808[总扇区数], start = 0[起始扇区数]

显示硬盘的柱面、磁头、扇区数

1
2
hdparm -g /dev/sda
/dev/sda: geometry = 19457[柱面数]/255[磁头数]/63[扇区数], sectors = 312581808[总扇区数], start = 0[起始扇区数]

测试硬盘缓存的读取速度

1
2
hdparm -T /dev/xvda
/dev/xvda: Timing cached reads: 11154 MB in 1.98 seconds = 5633.44 MB/sec

检测硬盘的电源管理模式

1
2
hdparm -C /dev/sda
/dev/sda: drive state is: standby [省电模式]