mirror_zfs/module/os/freebsd/zfs
Alexander Motin 44cec45f72 Improve too large physical ashift handling
When iterating through children physical ashifts for vdev, prefer
ones above the maximum logical ashift, that we can actually use,
but within the administrator defined maximum.

When selecting top-level vdev ashift, do not set it to the defined
maximum in case physical ashift is even higher, but just ignore one.
Using the maximum does not prevent misaligned writes, but reduces
space efficiency.  Since ZFS tries to write data sequentially and
aggregates the writes, in many cases large misanigned writes may be
not as bad as the space penalty otherwise.

Allow internal physical ashifts for vdevs higher than SHIFT_MAX.
May be one day allocator or aggregation could benefit from that.

Reduce zfs_vdev_max_auto_ashift default from 16 (64KB) to 14 (16KB),
so that ZFS may still use bigger ashifts up to SHIFT_MAX (64KB),
but only if it really has to or explicitly told to, but not as an
"optimization".

There are some read-intensive NVMe SSDs that report Preferred Write
Alignment of 64KB, and attempt to build RAIDZ2 of those leads to a
space inefficiency that can't be justified.  Instead these changes
make ZFS fall back to logical ashift of 12 (4KB) by default and
only warn user that it may be suboptimal for performance.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
Signed-off-by:	Alexander Motin <mav@FreeBSD.org>
Sponsored by:	iXsystems, Inc.
Closes #13798
2022-09-21 13:15:15 -07:00
..
abd_os.c Avoid small buffer copying on write 2022-07-26 10:10:37 -07:00
arc_os.c Apply arc_shrink_shift to ARC above arc_c_min 2022-09-13 17:59:10 -07:00
crypto_os.c FreeBSD: Improve crypto_dispatch() handling 2022-07-26 10:10:37 -07:00
dmu_os.c FreeBSD: Clean up ASSERT/VERIFY use in module 2021-09-14 12:02:23 -07:00
hkdf.c Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
kmod_core.c zfs: add missed dependency of zfs module on zlib 2021-09-14 14:30:39 -07:00
spa_os.c module: zfs: freebsd: fix unused, remove argsused 2022-05-02 15:42:58 -07:00
sysctl_os.c Restore FreeBSD sysctl processing for arc.min and arc.max 2021-09-14 14:31:01 -07:00
vdev_file.c module: zfs: fix unused, remove argsused 2022-02-16 17:58:56 -08:00
vdev_geom.c Improve too large physical ashift handling 2022-09-21 13:15:15 -07:00
vdev_label_os.c FreeBSD: Clean up ASSERT/VERIFY use in module 2021-09-14 12:02:23 -07:00
zfs_acl.c Fix ACL checks for NFS kernel server 2022-03-20 21:21:18 -07:00
zfs_ctldir.c FreeBSD: Provide correct file generation number 2022-02-03 15:28:01 -08:00
zfs_debug.c Annotated dprintf as printf-like 2021-06-24 13:12:36 -07:00
zfs_dir.c FreeBSD: Clean up ASSERT/VERIFY use in module 2021-09-14 12:02:23 -07:00
zfs_file_os.c FreeBSD: Catch up with recent VFS changes 2021-11-02 13:48:54 -07:00
zfs_ioctl_compat.c FreeBSD: Fix legacy compat for platform IOCs 2020-09-30 13:25:50 -07:00
zfs_ioctl_os.c libzfs: On FreeBSD, use MNT_NOWAIT with getfsstat 2021-06-09 13:05:34 -07:00
zfs_racct.c module: zfs: fix unused, remove argsused 2022-02-16 17:58:56 -08:00
zfs_vfsops.c FreeBSD: vfsops: use setgen for error case 2022-02-03 15:28:01 -08:00
zfs_vnops_os.c FreeBSD: Implement hole-punching support 2022-05-17 11:15:29 -07:00
zfs_znode.c FreeBSD: Implement hole-punching support 2022-05-17 11:15:29 -07:00
zio_crypt.c module: zfs: fix unused, remove argsused 2022-02-16 17:58:56 -08:00
zvol_os.c zvol: remove unused variable 2022-05-02 15:42:58 -07:00