mirror_zfs/module/zfs
Alexander Motin 37f6845c6f
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-08 10:30:53 -07:00
..
abd.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
aggsum.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
arc.c Apply arc_shrink_shift to ARC above arc_c_min 2022-09-02 13:21:18 -07:00
blake3_zfs.c Fix memory allocation issue for BLAKE3 context 2022-06-21 14:32:09 -07:00
blkptr.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
bplist.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
bpobj.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
bptree.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
bqueue.c Implement Redacted Send/Receive 2019-06-19 09:48:12 -07:00
btree.c Several B-tree optimizations 2022-06-24 13:55:58 -07:00
dataset_kstats.c Add support for per dataset zil stats and use wmsum counters 2022-07-20 17:14:06 -07:00
dbuf_stats.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
dbuf.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
ddt_zap.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
ddt.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
dmu_diff.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
dmu_object.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
dmu_objset.c Revert "Avoid panic with recordsize > 128k, raw sending and no large_blocks" 2022-08-25 13:33:32 -07:00
dmu_recv.c Implement a new type of zfs receive: corrective receive (-c) 2022-07-28 15:52:46 -07:00
dmu_redact.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
dmu_send.c Revert "Avoid panic with recordsize > 128k, raw sending and no large_blocks" 2022-08-25 13:33:32 -07:00
dmu_traverse.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
dmu_tx.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
dmu_zfetch.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
dmu.c Implement a new type of zfs receive: corrective receive (-c) 2022-07-28 15:52:46 -07:00
dnode_sync.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
dnode.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
dsl_bookmark.c Remaining {=> const} char|void *tag 2022-06-29 14:08:59 -07:00
dsl_crypt.c Fix zpool status in case of unloaded keys 2022-08-22 17:42:01 -07:00
dsl_dataset.c Add zfs.sync.snapshot_rename 2022-09-02 13:31:19 -07:00
dsl_deadlist.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
dsl_deleg.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
dsl_destroy.c Prevent zevent list from consuming all of kernel memory 2022-08-22 12:36:22 -07:00
dsl_dir.c Add DD_FIELD string for snapshots_changed property 2022-09-02 13:33:50 -07:00
dsl_pool.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
dsl_prop.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
dsl_scan.c Revert "Avoid panic with recordsize > 128k, raw sending and no large_blocks" 2022-08-25 13:33:32 -07:00
dsl_synctask.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
dsl_userhold.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
edonr_zfs.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
fm.c Don't double-zero buffers in fault management nvlists 2022-08-04 16:53:47 -07:00
gzip.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
hkdf.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
lz4_zfs.c Updated the lz4 decompressor 2022-01-07 10:36:49 -08:00
lz4.c lz4: Cherrypick fix for CVE-2021-3520 2022-01-12 16:14:36 -08:00
lzjb.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
metaslab.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
mmp.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
multilist.c Clean up CSTYLEDs 2022-01-26 11:38:52 -08:00
objlist.c Implement Redacted Send/Receive 2019-06-19 09:48:12 -07:00
pathname.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
range_tree.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
refcount.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
rrwlock.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
sa.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
sha256.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
skein_zfs.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
spa_boot.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
spa_checkpoint.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
spa_config.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
spa_errlog.c Fix zpool status in case of unloaded keys 2022-08-22 17:42:01 -07:00
spa_history.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
spa_log_spacemap.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
spa_misc.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
spa_stats.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
spa.c Implement a new type of zfs receive: corrective receive (-c) 2022-07-28 15:52:46 -07:00
space_map.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
space_reftree.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
THIRDPARTYLICENSE.cityhash OpenZFS 8484 - Implement aggregate sum and use for arc counters 2018-06-06 09:35:59 -07:00
THIRDPARTYLICENSE.cityhash.descrip OpenZFS 8484 - Implement aggregate sum and use for arc counters 2018-06-06 09:35:59 -07:00
txg.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
uberblock.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
unique.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
vdev_cache.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
vdev_draid_rand.c Distributed Spare (dRAID) Feature 2020-11-13 13:51:51 -08:00
vdev_draid.c Improve too large physical ashift handling 2022-09-08 10:30:53 -07:00
vdev_indirect_births.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
vdev_indirect_mapping.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
vdev_indirect.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
vdev_initialize.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
vdev_label.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
vdev_mirror.c Improve too large physical ashift handling 2022-09-08 10:30:53 -07:00
vdev_missing.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
vdev_queue.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
vdev_raidz_math_aarch64_neon_common.h Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
vdev_raidz_math_aarch64_neon.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
vdev_raidz_math_aarch64_neonx2.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
vdev_raidz_math_avx2.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
vdev_raidz_math_avx512bw.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
vdev_raidz_math_avx512f.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
vdev_raidz_math_impl.h Cleanup Raid-Z Typo fixes 2022-09-06 09:43:21 -07:00
vdev_raidz_math_powerpc_altivec_common.h Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
vdev_raidz_math_powerpc_altivec.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
vdev_raidz_math_scalar.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
vdev_raidz_math_sse2.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
vdev_raidz_math_ssse3.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
vdev_raidz_math.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
vdev_raidz.c Improve too large physical ashift handling 2022-09-08 10:30:53 -07:00
vdev_rebuild.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
vdev_removal.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
vdev_root.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
vdev_trim.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
vdev.c Improve too large physical ashift handling 2022-09-08 10:30:53 -07:00
zap_leaf.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zap_micro.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zap.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zcp_get.c Add snapshots_changed as property 2022-08-02 16:45:30 -07:00
zcp_global.c OpenZFS 8600 - ZFS channel programs - snapshot 2018-02-08 15:29:24 -08:00
zcp_iter.c module/*.ko: prune .data, global .rodata 2022-01-14 15:37:55 -08:00
zcp_set.c Support setting user properties in a channel program 2020-02-14 13:41:42 -08:00
zcp_synctask.c Add zfs.sync.snapshot_rename 2022-09-02 13:31:19 -07:00
zcp.c Remaining {=> const} char|void *tag 2022-06-29 14:08:59 -07:00
zfeature.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zfs_byteswap.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zfs_chksum.c Skip checksum benchmarks on systems with slow cpu 2022-08-01 09:51:45 -07:00
zfs_fm.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zfs_fuid.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zfs_ioctl.c Implement a new type of zfs receive: corrective receive (-c) 2022-07-28 15:52:46 -07:00
zfs_log.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zfs_onexit.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zfs_quota.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zfs_ratelimit.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zfs_replay.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zfs_rlock.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zfs_sa.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zfs_vnops.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zil.c Add support for per dataset zil stats and use wmsum counters 2022-07-20 17:14:06 -07:00
zio_checksum.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zio_compress.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zio_inject.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zio.c Implement a new type of zfs receive: corrective receive (-c) 2022-07-28 15:52:46 -07:00
zle.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zrlock.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zthr.c Switch from _Noreturn to __attribute__((noreturn)) 2022-03-23 08:51:00 -07:00
zvol.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00