关于I/O性能的设置
预读功能
·使用-a选项获取并设置文件系统的预读扇区。
·-A选项指定是否有IDE驱动器的预读(read-ahead)。
-使用-A0设置为无预读,使用-A1设置为有预读。
hdparm-A1/dev/sda
/dev/sda:
setting drive read-lookahead to 1(on)
look-ahead=1(on)
-如果仅指定-A选项,就可以确认当前的预读设置。从hdparm的版本7.0开始可以使用。·使用hdparm命令的-aA选项可以确认当前的设置。
hdparm-aA/dev/sda
/dev/sda:
readahead=256(on)预读扇区数为256
look-ahead=1(on)启用预读
32位I/O支持
使用-c选项进行32位I/O的设置。设置值为0、1、3。32位数据传输为0时表示禁用,为1时表示启用,为3时表示使用sync序列sequence的32位数据传输。
DMA设置
使用-d选项进行IDE的DMA设置。使用-X选项可以更改Singleword DMA、Multiword DMA、Ultra DMA的模式。
上例中的硬盘支持mdma0~2、udma0~6,Ultra DMA的模式6(udma6)中显示了*。这表示当前启用的设置。
如果设备驱动程序、磁盘支持,只要按hdparm-X mdma0这样执行就可以改变。
同步
使用-f选项进行缓存的更新。在hdparm命令的内部依次执行sync、fsync、fdatasync、sync,最后执行ioctl(BLKFLSBUF)。这个ioctl需要文件系统支持该命令。可以在grub-install这样想要完全写出到磁盘时执行。
使用-F选项可以更新硬盘内的灯光缓存(light cache)。
多扇区I/O
使用-m选项进行多扇区I/O的设置。通过1次I/O操作向多个扇区进行数据传输。使用-I选项,如果显示(例如R/W multiple sector transfer:Max=16),就可以指定到16扇区为止。下面是执行的例子。Current显示的是当前的设置值。
hdparm-I/dev/sda|grep multiple
R/W multiple sector transfer:Max=16 Current=8
hdparm-m 16—yes-i-know-what-i-am-doing/dev/sda
hdparm-I/dev/sda|grep multiple
R/W multiple sector transfer:Max=16 Current=16
静音性能控制
使用-M选项可以对自动音响管理(Automatic Acoustic Management, AAM)进行设置。设置值为128~254或为0。0表示禁用。128表示以静音性能为最优先(低速),254表示设置为性能最优先。
hdparm-M 254/dev/sdb
设置为254就能听到硬盘运行的声音。在台式机上可能会比较明显。
命令队列
NCQ(Native Command Queuing)是Serial ATA Ⅱ所支持的功能。NCQ将对硬盘驱动器的多条命令进行排队,按照查找时间由长到短的顺序更换并执行命令的功能。
hdparm命令的-Q选项用来设置这个NCQ队列的深度。必须内核和设备驱动程序都支持。可以通过sysfs下的文件是否具有写入权限来判断是否能够支持。
ls-l/sys/block/sda/device/queue_depth
-rw-r—r—1 root root 4096 2010-03-21 20:30/sys/block/sda/device/queue_depth^^^^有写入权限
cat/sys/block/sda/device/queue_depth
31
灯光缓存
使用-W选项可以设置灯光缓存。这是硬盘内部的缓存。0表示禁用,1表示启用。
笔者在身边从旧到新一共5台机器上进行了确认,发现灯光缓存默认都是启用的。停电或系统发生障碍等时,灯光缓存的数据不会反映到磁盘上,数据有可能会破坏。因此旧的hdparm中-W的设置为(DANGEROUS),但RHEL6安装的hdparm中(DANGEROUS)被串删除了。