Add "ashift" property to zpool create
authorChristian Kohlschütter <christian@kohlschutter.com>
Thu, 16 Jun 2011 19:56:38 +0000 (21:56 +0200)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 17 Jun 2011 23:35:49 +0000 (16:35 -0700)
commitdf30f56639f96175ba71d83b4456ccf410c46542
tree2aa6e7402bec3ed59f4cb4adb4a4f22f24512f9c
parent96801d290652812780cf6c070729154d4af8e1ce
Add "ashift" property to zpool create

Some disks with internal sectors larger than 512 bytes (e.g., 4k) can
suffer from bad write performance when ashift is not configured
correctly.  This is caused by the disk not reporting its actual sector
size, but a sector size of 512 bytes.  The drive may behave this way
for compatibility reasons.  For example, the WDC WD20EARS disks are
known to exhibit this behavior.

When creating a zpool, ZFS takes that wrong sector size and sets the
"ashift" property accordingly (to 9: 1<<9=512), whereas it should be
set to 12 for 4k sectors (1<<12=4096).

This patch allows an adminstrator to manual specify the known correct
ashift size at 'zpool create' time.  This can significantly improve
performance in certain cases.  However, it will have an impact on your
total pool capacity.  See the updated ashift property description
in the zpool.8 man page for additional details.

Valid values for the ashift property range from 9 to 17 (512B-128KB).
Additionally, you may set the ashift to 0 if you wish to auto-detect
the sector size based on what the disk reports, this is the default
behavior.  The most common ashift values are 9 and 12.

  Example:
  zpool create -o ashift=12 tank raidz2 sda sdb sdc sdd

Closes #280

Original-patch-by: Richard Laager <rlaager@wiktel.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
AUTHORS
cmd/zpool/zpool_main.c
cmd/zpool/zpool_util.h
cmd/zpool/zpool_vdev.c
include/sys/fs/zfs.h
lib/libzfs/libzfs_pool.c
man/man8/zpool.8
module/zcommon/zpool_prop.c