mirror_zfs/include/os/freebsd/spl/sys
Ryan Moeller 6fe3498ca3
Import vdev ashift optimization from FreeBSD
Many modern devices use physical allocation units that are much
larger than the minimum logical allocation size accessible by
external commands. Two prevalent examples of this are 512e disk
drives (512b logical sector, 4K physical sector) and flash devices
(512b logical sector, 4K or larger allocation block size, and 128k
or larger erase block size). Operations that modify less than the
physical sector size result in a costly read-modify-write or garbage
collection sequence on these devices.

Simply exporting the true physical sector of the device to ZFS would
yield optimal performance, but has two serious drawbacks:

 1. Existing pools created with devices that have different logical
    and physical block sizes, but were configured to use the logical
    block size (e.g. because the OS version used for pool construction
    reported the logical block size instead of the physical block
    size) will suddenly find that the vdev allocation size has
    increased. This can be easily tolerated for active members of
    the array, but ZFS would prevent replacement of a vdev with
    another identical device because it now appears that the smaller
    allocation size required by the pool is not supported by the new
    device.

 2. The device's physical block size may be too large to be supported
    by ZFS. The optimal allocation size for the vdev may be quite
    large. For example, a RAID controller may export a vdev that
    requires read-modify-write cycles unless accessed using 64k
    aligned/sized requests. ZFS currently has an 8k minimum block
    size limit.

Reporting both the logical and physical allocation sizes for vdevs
solves these problems. A device may be used so long as the logical
block size is compatible with the configuration. By comparing the
logical and physical block sizes, new configurations can be optimized
and administrators can be notified of any existing pools that are
sub-optimal.

Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Co-authored-by: Matthew Macy <mmacy@freebsd.org>
Signed-off-by: Matt Macy <mmacy@FreeBSD.org>
Closes #10619
2020-08-21 12:53:17 -07:00
..
acl_impl.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
acl.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
atomic.h Update FreeBSD SPL atomics 2020-05-04 15:07:04 -07:00
byteorder.h Changes to make openzfs build within FreeBSD buildworld 2020-07-31 21:30:31 -07:00
callb.h Fix typos 2020-06-09 21:24:09 -07:00
ccompat.h FreeBSD: Add support for lockless lookup 2020-08-05 10:19:51 -07:00
ccompile.h Make zc_nvlist_src_size limit tunable 2020-08-18 09:33:55 -07:00
cmn_err.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
condvar.h Refactor ccompile.h to not include system headers 2020-07-25 20:09:50 -07:00
console.h Mark functions as static 2020-06-18 12:20:38 -07:00
cred.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
ctype.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
debug.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
dirent.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
disp.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
dkio.h Remove unnecessary references to slavery 2020-06-10 17:07:59 -07:00
extdirent.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
file.h Rename refcount.h to zfs_refcount.h 2020-07-29 16:35:33 -07:00
freebsd_rwlock.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
idmap.h FreeBSD: Fix UNIX permissions checking 2020-08-18 09:57:07 -07:00
inttypes.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
isa_defs.h Prefix zfs internal endian checks with _ZFS 2020-07-28 13:02:49 -07:00
kidmap.h FreeBSD: Fix UNIX permissions checking 2020-08-18 09:57:07 -07:00
kmem_cache.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
kmem.h Remove KM_NODEBUG 2020-08-05 10:28:13 -07:00
kstat.h Refactor ccompile.h to not include system headers 2020-07-25 20:09:50 -07:00
list_impl.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
list.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
lock.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
Makefile.am Prefix zfs internal endian checks with _ZFS 2020-07-28 13:02:49 -07:00
misc.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
mod_os.h Import vdev ashift optimization from FreeBSD 2020-08-21 12:53:17 -07:00
mode.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
mount.h freebsd: changes necessary to coexist with dtrace in tree 2020-07-01 09:10:08 -07:00
mutex.h FreeBSD: Don't require zeroing new locks before init 2020-06-13 10:58:10 -07:00
param.h Refactor ccompile.h to not include system headers 2020-07-25 20:09:50 -07:00
policy.h filesystem_limit/snapshot_limit is incorrectly enforced against root 2020-07-11 17:18:02 -07:00
proc.h FreeBSD: Create taskq threads in appropriate proc 2020-08-17 11:01:19 -07:00
processor.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
procfs_list.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
random.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
rwlock.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
sdt.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
sid.h FreeBSD: Fix UNIX permissions checking 2020-08-18 09:57:07 -07:00
sig.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
simd_x86.h Changes to make openzfs build within FreeBSD buildworld 2020-07-31 21:30:31 -07:00
simd.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
spl_condvar.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
string.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
strings.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
sunddi.h freebsd: changes necessary to coexist with dtrace in tree 2020-07-01 09:10:08 -07:00
sysmacros.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
systeminfo.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
systm.h Refactor ccompile.h to not include system headers 2020-07-25 20:09:50 -07:00
taskq.h FreeBSD: Use a hash table for taskqid lookups 2020-07-11 17:13:45 -07:00
thread.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
time.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
timer.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
trace_zfs.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
trace.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
types32.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
types.h Changes to make openzfs build within FreeBSD buildworld 2020-07-31 21:30:31 -07:00
uio.h Add convenience wrappers for common uio usage 2020-06-14 10:09:55 -07:00
uuid.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
vfs.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
vm.h Use new FreeBSD API to largely eliminate object locking 2020-04-17 09:30:26 -07:00
vmsystm.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
vnode_impl.h Fix typos 2020-06-09 21:24:09 -07:00
vnode.h Changes to make openzfs build within FreeBSD buildworld 2020-07-31 21:30:31 -07:00
zmod.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
zone.h Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00