前面测试了OCZ PCI-E接口的SSD硬盘RevoDrive3的性能, 确实不错.
其中hdparm看到的信息如下 :
有一条, Write-Read-Verify feature set
也就是说这个硬盘支持这个特性, 只是没有开启.
但是hdparm系统带的版本不能修改这个. 需要用到更新的hdparm版本.
下载地址 : http://sourceforge.net/projects/hdparm/
编译时会有点问题, 我这用到的是CentOS 5.7 x64的版本.
hdparm.o: In function `dump_sectors':
hdparm.c:(.text+0x19c0): undefined reference to `le16toh'
hdparm.c:(.text+0x19ee): undefined reference to `le16toh'
hdparm.c:(.text+0x1a24): undefined reference to `le16toh'
collect2: ld returned 1 exit status
gmake: *** [hdparm] Error 1
原因是找不到这个函数, 这个函数原本应该在endian.h中声明的. 但是CentOS 5.7 x64的endian.h中没有.
这个函数的功能参考 :
http://www.kernel.org/doc/man-pages/online/pages/man3/endian.3.html
所以需要修改一下hdparm.c 以下行 :
printf("%04x", le16toh(w[0]));
注释这行
// printf("%04x", le16toh(w[0]));
或者修改这行.
printf("%04x", w[0]);
再编译 :
gmake
gmake install
确认版本信息 :
[root@db-172-16-3-150 hdparm-9.43]# hdparm -V
hdparm v9.43
使用帮助 :
[root@db-172-16-3-150 hdparm-9.43]# hdparm -h
hdparm - get/set hard disk parameters - version v9.43, by Mark Lord.
Usage: hdparm [options] [device ...]
Options:
-a Get/set fs readahead
-A Get/set the drive look-ahead flag (0/1)
-b Get/set bus state (0 == off, 1 == on, 2 == tristate)
-B Set Advanced Power Management setting (1-255)
-c Get/set IDE 32-bit IO setting
-C Check drive power mode status
-d Get/set using_dma flag
-D Enable/disable drive defect management
-E Set cd/dvd drive speed
-f Flush buffer cache for device on exit
-F Flush drive write cache
-g Display drive geometry
-h Display terse usage information
-H Read temperature from drive (Hitachi only)
-i Display drive identification
-I Detailed/current information directly from drive
-J Get/set Western DIgital "Idle3" timeout for a WDC "Green" drive (DANGEROUS)
-k Get/set keep_settings_over_reset flag (0/1)
-K Set drive keep_features_over_reset flag (0/1)
-L Set drive doorlock (0/1) (removable harddisks only)
-m Get/set multiple sector count
-M Get/set acoustic management (0-254, 128: quiet, 254: fast)
-n Get/set ignore-write-errors flag (0/1)
-N Get/set max visible number of sectors (HPA) (VERY DANGEROUS)
-p Set PIO mode on IDE interface chipset (0,1,2,3,4,...)
-P Set drive prefetch count
-q Change next setting quietly
-Q Get/set DMA queue_depth (if supported)
-r Get/set device readonly flag (DANGEROUS to set)
-R Get/set device write-read-verify flag
-s Set power-up in standby flag (0/1) (DANGEROUS)
-S Set standby (spindown) timeout
-t Perform device read timings
-T Perform cache read timings
-u Get/set unmaskirq flag (0/1)
-U Obsolete
-v Use defaults; same as -acdgkmur for IDE drives
-V Display program version and exit immediately
-w Perform device reset (DANGEROUS)
-W Get/set drive write-caching flag (0/1)
-x Obsolete
-X Set IDE xfer mode (DANGEROUS)
-y Put drive in standby mode
-Y Put drive to sleep
-z Re-read partition table
-Z Disable Seagate auto-powersaving mode
--dco-freeze Freeze/lock current device configuration until next power cycle
--dco-identify Read/dump device configuration identify data
--dco-restore Reset device configuration back to factory defaults
--direct Use O_DIRECT to bypass page cache for timings
--drq-hsm-error Crash system with a "stuck DRQ" error (VERY DANGEROUS)
--fallocate Create a file without writing data to disk
--fibmap Show device extents (and fragmentation) for a file
--fwdownload Download firmware file to drive (EXTREMELY DANGEROUS)
--fwdownload-mode3 Download firmware using min-size segments (EXTREMELY DANGEROUS)
--fwdownload-mode3-max Download firmware using max-size segments (EXTREMELY DANGEROUS)
--fwdownload-mode7 Download firmware using a single segment (EXTREMELY DANGEROUS)
--idle-immediate Idle drive immediately
--idle-unload Idle immediately and unload heads
--Istdin Read identify data from stdin as ASCII hex
--Istdout Write identify data to stdout as ASCII hex
--make-bad-sector Deliberately corrupt a sector directly on the media (VERY DANGEROUS)
--offset use with -t, to begin timings at given offset (in GiB) from start of drive
--prefer-ata12 Use 12-byte (instead of 16-byte) SAT commands when possible
--read-sector Read and dump (in hex) a sector directly from the media
--security-help Display help for ATA security commands
--trim-sector-ranges Tell SSD firmware to discard unneeded data sectors: lba:count ..
--trim-sector-ranges-stdin Same as above, but reads lba:count pairs from stdin
--verbose Display extra diagnostics from some commands
--write-sector Repair/overwrite a (possibly bad) sector directly on the media (VERY DANGEROUS)
开启write-read-verify :
[root@db-172-16-3-150 hdparm-9.43]# hdparm -R 2 /dev/mapper/mpath1
/dev/mapper/mpath1:
setting write-read-verify to 2
write-read-verify = 2
确认已经开启 :
[root@db-172-16-3-150 hdparm-9.43]# hdparm -I /dev/mapper/mpath1|grep Write-Read-Verify
* Write-Read-Verify feature set
开启后IO性能将急剧下降.
关闭write-read-verify :
[root@db-172-16-3-150 hdparm-9.43]# hdparm -R 0 /dev/mapper/mpath1
/dev/mapper/mpath1:
setting write-read-verify to 0
write-read-verify = 0
确认已经关闭 :
[root@db-172-16-3-150 hdparm-9.43]# hdparm -I /dev/mapper/mpath1|grep Write-Read-Verify
Write-Read-Verify feature set
【参考】
1. http://sourceforge.net/projects/hdparm/
2. http://blog.163.com/digoal@126/blog/static/163877040201210279569426/
3. http://blog.163.com/digoal@126/blog/static/1638770402012102613815282/
4. http://www.kernel.org/doc/man-pages/online/pages/man3/endian.3.html