关于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)被串删除了。