xref: /freebsd/sys/contrib/openzfs/man/man4/zfs.4 (revision aa48259f337100e79933d660fec8856371f761ed)
1.\"
2.\" Copyright (c) 2013 by Turbo Fredriksson <turbo@bayour.com>. All rights reserved.
3.\" Copyright (c) 2019, 2021 by Delphix. All rights reserved.
4.\" Copyright (c) 2019 Datto Inc.
5.\" Copyright (c) 2023, 2024 Klara, Inc.
6.\" The contents of this file are subject to the terms of the Common Development
7.\" and Distribution License (the "License").  You may not use this file except
8.\" in compliance with the License. You can obtain a copy of the license at
9.\" usr/src/OPENSOLARIS.LICENSE or https://opensource.org/licenses/CDDL-1.0.
10.\"
11.\" See the License for the specific language governing permissions and
12.\" limitations under the License. When distributing Covered Code, include this
13.\" CDDL HEADER in each file and include the License file at
14.\" usr/src/OPENSOLARIS.LICENSE.  If applicable, add the following below this
15.\" CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your
16.\" own identifying information:
17.\" Portions Copyright [yyyy] [name of copyright owner]
18.\"
19.Dd January 9, 2024
20.Dt ZFS 4
21.Os
22.
23.Sh NAME
24.Nm zfs
25.Nd tuning of the ZFS kernel module
26.
27.Sh DESCRIPTION
28The ZFS module supports these parameters:
29.Bl -tag -width Ds
30.It Sy dbuf_cache_max_bytes Ns = Ns Sy UINT64_MAX Ns B Pq u64
31Maximum size in bytes of the dbuf cache.
32The target size is determined by the MIN versus
33.No 1/2^ Ns Sy dbuf_cache_shift Pq 1/32nd
34of the target ARC size.
35The behavior of the dbuf cache and its associated settings
36can be observed via the
37.Pa /proc/spl/kstat/zfs/dbufstats
38kstat.
39.
40.It Sy dbuf_metadata_cache_max_bytes Ns = Ns Sy UINT64_MAX Ns B Pq u64
41Maximum size in bytes of the metadata dbuf cache.
42The target size is determined by the MIN versus
43.No 1/2^ Ns Sy dbuf_metadata_cache_shift Pq 1/64th
44of the target ARC size.
45The behavior of the metadata dbuf cache and its associated settings
46can be observed via the
47.Pa /proc/spl/kstat/zfs/dbufstats
48kstat.
49.
50.It Sy dbuf_cache_hiwater_pct Ns = Ns Sy 10 Ns % Pq uint
51The percentage over
52.Sy dbuf_cache_max_bytes
53when dbufs must be evicted directly.
54.
55.It Sy dbuf_cache_lowater_pct Ns = Ns Sy 10 Ns % Pq uint
56The percentage below
57.Sy dbuf_cache_max_bytes
58when the evict thread stops evicting dbufs.
59.
60.It Sy dbuf_cache_shift Ns = Ns Sy 5 Pq uint
61Set the size of the dbuf cache
62.Pq Sy dbuf_cache_max_bytes
63to a log2 fraction of the target ARC size.
64.
65.It Sy dbuf_metadata_cache_shift Ns = Ns Sy 6 Pq uint
66Set the size of the dbuf metadata cache
67.Pq Sy dbuf_metadata_cache_max_bytes
68to a log2 fraction of the target ARC size.
69.
70.It Sy dbuf_mutex_cache_shift Ns = Ns Sy 0 Pq uint
71Set the size of the mutex array for the dbuf cache.
72When set to
73.Sy 0
74the array is dynamically sized based on total system memory.
75.
76.It Sy dmu_object_alloc_chunk_shift Ns = Ns Sy 7 Po 128 Pc Pq uint
77dnode slots allocated in a single operation as a power of 2.
78The default value minimizes lock contention for the bulk operation performed.
79.
80.It Sy dmu_prefetch_max Ns = Ns Sy 134217728 Ns B Po 128 MiB Pc Pq uint
81Limit the amount we can prefetch with one call to this amount in bytes.
82This helps to limit the amount of memory that can be used by prefetching.
83.
84.It Sy ignore_hole_birth Pq int
85Alias for
86.Sy send_holes_without_birth_time .
87.
88.It Sy l2arc_feed_again Ns = Ns Sy 1 Ns | Ns 0 Pq int
89Turbo L2ARC warm-up.
90When the L2ARC is cold the fill interval will be set as fast as possible.
91.
92.It Sy l2arc_feed_min_ms Ns = Ns Sy 200 Pq u64
93Min feed interval in milliseconds.
94Requires
95.Sy l2arc_feed_again Ns = Ns Ar 1
96and only applicable in related situations.
97.
98.It Sy l2arc_feed_secs Ns = Ns Sy 1 Pq u64
99Seconds between L2ARC writing.
100.
101.It Sy l2arc_headroom Ns = Ns Sy 8 Pq u64
102How far through the ARC lists to search for L2ARC cacheable content,
103expressed as a multiplier of
104.Sy l2arc_write_max .
105ARC persistence across reboots can be achieved with persistent L2ARC
106by setting this parameter to
107.Sy 0 ,
108allowing the full length of ARC lists to be searched for cacheable content.
109.
110.It Sy l2arc_headroom_boost Ns = Ns Sy 200 Ns % Pq u64
111Scales
112.Sy l2arc_headroom
113by this percentage when L2ARC contents are being successfully compressed
114before writing.
115A value of
116.Sy 100
117disables this feature.
118.
119.It Sy l2arc_exclude_special Ns = Ns Sy 0 Ns | Ns 1 Pq int
120Controls whether buffers present on special vdevs are eligible for caching
121into L2ARC.
122If set to 1, exclude dbufs on special vdevs from being cached to L2ARC.
123.
124.It Sy l2arc_mfuonly Ns = Ns Sy 0 Ns | Ns 1 Pq  int
125Controls whether only MFU metadata and data are cached from ARC into L2ARC.
126This may be desired to avoid wasting space on L2ARC when reading/writing large
127amounts of data that are not expected to be accessed more than once.
128.Pp
129The default is off,
130meaning both MRU and MFU data and metadata are cached.
131When turning off this feature, some MRU buffers will still be present
132in ARC and eventually cached on L2ARC.
133.No If Sy l2arc_noprefetch Ns = Ns Sy 0 ,
134some prefetched buffers will be cached to L2ARC, and those might later
135transition to MRU, in which case the
136.Sy l2arc_mru_asize No arcstat will not be Sy 0 .
137.Pp
138Regardless of
139.Sy l2arc_noprefetch ,
140some MFU buffers might be evicted from ARC,
141accessed later on as prefetches and transition to MRU as prefetches.
142If accessed again they are counted as MRU and the
143.Sy l2arc_mru_asize No arcstat will not be Sy 0 .
144.Pp
145The ARC status of L2ARC buffers when they were first cached in
146L2ARC can be seen in the
147.Sy l2arc_mru_asize , Sy l2arc_mfu_asize , No and Sy l2arc_prefetch_asize
148arcstats when importing the pool or onlining a cache
149device if persistent L2ARC is enabled.
150.Pp
151The
152.Sy evict_l2_eligible_mru
153arcstat does not take into account if this option is enabled as the information
154provided by the
155.Sy evict_l2_eligible_m[rf]u
156arcstats can be used to decide if toggling this option is appropriate
157for the current workload.
158.
159.It Sy l2arc_meta_percent Ns = Ns Sy 33 Ns % Pq uint
160Percent of ARC size allowed for L2ARC-only headers.
161Since L2ARC buffers are not evicted on memory pressure,
162too many headers on a system with an irrationally large L2ARC
163can render it slow or unusable.
164This parameter limits L2ARC writes and rebuilds to achieve the target.
165.
166.It Sy l2arc_trim_ahead Ns = Ns Sy 0 Ns % Pq u64
167Trims ahead of the current write size
168.Pq Sy l2arc_write_max
169on L2ARC devices by this percentage of write size if we have filled the device.
170If set to
171.Sy 100
172we TRIM twice the space required to accommodate upcoming writes.
173A minimum of
174.Sy 64 MiB
175will be trimmed.
176It also enables TRIM of the whole L2ARC device upon creation
177or addition to an existing pool or if the header of the device is
178invalid upon importing a pool or onlining a cache device.
179A value of
180.Sy 0
181disables TRIM on L2ARC altogether and is the default as it can put significant
182stress on the underlying storage devices.
183This will vary depending of how well the specific device handles these commands.
184.
185.It Sy l2arc_noprefetch Ns = Ns Sy 1 Ns | Ns 0 Pq int
186Do not write buffers to L2ARC if they were prefetched but not used by
187applications.
188In case there are prefetched buffers in L2ARC and this option
189is later set, we do not read the prefetched buffers from L2ARC.
190Unsetting this option is useful for caching sequential reads from the
191disks to L2ARC and serve those reads from L2ARC later on.
192This may be beneficial in case the L2ARC device is significantly faster
193in sequential reads than the disks of the pool.
194.Pp
195Use
196.Sy 1
197to disable and
198.Sy 0
199to enable caching/reading prefetches to/from L2ARC.
200.
201.It Sy l2arc_norw Ns = Ns Sy 0 Ns | Ns 1 Pq int
202No reads during writes.
203.
204.It Sy l2arc_write_boost Ns = Ns Sy 33554432 Ns B Po 32 MiB Pc Pq u64
205Cold L2ARC devices will have
206.Sy l2arc_write_max
207increased by this amount while they remain cold.
208.
209.It Sy l2arc_write_max Ns = Ns Sy 33554432 Ns B Po 32 MiB Pc Pq u64
210Max write bytes per interval.
211.
212.It Sy l2arc_rebuild_enabled Ns = Ns Sy 1 Ns | Ns 0 Pq int
213Rebuild the L2ARC when importing a pool (persistent L2ARC).
214This can be disabled if there are problems importing a pool
215or attaching an L2ARC device (e.g. the L2ARC device is slow
216in reading stored log metadata, or the metadata
217has become somehow fragmented/unusable).
218.
219.It Sy l2arc_rebuild_blocks_min_l2size Ns = Ns Sy 1073741824 Ns B Po 1 GiB Pc Pq u64
220Mininum size of an L2ARC device required in order to write log blocks in it.
221The log blocks are used upon importing the pool to rebuild the persistent L2ARC.
222.Pp
223For L2ARC devices less than 1 GiB, the amount of data
224.Fn l2arc_evict
225evicts is significant compared to the amount of restored L2ARC data.
226In this case, do not write log blocks in L2ARC in order not to waste space.
227.
228.It Sy metaslab_aliquot Ns = Ns Sy 1048576 Ns B Po 1 MiB Pc Pq u64
229Metaslab granularity, in bytes.
230This is roughly similar to what would be referred to as the "stripe size"
231in traditional RAID arrays.
232In normal operation, ZFS will try to write this amount of data to each disk
233before moving on to the next top-level vdev.
234.
235.It Sy metaslab_bias_enabled Ns = Ns Sy 1 Ns | Ns 0 Pq int
236Enable metaslab group biasing based on their vdevs' over- or under-utilization
237relative to the pool.
238.
239.It Sy metaslab_force_ganging Ns = Ns Sy 16777217 Ns B Po 16 MiB + 1 B Pc Pq u64
240Make some blocks above a certain size be gang blocks.
241This option is used by the test suite to facilitate testing.
242.
243.It Sy metaslab_force_ganging_pct Ns = Ns Sy 3 Ns % Pq uint
244For blocks that could be forced to be a gang block (due to
245.Sy metaslab_force_ganging ) ,
246force this many of them to be gang blocks.
247.
248.It Sy brt_zap_prefetch Ns = Ns Sy 1 Ns | Ns 0 Pq int
249Controls prefetching BRT records for blocks which are going to be cloned.
250.
251.It Sy brt_zap_default_bs Ns = Ns Sy 12 Po 4 KiB Pc Pq int
252Default BRT ZAP data block size as a power of 2. Note that changing this after
253creating a BRT on the pool will not affect existing BRTs, only newly created
254ones.
255.
256.It Sy brt_zap_default_ibs Ns = Ns Sy 12 Po 4 KiB Pc Pq int
257Default BRT ZAP indirect block size as a power of 2. Note that changing this
258after creating a BRT on the pool will not affect existing BRTs, only newly
259created ones.
260.
261.It Sy ddt_zap_default_bs Ns = Ns Sy 15 Po 32 KiB Pc Pq int
262Default DDT ZAP data block size as a power of 2. Note that changing this after
263creating a DDT on the pool will not affect existing DDTs, only newly created
264ones.
265.
266.It Sy ddt_zap_default_ibs Ns = Ns Sy 15 Po 32 KiB Pc Pq int
267Default DDT ZAP indirect block size as a power of 2. Note that changing this
268after creating a DDT on the pool will not affect existing DDTs, only newly
269created ones.
270.
271.It Sy zfs_default_bs Ns = Ns Sy 9 Po 512 B Pc Pq int
272Default dnode block size as a power of 2.
273.
274.It Sy zfs_default_ibs Ns = Ns Sy 17 Po 128 KiB Pc Pq int
275Default dnode indirect block size as a power of 2.
276.
277.It Sy zfs_history_output_max Ns = Ns Sy 1048576 Ns B Po 1 MiB Pc Pq u64
278When attempting to log an output nvlist of an ioctl in the on-disk history,
279the output will not be stored if it is larger than this size (in bytes).
280This must be less than
281.Sy DMU_MAX_ACCESS Pq 64 MiB .
282This applies primarily to
283.Fn zfs_ioc_channel_program Pq cf. Xr zfs-program 8 .
284.
285.It Sy zfs_keep_log_spacemaps_at_export Ns = Ns Sy 0 Ns | Ns 1 Pq int
286Prevent log spacemaps from being destroyed during pool exports and destroys.
287.
288.It Sy zfs_metaslab_segment_weight_enabled Ns = Ns Sy 1 Ns | Ns 0 Pq int
289Enable/disable segment-based metaslab selection.
290.
291.It Sy zfs_metaslab_switch_threshold Ns = Ns Sy 2 Pq int
292When using segment-based metaslab selection, continue allocating
293from the active metaslab until this option's
294worth of buckets have been exhausted.
295.
296.It Sy metaslab_debug_load Ns = Ns Sy 0 Ns | Ns 1 Pq int
297Load all metaslabs during pool import.
298.
299.It Sy metaslab_debug_unload Ns = Ns Sy 0 Ns | Ns 1 Pq int
300Prevent metaslabs from being unloaded.
301.
302.It Sy metaslab_fragmentation_factor_enabled Ns = Ns Sy 1 Ns | Ns 0 Pq int
303Enable use of the fragmentation metric in computing metaslab weights.
304.
305.It Sy metaslab_df_max_search Ns = Ns Sy 16777216 Ns B Po 16 MiB Pc Pq uint
306Maximum distance to search forward from the last offset.
307Without this limit, fragmented pools can see
308.Em >100`000
309iterations and
310.Fn metaslab_block_picker
311becomes the performance limiting factor on high-performance storage.
312.Pp
313With the default setting of
314.Sy 16 MiB ,
315we typically see less than
316.Em 500
317iterations, even with very fragmented
318.Sy ashift Ns = Ns Sy 9
319pools.
320The maximum number of iterations possible is
321.Sy metaslab_df_max_search / 2^(ashift+1) .
322With the default setting of
323.Sy 16 MiB
324this is
325.Em 16*1024 Pq with Sy ashift Ns = Ns Sy 9
326or
327.Em 2*1024 Pq with Sy ashift Ns = Ns Sy 12 .
328.
329.It Sy metaslab_df_use_largest_segment Ns = Ns Sy 0 Ns | Ns 1 Pq int
330If not searching forward (due to
331.Sy metaslab_df_max_search , metaslab_df_free_pct ,
332.No or Sy metaslab_df_alloc_threshold ) ,
333this tunable controls which segment is used.
334If set, we will use the largest free segment.
335If unset, we will use a segment of at least the requested size.
336.
337.It Sy zfs_metaslab_max_size_cache_sec Ns = Ns Sy 3600 Ns s Po 1 hour Pc Pq u64
338When we unload a metaslab, we cache the size of the largest free chunk.
339We use that cached size to determine whether or not to load a metaslab
340for a given allocation.
341As more frees accumulate in that metaslab while it's unloaded,
342the cached max size becomes less and less accurate.
343After a number of seconds controlled by this tunable,
344we stop considering the cached max size and start
345considering only the histogram instead.
346.
347.It Sy zfs_metaslab_mem_limit Ns = Ns Sy 25 Ns % Pq uint
348When we are loading a new metaslab, we check the amount of memory being used
349to store metaslab range trees.
350If it is over a threshold, we attempt to unload the least recently used metaslab
351to prevent the system from clogging all of its memory with range trees.
352This tunable sets the percentage of total system memory that is the threshold.
353.
354.It Sy zfs_metaslab_try_hard_before_gang Ns = Ns Sy 0 Ns | Ns 1 Pq int
355.Bl -item -compact
356.It
357If unset, we will first try normal allocation.
358.It
359If that fails then we will do a gang allocation.
360.It
361If that fails then we will do a "try hard" gang allocation.
362.It
363If that fails then we will have a multi-layer gang block.
364.El
365.Pp
366.Bl -item -compact
367.It
368If set, we will first try normal allocation.
369.It
370If that fails then we will do a "try hard" allocation.
371.It
372If that fails we will do a gang allocation.
373.It
374If that fails we will do a "try hard" gang allocation.
375.It
376If that fails then we will have a multi-layer gang block.
377.El
378.
379.It Sy zfs_metaslab_find_max_tries Ns = Ns Sy 100 Pq uint
380When not trying hard, we only consider this number of the best metaslabs.
381This improves performance, especially when there are many metaslabs per vdev
382and the allocation can't actually be satisfied
383(so we would otherwise iterate all metaslabs).
384.
385.It Sy zfs_vdev_default_ms_count Ns = Ns Sy 200 Pq uint
386When a vdev is added, target this number of metaslabs per top-level vdev.
387.
388.It Sy zfs_vdev_default_ms_shift Ns = Ns Sy 29 Po 512 MiB Pc Pq uint
389Default lower limit for metaslab size.
390.
391.It Sy zfs_vdev_max_ms_shift Ns = Ns Sy 34 Po 16 GiB Pc Pq uint
392Default upper limit for metaslab size.
393.
394.It Sy zfs_vdev_max_auto_ashift Ns = Ns Sy 14 Pq uint
395Maximum ashift used when optimizing for logical \[->] physical sector size on
396new
397top-level vdevs.
398May be increased up to
399.Sy ASHIFT_MAX Po 16 Pc ,
400but this may negatively impact pool space efficiency.
401.
402.It Sy zfs_vdev_min_auto_ashift Ns = Ns Sy ASHIFT_MIN Po 9 Pc Pq uint
403Minimum ashift used when creating new top-level vdevs.
404.
405.It Sy zfs_vdev_min_ms_count Ns = Ns Sy 16 Pq uint
406Minimum number of metaslabs to create in a top-level vdev.
407.
408.It Sy vdev_validate_skip Ns = Ns Sy 0 Ns | Ns 1 Pq int
409Skip label validation steps during pool import.
410Changing is not recommended unless you know what you're doing
411and are recovering a damaged label.
412.
413.It Sy zfs_vdev_ms_count_limit Ns = Ns Sy 131072 Po 128k Pc Pq uint
414Practical upper limit of total metaslabs per top-level vdev.
415.
416.It Sy metaslab_preload_enabled Ns = Ns Sy 1 Ns | Ns 0 Pq int
417Enable metaslab group preloading.
418.
419.It Sy metaslab_preload_limit Ns = Ns Sy 10 Pq uint
420Maximum number of metaslabs per group to preload
421.
422.It Sy metaslab_preload_pct Ns = Ns Sy 50 Pq uint
423Percentage of CPUs to run a metaslab preload taskq
424.
425.It Sy metaslab_lba_weighting_enabled Ns = Ns Sy 1 Ns | Ns 0 Pq int
426Give more weight to metaslabs with lower LBAs,
427assuming they have greater bandwidth,
428as is typically the case on a modern constant angular velocity disk drive.
429.
430.It Sy metaslab_unload_delay Ns = Ns Sy 32 Pq uint
431After a metaslab is used, we keep it loaded for this many TXGs, to attempt to
432reduce unnecessary reloading.
433Note that both this many TXGs and
434.Sy metaslab_unload_delay_ms
435milliseconds must pass before unloading will occur.
436.
437.It Sy metaslab_unload_delay_ms Ns = Ns Sy 600000 Ns ms Po 10 min Pc Pq uint
438After a metaslab is used, we keep it loaded for this many milliseconds,
439to attempt to reduce unnecessary reloading.
440Note, that both this many milliseconds and
441.Sy metaslab_unload_delay
442TXGs must pass before unloading will occur.
443.
444.It Sy reference_history Ns = Ns Sy 3 Pq uint
445Maximum reference holders being tracked when reference_tracking_enable is
446active.
447.It Sy raidz_expand_max_copy_bytes Ns = Ns Sy 160MB Pq ulong
448Max amount of memory to use for RAID-Z expansion I/O.
449This limits how much I/O can be outstanding at once.
450.
451.It Sy raidz_expand_max_reflow_bytes Ns = Ns Sy 0 Pq ulong
452For testing, pause RAID-Z expansion when reflow amount reaches this value.
453.
454.It Sy raidz_io_aggregate_rows Ns = Ns Sy 4 Pq ulong
455For expanded RAID-Z, aggregate reads that have more rows than this.
456.
457.It Sy reference_history Ns = Ns Sy 3 Pq int
458Maximum reference holders being tracked when reference_tracking_enable is
459active.
460.
461.It Sy reference_tracking_enable Ns = Ns Sy 0 Ns | Ns 1 Pq int
462Track reference holders to
463.Sy refcount_t
464objects (debug builds only).
465.
466.It Sy send_holes_without_birth_time Ns = Ns Sy 1 Ns | Ns 0 Pq int
467When set, the
468.Sy hole_birth
469optimization will not be used, and all holes will always be sent during a
470.Nm zfs Cm send .
471This is useful if you suspect your datasets are affected by a bug in
472.Sy hole_birth .
473.
474.It Sy spa_config_path Ns = Ns Pa /etc/zfs/zpool.cache Pq charp
475SPA config file.
476.
477.It Sy spa_asize_inflation Ns = Ns Sy 24 Pq uint
478Multiplication factor used to estimate actual disk consumption from the
479size of data being written.
480The default value is a worst case estimate,
481but lower values may be valid for a given pool depending on its configuration.
482Pool administrators who understand the factors involved
483may wish to specify a more realistic inflation factor,
484particularly if they operate close to quota or capacity limits.
485.
486.It Sy spa_load_print_vdev_tree Ns = Ns Sy 0 Ns | Ns 1 Pq int
487Whether to print the vdev tree in the debugging message buffer during pool
488import.
489.
490.It Sy spa_load_verify_data Ns = Ns Sy 1 Ns | Ns 0 Pq int
491Whether to traverse data blocks during an "extreme rewind"
492.Pq Fl X
493import.
494.Pp
495An extreme rewind import normally performs a full traversal of all
496blocks in the pool for verification.
497If this parameter is unset, the traversal skips non-metadata blocks.
498It can be toggled once the
499import has started to stop or start the traversal of non-metadata blocks.
500.
501.It Sy spa_load_verify_metadata  Ns = Ns Sy 1 Ns | Ns 0 Pq int
502Whether to traverse blocks during an "extreme rewind"
503.Pq Fl X
504pool import.
505.Pp
506An extreme rewind import normally performs a full traversal of all
507blocks in the pool for verification.
508If this parameter is unset, the traversal is not performed.
509It can be toggled once the import has started to stop or start the traversal.
510.
511.It Sy spa_load_verify_shift Ns = Ns Sy 4 Po 1/16th Pc Pq uint
512Sets the maximum number of bytes to consume during pool import to the log2
513fraction of the target ARC size.
514.
515.It Sy spa_slop_shift Ns = Ns Sy 5 Po 1/32nd Pc Pq int
516Normally, we don't allow the last
517.Sy 3.2% Pq Sy 1/2^spa_slop_shift
518of space in the pool to be consumed.
519This ensures that we don't run the pool completely out of space,
520due to unaccounted changes (e.g. to the MOS).
521It also limits the worst-case time to allocate space.
522If we have less than this amount of free space,
523most ZPL operations (e.g. write, create) will return
524.Sy ENOSPC .
525.
526.It Sy spa_num_allocators Ns = Ns Sy 4 Pq int
527Determines the number of block alloctators to use per spa instance.
528Capped by the number of actual CPUs in the system.
529.Pp
530Note that setting this value too high could result in performance
531degredation and/or excess fragmentation.
532.
533.It Sy spa_upgrade_errlog_limit Ns = Ns Sy 0 Pq uint
534Limits the number of on-disk error log entries that will be converted to the
535new format when enabling the
536.Sy head_errlog
537feature.
538The default is to convert all log entries.
539.
540.It Sy vdev_removal_max_span Ns = Ns Sy 32768 Ns B Po 32 KiB Pc Pq uint
541During top-level vdev removal, chunks of data are copied from the vdev
542which may include free space in order to trade bandwidth for IOPS.
543This parameter determines the maximum span of free space, in bytes,
544which will be included as "unnecessary" data in a chunk of copied data.
545.Pp
546The default value here was chosen to align with
547.Sy zfs_vdev_read_gap_limit ,
548which is a similar concept when doing
549regular reads (but there's no reason it has to be the same).
550.
551.It Sy vdev_file_logical_ashift Ns = Ns Sy 9 Po 512 B Pc Pq u64
552Logical ashift for file-based devices.
553.
554.It Sy vdev_file_physical_ashift Ns = Ns Sy 9 Po 512 B Pc Pq u64
555Physical ashift for file-based devices.
556.
557.It Sy zap_iterate_prefetch Ns = Ns Sy 1 Ns | Ns 0 Pq int
558If set, when we start iterating over a ZAP object,
559prefetch the entire object (all leaf blocks).
560However, this is limited by
561.Sy dmu_prefetch_max .
562.
563.It Sy zap_micro_max_size Ns = Ns Sy 131072 Ns B Po 128 KiB Pc Pq int
564Maximum micro ZAP size.
565A micro ZAP is upgraded to a fat ZAP, once it grows beyond the specified size.
566.
567.It Sy zfetch_hole_shift Ns = Ns Sy 2 Pq uint
568Log2 fraction of holes in speculative prefetch stream allowed for it to
569proceed.
570.
571.It Sy zfetch_min_distance Ns = Ns Sy 4194304 Ns B Po 4 MiB Pc Pq uint
572Min bytes to prefetch per stream.
573Prefetch distance starts from the demand access size and quickly grows to
574this value, doubling on each hit.
575After that it may grow further by 1/8 per hit, but only if some prefetch
576since last time haven't completed in time to satisfy demand request, i.e.
577prefetch depth didn't cover the read latency or the pool got saturated.
578.
579.It Sy zfetch_max_distance Ns = Ns Sy 67108864 Ns B Po 64 MiB Pc Pq uint
580Max bytes to prefetch per stream.
581.
582.It Sy zfetch_max_idistance Ns = Ns Sy 67108864 Ns B Po 64 MiB Pc Pq uint
583Max bytes to prefetch indirects for per stream.
584.
585.It Sy zfetch_max_reorder Ns = Ns Sy 16777216 Ns B Po 16 MiB Pc Pq uint
586Requests within this byte distance from the current prefetch stream position
587are considered parts of the stream, reordered due to parallel processing.
588Such requests do not advance the stream position immediately unless
589.Sy zfetch_hole_shift
590fill threshold is reached, but saved to fill holes in the stream later.
591.
592.It Sy zfetch_max_streams Ns = Ns Sy 8 Pq uint
593Max number of streams per zfetch (prefetch streams per file).
594.
595.It Sy zfetch_min_sec_reap Ns = Ns Sy 1 Pq uint
596Min time before inactive prefetch stream can be reclaimed
597.
598.It Sy zfetch_max_sec_reap Ns = Ns Sy 2 Pq uint
599Max time before inactive prefetch stream can be deleted
600.
601.It Sy zfs_abd_scatter_enabled Ns = Ns Sy 1 Ns | Ns 0 Pq int
602Enables ARC from using scatter/gather lists and forces all allocations to be
603linear in kernel memory.
604Disabling can improve performance in some code paths
605at the expense of fragmented kernel memory.
606.
607.It Sy zfs_abd_scatter_max_order Ns = Ns Sy MAX_ORDER\-1 Pq uint
608Maximum number of consecutive memory pages allocated in a single block for
609scatter/gather lists.
610.Pp
611The value of
612.Sy MAX_ORDER
613depends on kernel configuration.
614.
615.It Sy zfs_abd_scatter_min_size Ns = Ns Sy 1536 Ns B Po 1.5 KiB Pc Pq uint
616This is the minimum allocation size that will use scatter (page-based) ABDs.
617Smaller allocations will use linear ABDs.
618.
619.It Sy zfs_arc_dnode_limit Ns = Ns Sy 0 Ns B Pq u64
620When the number of bytes consumed by dnodes in the ARC exceeds this number of
621bytes, try to unpin some of it in response to demand for non-metadata.
622This value acts as a ceiling to the amount of dnode metadata, and defaults to
623.Sy 0 ,
624which indicates that a percent which is based on
625.Sy zfs_arc_dnode_limit_percent
626of the ARC meta buffers that may be used for dnodes.
627.It Sy zfs_arc_dnode_limit_percent Ns = Ns Sy 10 Ns % Pq u64
628Percentage that can be consumed by dnodes of ARC meta buffers.
629.Pp
630See also
631.Sy zfs_arc_dnode_limit ,
632which serves a similar purpose but has a higher priority if nonzero.
633.
634.It Sy zfs_arc_dnode_reduce_percent Ns = Ns Sy 10 Ns % Pq u64
635Percentage of ARC dnodes to try to scan in response to demand for non-metadata
636when the number of bytes consumed by dnodes exceeds
637.Sy zfs_arc_dnode_limit .
638.
639.It Sy zfs_arc_average_blocksize Ns = Ns Sy 8192 Ns B Po 8 KiB Pc Pq uint
640The ARC's buffer hash table is sized based on the assumption of an average
641block size of this value.
642This works out to roughly 1 MiB of hash table per 1 GiB of physical memory
643with 8-byte pointers.
644For configurations with a known larger average block size,
645this value can be increased to reduce the memory footprint.
646.
647.It Sy zfs_arc_eviction_pct Ns = Ns Sy 200 Ns % Pq uint
648When
649.Fn arc_is_overflowing ,
650.Fn arc_get_data_impl
651waits for this percent of the requested amount of data to be evicted.
652For example, by default, for every
653.Em 2 KiB
654that's evicted,
655.Em 1 KiB
656of it may be "reused" by a new allocation.
657Since this is above
658.Sy 100 Ns % ,
659it ensures that progress is made towards getting
660.Sy arc_size No under Sy arc_c .
661Since this is finite, it ensures that allocations can still happen,
662even during the potentially long time that
663.Sy arc_size No is more than Sy arc_c .
664.
665.It Sy zfs_arc_evict_batch_limit Ns = Ns Sy 10 Pq uint
666Number ARC headers to evict per sub-list before proceeding to another sub-list.
667This batch-style operation prevents entire sub-lists from being evicted at once
668but comes at a cost of additional unlocking and locking.
669.
670.It Sy zfs_arc_grow_retry Ns = Ns Sy 0 Ns s Pq uint
671If set to a non zero value, it will replace the
672.Sy arc_grow_retry
673value with this value.
674The
675.Sy arc_grow_retry
676.No value Pq default Sy 5 Ns s
677is the number of seconds the ARC will wait before
678trying to resume growth after a memory pressure event.
679.
680.It Sy zfs_arc_lotsfree_percent Ns = Ns Sy 10 Ns % Pq int
681Throttle I/O when free system memory drops below this percentage of total
682system memory.
683Setting this value to
684.Sy 0
685will disable the throttle.
686.
687.It Sy zfs_arc_max Ns = Ns Sy 0 Ns B Pq u64
688Max size of ARC in bytes.
689If
690.Sy 0 ,
691then the max size of ARC is determined by the amount of system memory installed.
692The larger of
693.Sy all_system_memory No \- Sy 1 GiB
694and
695.Sy 5/8 No \(mu Sy all_system_memory
696will be used as the limit.
697This value must be at least
698.Sy 67108864 Ns B Pq 64 MiB .
699.Pp
700This value can be changed dynamically, with some caveats.
701It cannot be set back to
702.Sy 0
703while running, and reducing it below the current ARC size will not cause
704the ARC to shrink without memory pressure to induce shrinking.
705.
706.It Sy zfs_arc_meta_balance Ns = Ns Sy 500 Pq uint
707Balance between metadata and data on ghost hits.
708Values above 100 increase metadata caching by proportionally reducing effect
709of ghost data hits on target data/metadata rate.
710.
711.It Sy zfs_arc_min Ns = Ns Sy 0 Ns B Pq u64
712Min size of ARC in bytes.
713.No If set to Sy 0 , arc_c_min
714will default to consuming the larger of
715.Sy 32 MiB
716and
717.Sy all_system_memory No / Sy 32 .
718.
719.It Sy zfs_arc_min_prefetch_ms Ns = Ns Sy 0 Ns ms Ns Po Ns ≡ Ns 1s Pc Pq uint
720Minimum time prefetched blocks are locked in the ARC.
721.
722.It Sy zfs_arc_min_prescient_prefetch_ms Ns = Ns Sy 0 Ns ms Ns Po Ns ≡ Ns 6s Pc Pq uint
723Minimum time "prescient prefetched" blocks are locked in the ARC.
724These blocks are meant to be prefetched fairly aggressively ahead of
725the code that may use them.
726.
727.It Sy zfs_arc_prune_task_threads Ns = Ns Sy 1 Pq int
728Number of arc_prune threads.
729.Fx
730does not need more than one.
731Linux may theoretically use one per mount point up to number of CPUs,
732but that was not proven to be useful.
733.
734.It Sy zfs_max_missing_tvds Ns = Ns Sy 0 Pq int
735Number of missing top-level vdevs which will be allowed during
736pool import (only in read-only mode).
737.
738.It Sy zfs_max_nvlist_src_size Ns = Sy 0 Pq u64
739Maximum size in bytes allowed to be passed as
740.Sy zc_nvlist_src_size
741for ioctls on
742.Pa /dev/zfs .
743This prevents a user from causing the kernel to allocate
744an excessive amount of memory.
745When the limit is exceeded, the ioctl fails with
746.Sy EINVAL
747and a description of the error is sent to the
748.Pa zfs-dbgmsg
749log.
750This parameter should not need to be touched under normal circumstances.
751If
752.Sy 0 ,
753equivalent to a quarter of the user-wired memory limit under
754.Fx
755and to
756.Sy 134217728 Ns B Pq 128 MiB
757under Linux.
758.
759.It Sy zfs_multilist_num_sublists Ns = Ns Sy 0 Pq uint
760To allow more fine-grained locking, each ARC state contains a series
761of lists for both data and metadata objects.
762Locking is performed at the level of these "sub-lists".
763This parameters controls the number of sub-lists per ARC state,
764and also applies to other uses of the multilist data structure.
765.Pp
766If
767.Sy 0 ,
768equivalent to the greater of the number of online CPUs and
769.Sy 4 .
770.
771.It Sy zfs_arc_overflow_shift Ns = Ns Sy 8 Pq int
772The ARC size is considered to be overflowing if it exceeds the current
773ARC target size
774.Pq Sy arc_c
775by thresholds determined by this parameter.
776Exceeding by
777.Sy ( arc_c No >> Sy zfs_arc_overflow_shift ) No / Sy 2
778starts ARC reclamation process.
779If that appears insufficient, exceeding by
780.Sy ( arc_c No >> Sy zfs_arc_overflow_shift ) No \(mu Sy 1.5
781blocks new buffer allocation until the reclaim thread catches up.
782Started reclamation process continues till ARC size returns below the
783target size.
784.Pp
785The default value of
786.Sy 8
787causes the ARC to start reclamation if it exceeds the target size by
788.Em 0.2%
789of the target size, and block allocations by
790.Em 0.6% .
791.
792.It Sy zfs_arc_shrink_shift Ns = Ns Sy 0 Pq uint
793If nonzero, this will update
794.Sy arc_shrink_shift Pq default Sy 7
795with the new value.
796.
797.It Sy zfs_arc_pc_percent Ns = Ns Sy 0 Ns % Po off Pc Pq uint
798Percent of pagecache to reclaim ARC to.
799.Pp
800This tunable allows the ZFS ARC to play more nicely
801with the kernel's LRU pagecache.
802It can guarantee that the ARC size won't collapse under scanning
803pressure on the pagecache, yet still allows the ARC to be reclaimed down to
804.Sy zfs_arc_min
805if necessary.
806This value is specified as percent of pagecache size (as measured by
807.Sy NR_FILE_PAGES ) ,
808where that percent may exceed
809.Sy 100 .
810This
811only operates during memory pressure/reclaim.
812.
813.It Sy zfs_arc_shrinker_limit Ns = Ns Sy 10000 Pq int
814This is a limit on how many pages the ARC shrinker makes available for
815eviction in response to one page allocation attempt.
816Note that in practice, the kernel's shrinker can ask us to evict
817up to about four times this for one allocation attempt.
818.Pp
819The default limit of
820.Sy 10000 Pq in practice, Em 160 MiB No per allocation attempt with 4 KiB pages
821limits the amount of time spent attempting to reclaim ARC memory to
822less than 100 ms per allocation attempt,
823even with a small average compressed block size of ~8 KiB.
824.Pp
825The parameter can be set to 0 (zero) to disable the limit,
826and only applies on Linux.
827.
828.It Sy zfs_arc_sys_free Ns = Ns Sy 0 Ns B Pq u64
829The target number of bytes the ARC should leave as free memory on the system.
830If zero, equivalent to the bigger of
831.Sy 512 KiB No and Sy all_system_memory/64 .
832.
833.It Sy zfs_autoimport_disable Ns = Ns Sy 1 Ns | Ns 0 Pq int
834Disable pool import at module load by ignoring the cache file
835.Pq Sy spa_config_path .
836.
837.It Sy zfs_checksum_events_per_second Ns = Ns Sy 20 Ns /s Pq uint
838Rate limit checksum events to this many per second.
839Note that this should not be set below the ZED thresholds
840(currently 10 checksums over 10 seconds)
841or else the daemon may not trigger any action.
842.
843.It Sy zfs_commit_timeout_pct Ns = Ns Sy 10 Ns % Pq uint
844This controls the amount of time that a ZIL block (lwb) will remain "open"
845when it isn't "full", and it has a thread waiting for it to be committed to
846stable storage.
847The timeout is scaled based on a percentage of the last lwb
848latency to avoid significantly impacting the latency of each individual
849transaction record (itx).
850.
851.It Sy zfs_condense_indirect_commit_entry_delay_ms Ns = Ns Sy 0 Ns ms Pq int
852Vdev indirection layer (used for device removal) sleeps for this many
853milliseconds during mapping generation.
854Intended for use with the test suite to throttle vdev removal speed.
855.
856.It Sy zfs_condense_indirect_obsolete_pct Ns = Ns Sy 25 Ns % Pq uint
857Minimum percent of obsolete bytes in vdev mapping required to attempt to
858condense
859.Pq see Sy zfs_condense_indirect_vdevs_enable .
860Intended for use with the test suite
861to facilitate triggering condensing as needed.
862.
863.It Sy zfs_condense_indirect_vdevs_enable Ns = Ns Sy 1 Ns | Ns 0 Pq int
864Enable condensing indirect vdev mappings.
865When set, attempt to condense indirect vdev mappings
866if the mapping uses more than
867.Sy zfs_condense_min_mapping_bytes
868bytes of memory and if the obsolete space map object uses more than
869.Sy zfs_condense_max_obsolete_bytes
870bytes on-disk.
871The condensing process is an attempt to save memory by removing obsolete
872mappings.
873.
874.It Sy zfs_condense_max_obsolete_bytes Ns = Ns Sy 1073741824 Ns B Po 1 GiB Pc Pq u64
875Only attempt to condense indirect vdev mappings if the on-disk size
876of the obsolete space map object is greater than this number of bytes
877.Pq see Sy zfs_condense_indirect_vdevs_enable .
878.
879.It Sy zfs_condense_min_mapping_bytes Ns = Ns Sy 131072 Ns B Po 128 KiB Pc Pq u64
880Minimum size vdev mapping to attempt to condense
881.Pq see Sy zfs_condense_indirect_vdevs_enable .
882.
883.It Sy zfs_dbgmsg_enable Ns = Ns Sy 1 Ns | Ns 0 Pq int
884Internally ZFS keeps a small log to facilitate debugging.
885The log is enabled by default, and can be disabled by unsetting this option.
886The contents of the log can be accessed by reading
887.Pa /proc/spl/kstat/zfs/dbgmsg .
888Writing
889.Sy 0
890to the file clears the log.
891.Pp
892This setting does not influence debug prints due to
893.Sy zfs_flags .
894.
895.It Sy zfs_dbgmsg_maxsize Ns = Ns Sy 4194304 Ns B Po 4 MiB Pc Pq uint
896Maximum size of the internal ZFS debug log.
897.
898.It Sy zfs_dbuf_state_index Ns = Ns Sy 0 Pq int
899Historically used for controlling what reporting was available under
900.Pa /proc/spl/kstat/zfs .
901No effect.
902.
903.It Sy zfs_deadman_enabled Ns = Ns Sy 1 Ns | Ns 0 Pq int
904When a pool sync operation takes longer than
905.Sy zfs_deadman_synctime_ms ,
906or when an individual I/O operation takes longer than
907.Sy zfs_deadman_ziotime_ms ,
908then the operation is considered to be "hung".
909If
910.Sy zfs_deadman_enabled
911is set, then the deadman behavior is invoked as described by
912.Sy zfs_deadman_failmode .
913By default, the deadman is enabled and set to
914.Sy wait
915which results in "hung" I/O operations only being logged.
916The deadman is automatically disabled when a pool gets suspended.
917.
918.It Sy zfs_deadman_failmode Ns = Ns Sy wait Pq charp
919Controls the failure behavior when the deadman detects a "hung" I/O operation.
920Valid values are:
921.Bl -tag -compact -offset 4n -width "continue"
922.It Sy wait
923Wait for a "hung" operation to complete.
924For each "hung" operation a "deadman" event will be posted
925describing that operation.
926.It Sy continue
927Attempt to recover from a "hung" operation by re-dispatching it
928to the I/O pipeline if possible.
929.It Sy panic
930Panic the system.
931This can be used to facilitate automatic fail-over
932to a properly configured fail-over partner.
933.El
934.
935.It Sy zfs_deadman_checktime_ms Ns = Ns Sy 60000 Ns ms Po 1 min Pc Pq u64
936Check time in milliseconds.
937This defines the frequency at which we check for hung I/O requests
938and potentially invoke the
939.Sy zfs_deadman_failmode
940behavior.
941.
942.It Sy zfs_deadman_synctime_ms Ns = Ns Sy 600000 Ns ms Po 10 min Pc Pq u64
943Interval in milliseconds after which the deadman is triggered and also
944the interval after which a pool sync operation is considered to be "hung".
945Once this limit is exceeded the deadman will be invoked every
946.Sy zfs_deadman_checktime_ms
947milliseconds until the pool sync completes.
948.
949.It Sy zfs_deadman_ziotime_ms Ns = Ns Sy 300000 Ns ms Po 5 min Pc Pq u64
950Interval in milliseconds after which the deadman is triggered and an
951individual I/O operation is considered to be "hung".
952As long as the operation remains "hung",
953the deadman will be invoked every
954.Sy zfs_deadman_checktime_ms
955milliseconds until the operation completes.
956.
957.It Sy zfs_dedup_prefetch Ns = Ns Sy 0 Ns | Ns 1 Pq int
958Enable prefetching dedup-ed blocks which are going to be freed.
959.
960.It Sy zfs_delay_min_dirty_percent Ns = Ns Sy 60 Ns % Pq uint
961Start to delay each transaction once there is this amount of dirty data,
962expressed as a percentage of
963.Sy zfs_dirty_data_max .
964This value should be at least
965.Sy zfs_vdev_async_write_active_max_dirty_percent .
966.No See Sx ZFS TRANSACTION DELAY .
967.
968.It Sy zfs_delay_scale Ns = Ns Sy 500000 Pq int
969This controls how quickly the transaction delay approaches infinity.
970Larger values cause longer delays for a given amount of dirty data.
971.Pp
972For the smoothest delay, this value should be about 1 billion divided
973by the maximum number of operations per second.
974This will smoothly handle between ten times and a tenth of this number.
975.No See Sx ZFS TRANSACTION DELAY .
976.Pp
977.Sy zfs_delay_scale No \(mu Sy zfs_dirty_data_max Em must No be smaller than Sy 2^64 .
978.
979.It Sy zfs_disable_ivset_guid_check Ns = Ns Sy 0 Ns | Ns 1 Pq int
980Disables requirement for IVset GUIDs to be present and match when doing a raw
981receive of encrypted datasets.
982Intended for users whose pools were created with
983OpenZFS pre-release versions and now have compatibility issues.
984.
985.It Sy zfs_key_max_salt_uses Ns = Ns Sy 400000000 Po 4*10^8 Pc Pq ulong
986Maximum number of uses of a single salt value before generating a new one for
987encrypted datasets.
988The default value is also the maximum.
989.
990.It Sy zfs_object_mutex_size Ns = Ns Sy 64 Pq uint
991Size of the znode hashtable used for holds.
992.Pp
993Due to the need to hold locks on objects that may not exist yet, kernel mutexes
994are not created per-object and instead a hashtable is used where collisions
995will result in objects waiting when there is not actually contention on the
996same object.
997.
998.It Sy zfs_slow_io_events_per_second Ns = Ns Sy 20 Ns /s Pq int
999Rate limit delay and deadman zevents (which report slow I/O operations) to this
1000many per
1001second.
1002.
1003.It Sy zfs_unflushed_max_mem_amt Ns = Ns Sy 1073741824 Ns B Po 1 GiB Pc Pq u64
1004Upper-bound limit for unflushed metadata changes to be held by the
1005log spacemap in memory, in bytes.
1006.
1007.It Sy zfs_unflushed_max_mem_ppm Ns = Ns Sy 1000 Ns ppm Po 0.1% Pc Pq u64
1008Part of overall system memory that ZFS allows to be used
1009for unflushed metadata changes by the log spacemap, in millionths.
1010.
1011.It Sy zfs_unflushed_log_block_max Ns = Ns Sy 131072 Po 128k Pc Pq u64
1012Describes the maximum number of log spacemap blocks allowed for each pool.
1013The default value means that the space in all the log spacemaps
1014can add up to no more than
1015.Sy 131072
1016blocks (which means
1017.Em 16 GiB
1018of logical space before compression and ditto blocks,
1019assuming that blocksize is
1020.Em 128 KiB ) .
1021.Pp
1022This tunable is important because it involves a trade-off between import
1023time after an unclean export and the frequency of flushing metaslabs.
1024The higher this number is, the more log blocks we allow when the pool is
1025active which means that we flush metaslabs less often and thus decrease
1026the number of I/O operations for spacemap updates per TXG.
1027At the same time though, that means that in the event of an unclean export,
1028there will be more log spacemap blocks for us to read, inducing overhead
1029in the import time of the pool.
1030The lower the number, the amount of flushing increases, destroying log
1031blocks quicker as they become obsolete faster, which leaves less blocks
1032to be read during import time after a crash.
1033.Pp
1034Each log spacemap block existing during pool import leads to approximately
1035one extra logical I/O issued.
1036This is the reason why this tunable is exposed in terms of blocks rather
1037than space used.
1038.
1039.It Sy zfs_unflushed_log_block_min Ns = Ns Sy 1000 Pq u64
1040If the number of metaslabs is small and our incoming rate is high,
1041we could get into a situation that we are flushing all our metaslabs every TXG.
1042Thus we always allow at least this many log blocks.
1043.
1044.It Sy zfs_unflushed_log_block_pct Ns = Ns Sy 400 Ns % Pq u64
1045Tunable used to determine the number of blocks that can be used for
1046the spacemap log, expressed as a percentage of the total number of
1047unflushed metaslabs in the pool.
1048.
1049.It Sy zfs_unflushed_log_txg_max Ns = Ns Sy 1000 Pq u64
1050Tunable limiting maximum time in TXGs any metaslab may remain unflushed.
1051It effectively limits maximum number of unflushed per-TXG spacemap logs
1052that need to be read after unclean pool export.
1053.
1054.It Sy zfs_unlink_suspend_progress Ns = Ns Sy 0 Ns | Ns 1 Pq uint
1055When enabled, files will not be asynchronously removed from the list of pending
1056unlinks and the space they consume will be leaked.
1057Once this option has been disabled and the dataset is remounted,
1058the pending unlinks will be processed and the freed space returned to the pool.
1059This option is used by the test suite.
1060.
1061.It Sy zfs_delete_blocks Ns = Ns Sy 20480 Pq ulong
1062This is the used to define a large file for the purposes of deletion.
1063Files containing more than
1064.Sy zfs_delete_blocks
1065will be deleted asynchronously, while smaller files are deleted synchronously.
1066Decreasing this value will reduce the time spent in an
1067.Xr unlink 2
1068system call, at the expense of a longer delay before the freed space is
1069available.
1070This only applies on Linux.
1071.
1072.It Sy zfs_dirty_data_max Ns = Pq int
1073Determines the dirty space limit in bytes.
1074Once this limit is exceeded, new writes are halted until space frees up.
1075This parameter takes precedence over
1076.Sy zfs_dirty_data_max_percent .
1077.No See Sx ZFS TRANSACTION DELAY .
1078.Pp
1079Defaults to
1080.Sy physical_ram/10 ,
1081capped at
1082.Sy zfs_dirty_data_max_max .
1083.
1084.It Sy zfs_dirty_data_max_max Ns = Pq int
1085Maximum allowable value of
1086.Sy zfs_dirty_data_max ,
1087expressed in bytes.
1088This limit is only enforced at module load time, and will be ignored if
1089.Sy zfs_dirty_data_max
1090is later changed.
1091This parameter takes precedence over
1092.Sy zfs_dirty_data_max_max_percent .
1093.No See Sx ZFS TRANSACTION DELAY .
1094.Pp
1095Defaults to
1096.Sy min(physical_ram/4, 4GiB) ,
1097or
1098.Sy min(physical_ram/4, 1GiB)
1099for 32-bit systems.
1100.
1101.It Sy zfs_dirty_data_max_max_percent Ns = Ns Sy 25 Ns % Pq uint
1102Maximum allowable value of
1103.Sy zfs_dirty_data_max ,
1104expressed as a percentage of physical RAM.
1105This limit is only enforced at module load time, and will be ignored if
1106.Sy zfs_dirty_data_max
1107is later changed.
1108The parameter
1109.Sy zfs_dirty_data_max_max
1110takes precedence over this one.
1111.No See Sx ZFS TRANSACTION DELAY .
1112.
1113.It Sy zfs_dirty_data_max_percent Ns = Ns Sy 10 Ns % Pq uint
1114Determines the dirty space limit, expressed as a percentage of all memory.
1115Once this limit is exceeded, new writes are halted until space frees up.
1116The parameter
1117.Sy zfs_dirty_data_max
1118takes precedence over this one.
1119.No See Sx ZFS TRANSACTION DELAY .
1120.Pp
1121Subject to
1122.Sy zfs_dirty_data_max_max .
1123.
1124.It Sy zfs_dirty_data_sync_percent Ns = Ns Sy 20 Ns % Pq uint
1125Start syncing out a transaction group if there's at least this much dirty data
1126.Pq as a percentage of Sy zfs_dirty_data_max .
1127This should be less than
1128.Sy zfs_vdev_async_write_active_min_dirty_percent .
1129.
1130.It Sy zfs_wrlog_data_max Ns = Pq int
1131The upper limit of write-transaction zil log data size in bytes.
1132Write operations are throttled when approaching the limit until log data is
1133cleared out after transaction group sync.
1134Because of some overhead, it should be set at least 2 times the size of
1135.Sy zfs_dirty_data_max
1136.No to prevent harming normal write throughput .
1137It also should be smaller than the size of the slog device if slog is present.
1138.Pp
1139Defaults to
1140.Sy zfs_dirty_data_max*2
1141.
1142.It Sy zfs_fallocate_reserve_percent Ns = Ns Sy 110 Ns % Pq uint
1143Since ZFS is a copy-on-write filesystem with snapshots, blocks cannot be
1144preallocated for a file in order to guarantee that later writes will not
1145run out of space.
1146Instead,
1147.Xr fallocate 2
1148space preallocation only checks that sufficient space is currently available
1149in the pool or the user's project quota allocation,
1150and then creates a sparse file of the requested size.
1151The requested space is multiplied by
1152.Sy zfs_fallocate_reserve_percent
1153to allow additional space for indirect blocks and other internal metadata.
1154Setting this to
1155.Sy 0
1156disables support for
1157.Xr fallocate 2
1158and causes it to return
1159.Sy EOPNOTSUPP .
1160.
1161.It Sy zfs_fletcher_4_impl Ns = Ns Sy fastest Pq string
1162Select a fletcher 4 implementation.
1163.Pp
1164Supported selectors are:
1165.Sy fastest , scalar , sse2 , ssse3 , avx2 , avx512f , avx512bw ,
1166.No and Sy aarch64_neon .
1167All except
1168.Sy fastest No and Sy scalar
1169require instruction set extensions to be available,
1170and will only appear if ZFS detects that they are present at runtime.
1171If multiple implementations of fletcher 4 are available, the
1172.Sy fastest
1173will be chosen using a micro benchmark.
1174Selecting
1175.Sy scalar
1176results in the original CPU-based calculation being used.
1177Selecting any option other than
1178.Sy fastest No or Sy scalar
1179results in vector instructions
1180from the respective CPU instruction set being used.
1181.
1182.It Sy zfs_bclone_enabled Ns = Ns Sy 1 Ns | Ns 0 Pq int
1183Enable the experimental block cloning feature.
1184If this setting is 0, then even if feature@block_cloning is enabled,
1185attempts to clone blocks will act as though the feature is disabled.
1186.
1187.It Sy zfs_bclone_wait_dirty Ns = Ns Sy 0 Ns | Ns 1 Pq int
1188When set to 1 the FICLONE and FICLONERANGE ioctls wait for dirty data to be
1189written to disk.
1190This allows the clone operation to reliably succeed when a file is
1191modified and then immediately cloned.
1192For small files this may be slower than making a copy of the file.
1193Therefore, this setting defaults to 0 which causes a clone operation to
1194immediately fail when encountering a dirty block.
1195.
1196.It Sy zfs_blake3_impl Ns = Ns Sy fastest Pq string
1197Select a BLAKE3 implementation.
1198.Pp
1199Supported selectors are:
1200.Sy cycle , fastest , generic , sse2 , sse41 , avx2 , avx512 .
1201All except
1202.Sy cycle , fastest No and Sy generic
1203require instruction set extensions to be available,
1204and will only appear if ZFS detects that they are present at runtime.
1205If multiple implementations of BLAKE3 are available, the
1206.Sy fastest will be chosen using a micro benchmark. You can see the
1207benchmark results by reading this kstat file:
1208.Pa /proc/spl/kstat/zfs/chksum_bench .
1209.
1210.It Sy zfs_free_bpobj_enabled Ns = Ns Sy 1 Ns | Ns 0 Pq int
1211Enable/disable the processing of the free_bpobj object.
1212.
1213.It Sy zfs_async_block_max_blocks Ns = Ns Sy UINT64_MAX Po unlimited Pc Pq u64
1214Maximum number of blocks freed in a single TXG.
1215.
1216.It Sy zfs_max_async_dedup_frees Ns = Ns Sy 100000 Po 10^5 Pc Pq u64
1217Maximum number of dedup blocks freed in a single TXG.
1218.
1219.It Sy zfs_vdev_async_read_max_active Ns = Ns Sy 3 Pq uint
1220Maximum asynchronous read I/O operations active to each device.
1221.No See Sx ZFS I/O SCHEDULER .
1222.
1223.It Sy zfs_vdev_async_read_min_active Ns = Ns Sy 1 Pq uint
1224Minimum asynchronous read I/O operation active to each device.
1225.No See Sx ZFS I/O SCHEDULER .
1226.
1227.It Sy zfs_vdev_async_write_active_max_dirty_percent Ns = Ns Sy 60 Ns % Pq uint
1228When the pool has more than this much dirty data, use
1229.Sy zfs_vdev_async_write_max_active
1230to limit active async writes.
1231If the dirty data is between the minimum and maximum,
1232the active I/O limit is linearly interpolated.
1233.No See Sx ZFS I/O SCHEDULER .
1234.
1235.It Sy zfs_vdev_async_write_active_min_dirty_percent Ns = Ns Sy 30 Ns % Pq uint
1236When the pool has less than this much dirty data, use
1237.Sy zfs_vdev_async_write_min_active
1238to limit active async writes.
1239If the dirty data is between the minimum and maximum,
1240the active I/O limit is linearly
1241interpolated.
1242.No See Sx ZFS I/O SCHEDULER .
1243.
1244.It Sy zfs_vdev_async_write_max_active Ns = Ns Sy 10 Pq uint
1245Maximum asynchronous write I/O operations active to each device.
1246.No See Sx ZFS I/O SCHEDULER .
1247.
1248.It Sy zfs_vdev_async_write_min_active Ns = Ns Sy 2 Pq uint
1249Minimum asynchronous write I/O operations active to each device.
1250.No See Sx ZFS I/O SCHEDULER .
1251.Pp
1252Lower values are associated with better latency on rotational media but poorer
1253resilver performance.
1254The default value of
1255.Sy 2
1256was chosen as a compromise.
1257A value of
1258.Sy 3
1259has been shown to improve resilver performance further at a cost of
1260further increasing latency.
1261.
1262.It Sy zfs_vdev_initializing_max_active Ns = Ns Sy 1 Pq uint
1263Maximum initializing I/O operations active to each device.
1264.No See Sx ZFS I/O SCHEDULER .
1265.
1266.It Sy zfs_vdev_initializing_min_active Ns = Ns Sy 1 Pq uint
1267Minimum initializing I/O operations active to each device.
1268.No See Sx ZFS I/O SCHEDULER .
1269.
1270.It Sy zfs_vdev_max_active Ns = Ns Sy 1000 Pq uint
1271The maximum number of I/O operations active to each device.
1272Ideally, this will be at least the sum of each queue's
1273.Sy max_active .
1274.No See Sx ZFS I/O SCHEDULER .
1275.
1276.It Sy zfs_vdev_open_timeout_ms Ns = Ns Sy 1000 Pq uint
1277Timeout value to wait before determining a device is missing
1278during import.
1279This is helpful for transient missing paths due
1280to links being briefly removed and recreated in response to
1281udev events.
1282.
1283.It Sy zfs_vdev_rebuild_max_active Ns = Ns Sy 3 Pq uint
1284Maximum sequential resilver I/O operations active to each device.
1285.No See Sx ZFS I/O SCHEDULER .
1286.
1287.It Sy zfs_vdev_rebuild_min_active Ns = Ns Sy 1 Pq uint
1288Minimum sequential resilver I/O operations active to each device.
1289.No See Sx ZFS I/O SCHEDULER .
1290.
1291.It Sy zfs_vdev_removal_max_active Ns = Ns Sy 2 Pq uint
1292Maximum removal I/O operations active to each device.
1293.No See Sx ZFS I/O SCHEDULER .
1294.
1295.It Sy zfs_vdev_removal_min_active Ns = Ns Sy 1 Pq uint
1296Minimum removal I/O operations active to each device.
1297.No See Sx ZFS I/O SCHEDULER .
1298.
1299.It Sy zfs_vdev_scrub_max_active Ns = Ns Sy 2 Pq uint
1300Maximum scrub I/O operations active to each device.
1301.No See Sx ZFS I/O SCHEDULER .
1302.
1303.It Sy zfs_vdev_scrub_min_active Ns = Ns Sy 1 Pq uint
1304Minimum scrub I/O operations active to each device.
1305.No See Sx ZFS I/O SCHEDULER .
1306.
1307.It Sy zfs_vdev_sync_read_max_active Ns = Ns Sy 10 Pq uint
1308Maximum synchronous read I/O operations active to each device.
1309.No See Sx ZFS I/O SCHEDULER .
1310.
1311.It Sy zfs_vdev_sync_read_min_active Ns = Ns Sy 10 Pq uint
1312Minimum synchronous read I/O operations active to each device.
1313.No See Sx ZFS I/O SCHEDULER .
1314.
1315.It Sy zfs_vdev_sync_write_max_active Ns = Ns Sy 10 Pq uint
1316Maximum synchronous write I/O operations active to each device.
1317.No See Sx ZFS I/O SCHEDULER .
1318.
1319.It Sy zfs_vdev_sync_write_min_active Ns = Ns Sy 10 Pq uint
1320Minimum synchronous write I/O operations active to each device.
1321.No See Sx ZFS I/O SCHEDULER .
1322.
1323.It Sy zfs_vdev_trim_max_active Ns = Ns Sy 2 Pq uint
1324Maximum trim/discard I/O operations active to each device.
1325.No See Sx ZFS I/O SCHEDULER .
1326.
1327.It Sy zfs_vdev_trim_min_active Ns = Ns Sy 1 Pq uint
1328Minimum trim/discard I/O operations active to each device.
1329.No See Sx ZFS I/O SCHEDULER .
1330.
1331.It Sy zfs_vdev_nia_delay Ns = Ns Sy 5 Pq uint
1332For non-interactive I/O (scrub, resilver, removal, initialize and rebuild),
1333the number of concurrently-active I/O operations is limited to
1334.Sy zfs_*_min_active ,
1335unless the vdev is "idle".
1336When there are no interactive I/O operations active (synchronous or otherwise),
1337and
1338.Sy zfs_vdev_nia_delay
1339operations have completed since the last interactive operation,
1340then the vdev is considered to be "idle",
1341and the number of concurrently-active non-interactive operations is increased to
1342.Sy zfs_*_max_active .
1343.No See Sx ZFS I/O SCHEDULER .
1344.
1345.It Sy zfs_vdev_nia_credit Ns = Ns Sy 5 Pq uint
1346Some HDDs tend to prioritize sequential I/O so strongly, that concurrent
1347random I/O latency reaches several seconds.
1348On some HDDs this happens even if sequential I/O operations
1349are submitted one at a time, and so setting
1350.Sy zfs_*_max_active Ns = Sy 1
1351does not help.
1352To prevent non-interactive I/O, like scrub,
1353from monopolizing the device, no more than
1354.Sy zfs_vdev_nia_credit operations can be sent
1355while there are outstanding incomplete interactive operations.
1356This enforced wait ensures the HDD services the interactive I/O
1357within a reasonable amount of time.
1358.No See Sx ZFS I/O SCHEDULER .
1359.
1360.It Sy zfs_vdev_queue_depth_pct Ns = Ns Sy 1000 Ns % Pq uint
1361Maximum number of queued allocations per top-level vdev expressed as
1362a percentage of
1363.Sy zfs_vdev_async_write_max_active ,
1364which allows the system to detect devices that are more capable
1365of handling allocations and to allocate more blocks to those devices.
1366This allows for dynamic allocation distribution when devices are imbalanced,
1367as fuller devices will tend to be slower than empty devices.
1368.Pp
1369Also see
1370.Sy zio_dva_throttle_enabled .
1371.
1372.It Sy zfs_vdev_def_queue_depth Ns = Ns Sy 32 Pq uint
1373Default queue depth for each vdev IO allocator.
1374Higher values allow for better coalescing of sequential writes before sending
1375them to the disk, but can increase transaction commit times.
1376.
1377.It Sy zfs_vdev_failfast_mask Ns = Ns Sy 1 Pq uint
1378Defines if the driver should retire on a given error type.
1379The following options may be bitwise-ored together:
1380.TS
1381box;
1382lbz r l l .
1383	Value	Name	Description
1384_
1385	1	Device	No driver retries on device errors
1386	2	Transport	No driver retries on transport errors.
1387	4	Driver	No driver retries on driver errors.
1388.TE
1389.
1390.It Sy zfs_vdev_disk_max_segs Ns = Ns Sy 0 Pq uint
1391Maximum number of segments to add to a BIO (min 4).
1392If this is higher than the maximum allowed by the device queue or the kernel
1393itself, it will be clamped.
1394Setting it to zero will cause the kernel's ideal size to be used.
1395This parameter only applies on Linux.
1396This parameter is ignored if
1397.Sy zfs_vdev_disk_classic Ns = Ns Sy 1 .
1398.
1399.It Sy zfs_vdev_disk_classic Ns = Ns Sy 0 Ns | Ns 1 Pq uint
1400If set to 1, OpenZFS will submit IO to Linux using the method it used in 2.2
1401and earlier.
1402This "classic" method has known issues with highly fragmented IO requests and
1403is slower on many workloads, but it has been in use for many years and is known
1404to be very stable.
1405If you set this parameter, please also open a bug report why you did so,
1406including the workload involved and any error messages.
1407.Pp
1408This parameter and the classic submission method will be removed once we have
1409total confidence in the new method.
1410.Pp
1411This parameter only applies on Linux, and can only be set at module load time.
1412.
1413.It Sy zfs_expire_snapshot Ns = Ns Sy 300 Ns s Pq int
1414Time before expiring
1415.Pa .zfs/snapshot .
1416.
1417.It Sy zfs_admin_snapshot Ns = Ns Sy 0 Ns | Ns 1 Pq int
1418Allow the creation, removal, or renaming of entries in the
1419.Sy .zfs/snapshot
1420directory to cause the creation, destruction, or renaming of snapshots.
1421When enabled, this functionality works both locally and over NFS exports
1422which have the
1423.Em no_root_squash
1424option set.
1425.
1426.It Sy zfs_flags Ns = Ns Sy 0 Pq int
1427Set additional debugging flags.
1428The following flags may be bitwise-ored together:
1429.TS
1430box;
1431lbz r l l .
1432	Value	Name	Description
1433_
1434	1	ZFS_DEBUG_DPRINTF	Enable dprintf entries in the debug log.
1435*	2	ZFS_DEBUG_DBUF_VERIFY	Enable extra dbuf verifications.
1436*	4	ZFS_DEBUG_DNODE_VERIFY	Enable extra dnode verifications.
1437	8	ZFS_DEBUG_SNAPNAMES	Enable snapshot name verification.
1438*	16	ZFS_DEBUG_MODIFY	Check for illegally modified ARC buffers.
1439	64	ZFS_DEBUG_ZIO_FREE	Enable verification of block frees.
1440	128	ZFS_DEBUG_HISTOGRAM_VERIFY	Enable extra spacemap histogram verifications.
1441	256	ZFS_DEBUG_METASLAB_VERIFY	Verify space accounting on disk matches in-memory \fBrange_trees\fP.
1442	512	ZFS_DEBUG_SET_ERROR	Enable \fBSET_ERROR\fP and dprintf entries in the debug log.
1443	1024	ZFS_DEBUG_INDIRECT_REMAP	Verify split blocks created by device removal.
1444	2048	ZFS_DEBUG_TRIM	Verify TRIM ranges are always within the allocatable range tree.
1445	4096	ZFS_DEBUG_LOG_SPACEMAP	Verify that the log summary is consistent with the spacemap log
1446			       and enable \fBzfs_dbgmsgs\fP for metaslab loading and flushing.
1447.TE
1448.Sy \& * No Requires debug build .
1449.
1450.It Sy zfs_btree_verify_intensity Ns = Ns Sy 0 Pq uint
1451Enables btree verification.
1452The following settings are culminative:
1453.TS
1454box;
1455lbz r l l .
1456	Value	Description
1457
1458	1	Verify height.
1459	2	Verify pointers from children to parent.
1460	3	Verify element counts.
1461	4	Verify element order. (expensive)
1462*	5	Verify unused memory is poisoned. (expensive)
1463.TE
1464.Sy \& * No Requires debug build .
1465.
1466.It Sy zfs_free_leak_on_eio Ns = Ns Sy 0 Ns | Ns 1 Pq int
1467If destroy encounters an
1468.Sy EIO
1469while reading metadata (e.g. indirect blocks),
1470space referenced by the missing metadata can not be freed.
1471Normally this causes the background destroy to become "stalled",
1472as it is unable to make forward progress.
1473While in this stalled state, all remaining space to free
1474from the error-encountering filesystem is "temporarily leaked".
1475Set this flag to cause it to ignore the
1476.Sy EIO ,
1477permanently leak the space from indirect blocks that can not be read,
1478and continue to free everything else that it can.
1479.Pp
1480The default "stalling" behavior is useful if the storage partially
1481fails (i.e. some but not all I/O operations fail), and then later recovers.
1482In this case, we will be able to continue pool operations while it is
1483partially failed, and when it recovers, we can continue to free the
1484space, with no leaks.
1485Note, however, that this case is actually fairly rare.
1486.Pp
1487Typically pools either
1488.Bl -enum -compact -offset 4n -width "1."
1489.It
1490fail completely (but perhaps temporarily,
1491e.g. due to a top-level vdev going offline), or
1492.It
1493have localized, permanent errors (e.g. disk returns the wrong data
1494due to bit flip or firmware bug).
1495.El
1496In the former case, this setting does not matter because the
1497pool will be suspended and the sync thread will not be able to make
1498forward progress regardless.
1499In the latter, because the error is permanent, the best we can do
1500is leak the minimum amount of space,
1501which is what setting this flag will do.
1502It is therefore reasonable for this flag to normally be set,
1503but we chose the more conservative approach of not setting it,
1504so that there is no possibility of
1505leaking space in the "partial temporary" failure case.
1506.
1507.It Sy zfs_free_min_time_ms Ns = Ns Sy 1000 Ns ms Po 1s Pc Pq uint
1508During a
1509.Nm zfs Cm destroy
1510operation using the
1511.Sy async_destroy
1512feature,
1513a minimum of this much time will be spent working on freeing blocks per TXG.
1514.
1515.It Sy zfs_obsolete_min_time_ms Ns = Ns Sy 500 Ns ms Pq uint
1516Similar to
1517.Sy zfs_free_min_time_ms ,
1518but for cleanup of old indirection records for removed vdevs.
1519.
1520.It Sy zfs_immediate_write_sz Ns = Ns Sy 32768 Ns B Po 32 KiB Pc Pq s64
1521Largest data block to write to the ZIL.
1522Larger blocks will be treated as if the dataset being written to had the
1523.Sy logbias Ns = Ns Sy throughput
1524property set.
1525.
1526.It Sy zfs_initialize_value Ns = Ns Sy 16045690984833335022 Po 0xDEADBEEFDEADBEEE Pc Pq u64
1527Pattern written to vdev free space by
1528.Xr zpool-initialize 8 .
1529.
1530.It Sy zfs_initialize_chunk_size Ns = Ns Sy 1048576 Ns B Po 1 MiB Pc Pq u64
1531Size of writes used by
1532.Xr zpool-initialize 8 .
1533This option is used by the test suite.
1534.
1535.It Sy zfs_livelist_max_entries Ns = Ns Sy 500000 Po 5*10^5 Pc Pq u64
1536The threshold size (in block pointers) at which we create a new sub-livelist.
1537Larger sublists are more costly from a memory perspective but the fewer
1538sublists there are, the lower the cost of insertion.
1539.
1540.It Sy zfs_livelist_min_percent_shared Ns = Ns Sy 75 Ns % Pq int
1541If the amount of shared space between a snapshot and its clone drops below
1542this threshold, the clone turns off the livelist and reverts to the old
1543deletion method.
1544This is in place because livelists no long give us a benefit
1545once a clone has been overwritten enough.
1546.
1547.It Sy zfs_livelist_condense_new_alloc Ns = Ns Sy 0 Pq int
1548Incremented each time an extra ALLOC blkptr is added to a livelist entry while
1549it is being condensed.
1550This option is used by the test suite to track race conditions.
1551.
1552.It Sy zfs_livelist_condense_sync_cancel Ns = Ns Sy 0 Pq int
1553Incremented each time livelist condensing is canceled while in
1554.Fn spa_livelist_condense_sync .
1555This option is used by the test suite to track race conditions.
1556.
1557.It Sy zfs_livelist_condense_sync_pause Ns = Ns Sy 0 Ns | Ns 1 Pq int
1558When set, the livelist condense process pauses indefinitely before
1559executing the synctask \(em
1560.Fn spa_livelist_condense_sync .
1561This option is used by the test suite to trigger race conditions.
1562.
1563.It Sy zfs_livelist_condense_zthr_cancel Ns = Ns Sy 0 Pq int
1564Incremented each time livelist condensing is canceled while in
1565.Fn spa_livelist_condense_cb .
1566This option is used by the test suite to track race conditions.
1567.
1568.It Sy zfs_livelist_condense_zthr_pause Ns = Ns Sy 0 Ns | Ns 1 Pq int
1569When set, the livelist condense process pauses indefinitely before
1570executing the open context condensing work in
1571.Fn spa_livelist_condense_cb .
1572This option is used by the test suite to trigger race conditions.
1573.
1574.It Sy zfs_lua_max_instrlimit Ns = Ns Sy 100000000 Po 10^8 Pc Pq u64
1575The maximum execution time limit that can be set for a ZFS channel program,
1576specified as a number of Lua instructions.
1577.
1578.It Sy zfs_lua_max_memlimit Ns = Ns Sy 104857600 Po 100 MiB Pc Pq u64
1579The maximum memory limit that can be set for a ZFS channel program, specified
1580in bytes.
1581.
1582.It Sy zfs_max_dataset_nesting Ns = Ns Sy 50 Pq int
1583The maximum depth of nested datasets.
1584This value can be tuned temporarily to
1585fix existing datasets that exceed the predefined limit.
1586.
1587.It Sy zfs_max_log_walking Ns = Ns Sy 5 Pq u64
1588The number of past TXGs that the flushing algorithm of the log spacemap
1589feature uses to estimate incoming log blocks.
1590.
1591.It Sy zfs_max_logsm_summary_length Ns = Ns Sy 10 Pq u64
1592Maximum number of rows allowed in the summary of the spacemap log.
1593.
1594.It Sy zfs_max_recordsize Ns = Ns Sy 16777216 Po 16 MiB Pc Pq uint
1595We currently support block sizes from
1596.Em 512 Po 512 B Pc No to Em 16777216 Po 16 MiB Pc .
1597The benefits of larger blocks, and thus larger I/O,
1598need to be weighed against the cost of COWing a giant block to modify one byte.
1599Additionally, very large blocks can have an impact on I/O latency,
1600and also potentially on the memory allocator.
1601Therefore, we formerly forbade creating blocks larger than 1M.
1602Larger blocks could be created by changing it,
1603and pools with larger blocks can always be imported and used,
1604regardless of this setting.
1605.
1606.It Sy zfs_allow_redacted_dataset_mount Ns = Ns Sy 0 Ns | Ns 1 Pq int
1607Allow datasets received with redacted send/receive to be mounted.
1608Normally disabled because these datasets may be missing key data.
1609.
1610.It Sy zfs_min_metaslabs_to_flush Ns = Ns Sy 1 Pq u64
1611Minimum number of metaslabs to flush per dirty TXG.
1612.
1613.It Sy zfs_metaslab_fragmentation_threshold Ns = Ns Sy 70 Ns % Pq uint
1614Allow metaslabs to keep their active state as long as their fragmentation
1615percentage is no more than this value.
1616An active metaslab that exceeds this threshold
1617will no longer keep its active status allowing better metaslabs to be selected.
1618.
1619.It Sy zfs_mg_fragmentation_threshold Ns = Ns Sy 95 Ns % Pq uint
1620Metaslab groups are considered eligible for allocations if their
1621fragmentation metric (measured as a percentage) is less than or equal to
1622this value.
1623If a metaslab group exceeds this threshold then it will be
1624skipped unless all metaslab groups within the metaslab class have also
1625crossed this threshold.
1626.
1627.It Sy zfs_mg_noalloc_threshold Ns = Ns Sy 0 Ns % Pq uint
1628Defines a threshold at which metaslab groups should be eligible for allocations.
1629The value is expressed as a percentage of free space
1630beyond which a metaslab group is always eligible for allocations.
1631If a metaslab group's free space is less than or equal to the
1632threshold, the allocator will avoid allocating to that group
1633unless all groups in the pool have reached the threshold.
1634Once all groups have reached the threshold, all groups are allowed to accept
1635allocations.
1636The default value of
1637.Sy 0
1638disables the feature and causes all metaslab groups to be eligible for
1639allocations.
1640.Pp
1641This parameter allows one to deal with pools having heavily imbalanced
1642vdevs such as would be the case when a new vdev has been added.
1643Setting the threshold to a non-zero percentage will stop allocations
1644from being made to vdevs that aren't filled to the specified percentage
1645and allow lesser filled vdevs to acquire more allocations than they
1646otherwise would under the old
1647.Sy zfs_mg_alloc_failures
1648facility.
1649.
1650.It Sy zfs_ddt_data_is_special Ns = Ns Sy 1 Ns | Ns 0 Pq int
1651If enabled, ZFS will place DDT data into the special allocation class.
1652.
1653.It Sy zfs_user_indirect_is_special Ns = Ns Sy 1 Ns | Ns 0 Pq int
1654If enabled, ZFS will place user data indirect blocks
1655into the special allocation class.
1656.
1657.It Sy zfs_multihost_history Ns = Ns Sy 0 Pq uint
1658Historical statistics for this many latest multihost updates will be available
1659in
1660.Pa /proc/spl/kstat/zfs/ Ns Ao Ar pool Ac Ns Pa /multihost .
1661.
1662.It Sy zfs_multihost_interval Ns = Ns Sy 1000 Ns ms Po 1 s Pc Pq u64
1663Used to control the frequency of multihost writes which are performed when the
1664.Sy multihost
1665pool property is on.
1666This is one of the factors used to determine the
1667length of the activity check during import.
1668.Pp
1669The multihost write period is
1670.Sy zfs_multihost_interval No / Sy leaf-vdevs .
1671On average a multihost write will be issued for each leaf vdev
1672every
1673.Sy zfs_multihost_interval
1674milliseconds.
1675In practice, the observed period can vary with the I/O load
1676and this observed value is the delay which is stored in the uberblock.
1677.
1678.It Sy zfs_multihost_import_intervals Ns = Ns Sy 20 Pq uint
1679Used to control the duration of the activity test on import.
1680Smaller values of
1681.Sy zfs_multihost_import_intervals
1682will reduce the import time but increase
1683the risk of failing to detect an active pool.
1684The total activity check time is never allowed to drop below one second.
1685.Pp
1686On import the activity check waits a minimum amount of time determined by
1687.Sy zfs_multihost_interval No \(mu Sy zfs_multihost_import_intervals ,
1688or the same product computed on the host which last had the pool imported,
1689whichever is greater.
1690The activity check time may be further extended if the value of MMP
1691delay found in the best uberblock indicates actual multihost updates happened
1692at longer intervals than
1693.Sy zfs_multihost_interval .
1694A minimum of
1695.Em 100 ms
1696is enforced.
1697.Pp
1698.Sy 0 No is equivalent to Sy 1 .
1699.
1700.It Sy zfs_multihost_fail_intervals Ns = Ns Sy 10 Pq uint
1701Controls the behavior of the pool when multihost write failures or delays are
1702detected.
1703.Pp
1704When
1705.Sy 0 ,
1706multihost write failures or delays are ignored.
1707The failures will still be reported to the ZED which depending on
1708its configuration may take action such as suspending the pool or offlining a
1709device.
1710.Pp
1711Otherwise, the pool will be suspended if
1712.Sy zfs_multihost_fail_intervals No \(mu Sy zfs_multihost_interval
1713milliseconds pass without a successful MMP write.
1714This guarantees the activity test will see MMP writes if the pool is imported.
1715.Sy 1 No is equivalent to Sy 2 ;
1716this is necessary to prevent the pool from being suspended
1717due to normal, small I/O latency variations.
1718.
1719.It Sy zfs_no_scrub_io Ns = Ns Sy 0 Ns | Ns 1 Pq int
1720Set to disable scrub I/O.
1721This results in scrubs not actually scrubbing data and
1722simply doing a metadata crawl of the pool instead.
1723.
1724.It Sy zfs_no_scrub_prefetch Ns = Ns Sy 0 Ns | Ns 1 Pq int
1725Set to disable block prefetching for scrubs.
1726.
1727.It Sy zfs_nocacheflush Ns = Ns Sy 0 Ns | Ns 1 Pq int
1728Disable cache flush operations on disks when writing.
1729Setting this will cause pool corruption on power loss
1730if a volatile out-of-order write cache is enabled.
1731.
1732.It Sy zfs_nopwrite_enabled Ns = Ns Sy 1 Ns | Ns 0 Pq int
1733Allow no-operation writes.
1734The occurrence of nopwrites will further depend on other pool properties
1735.Pq i.a. the checksumming and compression algorithms .
1736.
1737.It Sy zfs_dmu_offset_next_sync Ns = Ns Sy 1 Ns | Ns 0 Pq int
1738Enable forcing TXG sync to find holes.
1739When enabled forces ZFS to sync data when
1740.Sy SEEK_HOLE No or Sy SEEK_DATA
1741flags are used allowing holes in a file to be accurately reported.
1742When disabled holes will not be reported in recently dirtied files.
1743.
1744.It Sy zfs_pd_bytes_max Ns = Ns Sy 52428800 Ns B Po 50 MiB Pc Pq int
1745The number of bytes which should be prefetched during a pool traversal, like
1746.Nm zfs Cm send
1747or other data crawling operations.
1748.
1749.It Sy zfs_traverse_indirect_prefetch_limit Ns = Ns Sy 32 Pq uint
1750The number of blocks pointed by indirect (non-L0) block which should be
1751prefetched during a pool traversal, like
1752.Nm zfs Cm send
1753or other data crawling operations.
1754.
1755.It Sy zfs_per_txg_dirty_frees_percent Ns = Ns Sy 30 Ns % Pq u64
1756Control percentage of dirtied indirect blocks from frees allowed into one TXG.
1757After this threshold is crossed, additional frees will wait until the next TXG.
1758.Sy 0 No disables this throttle .
1759.
1760.It Sy zfs_prefetch_disable Ns = Ns Sy 0 Ns | Ns 1 Pq int
1761Disable predictive prefetch.
1762Note that it leaves "prescient" prefetch
1763.Pq for, e.g., Nm zfs Cm send
1764intact.
1765Unlike predictive prefetch, prescient prefetch never issues I/O
1766that ends up not being needed, so it can't hurt performance.
1767.
1768.It Sy zfs_qat_checksum_disable Ns = Ns Sy 0 Ns | Ns 1 Pq int
1769Disable QAT hardware acceleration for SHA256 checksums.
1770May be unset after the ZFS modules have been loaded to initialize the QAT
1771hardware as long as support is compiled in and the QAT driver is present.
1772.
1773.It Sy zfs_qat_compress_disable Ns = Ns Sy 0 Ns | Ns 1 Pq int
1774Disable QAT hardware acceleration for gzip compression.
1775May be unset after the ZFS modules have been loaded to initialize the QAT
1776hardware as long as support is compiled in and the QAT driver is present.
1777.
1778.It Sy zfs_qat_encrypt_disable Ns = Ns Sy 0 Ns | Ns 1 Pq int
1779Disable QAT hardware acceleration for AES-GCM encryption.
1780May be unset after the ZFS modules have been loaded to initialize the QAT
1781hardware as long as support is compiled in and the QAT driver is present.
1782.
1783.It Sy zfs_vnops_read_chunk_size Ns = Ns Sy 1048576 Ns B Po 1 MiB Pc Pq u64
1784Bytes to read per chunk.
1785.
1786.It Sy zfs_read_history Ns = Ns Sy 0 Pq uint
1787Historical statistics for this many latest reads will be available in
1788.Pa /proc/spl/kstat/zfs/ Ns Ao Ar pool Ac Ns Pa /reads .
1789.
1790.It Sy zfs_read_history_hits Ns = Ns Sy 0 Ns | Ns 1 Pq int
1791Include cache hits in read history
1792.
1793.It Sy zfs_rebuild_max_segment Ns = Ns Sy 1048576 Ns B Po 1 MiB Pc Pq u64
1794Maximum read segment size to issue when sequentially resilvering a
1795top-level vdev.
1796.
1797.It Sy zfs_rebuild_scrub_enabled Ns = Ns Sy 1 Ns | Ns 0 Pq int
1798Automatically start a pool scrub when the last active sequential resilver
1799completes in order to verify the checksums of all blocks which have been
1800resilvered.
1801This is enabled by default and strongly recommended.
1802.
1803.It Sy zfs_rebuild_vdev_limit Ns = Ns Sy 67108864 Ns B Po 64 MiB Pc Pq u64
1804Maximum amount of I/O that can be concurrently issued for a sequential
1805resilver per leaf device, given in bytes.
1806.
1807.It Sy zfs_reconstruct_indirect_combinations_max Ns = Ns Sy 4096 Pq int
1808If an indirect split block contains more than this many possible unique
1809combinations when being reconstructed, consider it too computationally
1810expensive to check them all.
1811Instead, try at most this many randomly selected
1812combinations each time the block is accessed.
1813This allows all segment copies to participate fairly
1814in the reconstruction when all combinations
1815cannot be checked and prevents repeated use of one bad copy.
1816.
1817.It Sy zfs_recover Ns = Ns Sy 0 Ns | Ns 1 Pq int
1818Set to attempt to recover from fatal errors.
1819This should only be used as a last resort,
1820as it typically results in leaked space, or worse.
1821.
1822.It Sy zfs_removal_ignore_errors Ns = Ns Sy 0 Ns | Ns 1 Pq int
1823Ignore hard I/O errors during device removal.
1824When set, if a device encounters a hard I/O error during the removal process
1825the removal will not be cancelled.
1826This can result in a normally recoverable block becoming permanently damaged
1827and is hence not recommended.
1828This should only be used as a last resort when the
1829pool cannot be returned to a healthy state prior to removing the device.
1830.
1831.It Sy zfs_removal_suspend_progress Ns = Ns Sy 0 Ns | Ns 1 Pq uint
1832This is used by the test suite so that it can ensure that certain actions
1833happen while in the middle of a removal.
1834.
1835.It Sy zfs_remove_max_segment Ns = Ns Sy 16777216 Ns B Po 16 MiB Pc Pq uint
1836The largest contiguous segment that we will attempt to allocate when removing
1837a device.
1838If there is a performance problem with attempting to allocate large blocks,
1839consider decreasing this.
1840The default value is also the maximum.
1841.
1842.It Sy zfs_resilver_disable_defer Ns = Ns Sy 0 Ns | Ns 1 Pq int
1843Ignore the
1844.Sy resilver_defer
1845feature, causing an operation that would start a resilver to
1846immediately restart the one in progress.
1847.
1848.It Sy zfs_resilver_min_time_ms Ns = Ns Sy 3000 Ns ms Po 3 s Pc Pq uint
1849Resilvers are processed by the sync thread.
1850While resilvering, it will spend at least this much time
1851working on a resilver between TXG flushes.
1852.
1853.It Sy zfs_scan_ignore_errors Ns = Ns Sy 0 Ns | Ns 1 Pq int
1854If set, remove the DTL (dirty time list) upon completion of a pool scan (scrub),
1855even if there were unrepairable errors.
1856Intended to be used during pool repair or recovery to
1857stop resilvering when the pool is next imported.
1858.
1859.It Sy zfs_scrub_after_expand Ns = Ns Sy 1 Ns | Ns 0 Pq int
1860Automatically start a pool scrub after a RAIDZ expansion completes
1861in order to verify the checksums of all blocks which have been
1862copied during the expansion.
1863This is enabled by default and strongly recommended.
1864.
1865.It Sy zfs_scrub_min_time_ms Ns = Ns Sy 1000 Ns ms Po 1 s Pc Pq uint
1866Scrubs are processed by the sync thread.
1867While scrubbing, it will spend at least this much time
1868working on a scrub between TXG flushes.
1869.
1870.It Sy zfs_scrub_error_blocks_per_txg Ns = Ns Sy 4096 Pq uint
1871Error blocks to be scrubbed in one txg.
1872.
1873.It Sy zfs_scan_checkpoint_intval Ns = Ns Sy 7200 Ns s Po 2 hour Pc Pq uint
1874To preserve progress across reboots, the sequential scan algorithm periodically
1875needs to stop metadata scanning and issue all the verification I/O to disk.
1876The frequency of this flushing is determined by this tunable.
1877.
1878.It Sy zfs_scan_fill_weight Ns = Ns Sy 3 Pq uint
1879This tunable affects how scrub and resilver I/O segments are ordered.
1880A higher number indicates that we care more about how filled in a segment is,
1881while a lower number indicates we care more about the size of the extent without
1882considering the gaps within a segment.
1883This value is only tunable upon module insertion.
1884Changing the value afterwards will have no effect on scrub or resilver
1885performance.
1886.
1887.It Sy zfs_scan_issue_strategy Ns = Ns Sy 0 Pq uint
1888Determines the order that data will be verified while scrubbing or resilvering:
1889.Bl -tag -compact -offset 4n -width "a"
1890.It Sy 1
1891Data will be verified as sequentially as possible, given the
1892amount of memory reserved for scrubbing
1893.Pq see Sy zfs_scan_mem_lim_fact .
1894This may improve scrub performance if the pool's data is very fragmented.
1895.It Sy 2
1896The largest mostly-contiguous chunk of found data will be verified first.
1897By deferring scrubbing of small segments, we may later find adjacent data
1898to coalesce and increase the segment size.
1899.It Sy 0
1900.No Use strategy Sy 1 No during normal verification
1901.No and strategy Sy 2 No while taking a checkpoint .
1902.El
1903.
1904.It Sy zfs_scan_legacy Ns = Ns Sy 0 Ns | Ns 1 Pq int
1905If unset, indicates that scrubs and resilvers will gather metadata in
1906memory before issuing sequential I/O.
1907Otherwise indicates that the legacy algorithm will be used,
1908where I/O is initiated as soon as it is discovered.
1909Unsetting will not affect scrubs or resilvers that are already in progress.
1910.
1911.It Sy zfs_scan_max_ext_gap Ns = Ns Sy 2097152 Ns B Po 2 MiB Pc Pq int
1912Sets the largest gap in bytes between scrub/resilver I/O operations
1913that will still be considered sequential for sorting purposes.
1914Changing this value will not
1915affect scrubs or resilvers that are already in progress.
1916.
1917.It Sy zfs_scan_mem_lim_fact Ns = Ns Sy 20 Ns ^-1 Pq uint
1918Maximum fraction of RAM used for I/O sorting by sequential scan algorithm.
1919This tunable determines the hard limit for I/O sorting memory usage.
1920When the hard limit is reached we stop scanning metadata and start issuing
1921data verification I/O.
1922This is done until we get below the soft limit.
1923.
1924.It Sy zfs_scan_mem_lim_soft_fact Ns = Ns Sy 20 Ns ^-1 Pq uint
1925The fraction of the hard limit used to determined the soft limit for I/O sorting
1926by the sequential scan algorithm.
1927When we cross this limit from below no action is taken.
1928When we cross this limit from above it is because we are issuing verification
1929I/O.
1930In this case (unless the metadata scan is done) we stop issuing verification I/O
1931and start scanning metadata again until we get to the hard limit.
1932.
1933.It Sy zfs_scan_report_txgs Ns = Ns Sy 0 Ns | Ns 1 Pq uint
1934When reporting resilver throughput and estimated completion time use the
1935performance observed over roughly the last
1936.Sy zfs_scan_report_txgs
1937TXGs.
1938When set to zero performance is calculated over the time between checkpoints.
1939.
1940.It Sy zfs_scan_strict_mem_lim Ns = Ns Sy 0 Ns | Ns 1 Pq int
1941Enforce tight memory limits on pool scans when a sequential scan is in progress.
1942When disabled, the memory limit may be exceeded by fast disks.
1943.
1944.It Sy zfs_scan_suspend_progress Ns = Ns Sy 0 Ns | Ns 1 Pq int
1945Freezes a scrub/resilver in progress without actually pausing it.
1946Intended for testing/debugging.
1947.
1948.It Sy zfs_scan_vdev_limit Ns = Ns Sy 16777216 Ns B Po 16 MiB Pc Pq int
1949Maximum amount of data that can be concurrently issued at once for scrubs and
1950resilvers per leaf device, given in bytes.
1951.
1952.It Sy zfs_send_corrupt_data Ns = Ns Sy 0 Ns | Ns 1 Pq int
1953Allow sending of corrupt data (ignore read/checksum errors when sending).
1954.
1955.It Sy zfs_send_unmodified_spill_blocks Ns = Ns Sy 1 Ns | Ns 0 Pq int
1956Include unmodified spill blocks in the send stream.
1957Under certain circumstances, previous versions of ZFS could incorrectly
1958remove the spill block from an existing object.
1959Including unmodified copies of the spill blocks creates a backwards-compatible
1960stream which will recreate a spill block if it was incorrectly removed.
1961.
1962.It Sy zfs_send_no_prefetch_queue_ff Ns = Ns Sy 20 Ns ^\-1 Pq uint
1963The fill fraction of the
1964.Nm zfs Cm send
1965internal queues.
1966The fill fraction controls the timing with which internal threads are woken up.
1967.
1968.It Sy zfs_send_no_prefetch_queue_length Ns = Ns Sy 1048576 Ns B Po 1 MiB Pc Pq uint
1969The maximum number of bytes allowed in
1970.Nm zfs Cm send Ns 's
1971internal queues.
1972.
1973.It Sy zfs_send_queue_ff Ns = Ns Sy 20 Ns ^\-1 Pq uint
1974The fill fraction of the
1975.Nm zfs Cm send
1976prefetch queue.
1977The fill fraction controls the timing with which internal threads are woken up.
1978.
1979.It Sy zfs_send_queue_length Ns = Ns Sy 16777216 Ns B Po 16 MiB Pc Pq uint
1980The maximum number of bytes allowed that will be prefetched by
1981.Nm zfs Cm send .
1982This value must be at least twice the maximum block size in use.
1983.
1984.It Sy zfs_recv_queue_ff Ns = Ns Sy 20 Ns ^\-1 Pq uint
1985The fill fraction of the
1986.Nm zfs Cm receive
1987queue.
1988The fill fraction controls the timing with which internal threads are woken up.
1989.
1990.It Sy zfs_recv_queue_length Ns = Ns Sy 16777216 Ns B Po 16 MiB Pc Pq uint
1991The maximum number of bytes allowed in the
1992.Nm zfs Cm receive
1993queue.
1994This value must be at least twice the maximum block size in use.
1995.
1996.It Sy zfs_recv_write_batch_size Ns = Ns Sy 1048576 Ns B Po 1 MiB Pc Pq uint
1997The maximum amount of data, in bytes, that
1998.Nm zfs Cm receive
1999will write in one DMU transaction.
2000This is the uncompressed size, even when receiving a compressed send stream.
2001This setting will not reduce the write size below a single block.
2002Capped at a maximum of
2003.Sy 32 MiB .
2004.
2005.It Sy zfs_recv_best_effort_corrective Ns = Ns Sy 0 Pq int
2006When this variable is set to non-zero a corrective receive:
2007.Bl -enum -compact -offset 4n -width "1."
2008.It
2009Does not enforce the restriction of source & destination snapshot GUIDs
2010matching.
2011.It
2012If there is an error during healing, the healing receive is not
2013terminated instead it moves on to the next record.
2014.El
2015.
2016.It Sy zfs_override_estimate_recordsize Ns = Ns Sy 0 Ns | Ns 1 Pq uint
2017Setting this variable overrides the default logic for estimating block
2018sizes when doing a
2019.Nm zfs Cm send .
2020The default heuristic is that the average block size
2021will be the current recordsize.
2022Override this value if most data in your dataset is not of that size
2023and you require accurate zfs send size estimates.
2024.
2025.It Sy zfs_sync_pass_deferred_free Ns = Ns Sy 2 Pq uint
2026Flushing of data to disk is done in passes.
2027Defer frees starting in this pass.
2028.
2029.It Sy zfs_spa_discard_memory_limit Ns = Ns Sy 16777216 Ns B Po 16 MiB Pc Pq int
2030Maximum memory used for prefetching a checkpoint's space map on each
2031vdev while discarding the checkpoint.
2032.
2033.It Sy zfs_special_class_metadata_reserve_pct Ns = Ns Sy 25 Ns % Pq uint
2034Only allow small data blocks to be allocated on the special and dedup vdev
2035types when the available free space percentage on these vdevs exceeds this
2036value.
2037This ensures reserved space is available for pool metadata as the
2038special vdevs approach capacity.
2039.
2040.It Sy zfs_sync_pass_dont_compress Ns = Ns Sy 8 Pq uint
2041Starting in this sync pass, disable compression (including of metadata).
2042With the default setting, in practice, we don't have this many sync passes,
2043so this has no effect.
2044.Pp
2045The original intent was that disabling compression would help the sync passes
2046to converge.
2047However, in practice, disabling compression increases
2048the average number of sync passes; because when we turn compression off,
2049many blocks' size will change, and thus we have to re-allocate
2050(not overwrite) them.
2051It also increases the number of
2052.Em 128 KiB
2053allocations (e.g. for indirect blocks and spacemaps)
2054because these will not be compressed.
2055The
2056.Em 128 KiB
2057allocations are especially detrimental to performance
2058on highly fragmented systems, which may have very few free segments of this
2059size,
2060and may need to load new metaslabs to satisfy these allocations.
2061.
2062.It Sy zfs_sync_pass_rewrite Ns = Ns Sy 2 Pq uint
2063Rewrite new block pointers starting in this pass.
2064.
2065.It Sy zfs_trim_extent_bytes_max Ns = Ns Sy 134217728 Ns B Po 128 MiB Pc Pq uint
2066Maximum size of TRIM command.
2067Larger ranges will be split into chunks no larger than this value before
2068issuing.
2069.
2070.It Sy zfs_trim_extent_bytes_min Ns = Ns Sy 32768 Ns B Po 32 KiB Pc Pq uint
2071Minimum size of TRIM commands.
2072TRIM ranges smaller than this will be skipped,
2073unless they're part of a larger range which was chunked.
2074This is done because it's common for these small TRIMs
2075to negatively impact overall performance.
2076.
2077.It Sy zfs_trim_metaslab_skip Ns = Ns Sy 0 Ns | Ns 1 Pq uint
2078Skip uninitialized metaslabs during the TRIM process.
2079This option is useful for pools constructed from large thinly-provisioned
2080devices
2081where TRIM operations are slow.
2082As a pool ages, an increasing fraction of the pool's metaslabs
2083will be initialized, progressively degrading the usefulness of this option.
2084This setting is stored when starting a manual TRIM and will
2085persist for the duration of the requested TRIM.
2086.
2087.It Sy zfs_trim_queue_limit Ns = Ns Sy 10 Pq uint
2088Maximum number of queued TRIMs outstanding per leaf vdev.
2089The number of concurrent TRIM commands issued to the device is controlled by
2090.Sy zfs_vdev_trim_min_active No and Sy zfs_vdev_trim_max_active .
2091.
2092.It Sy zfs_trim_txg_batch Ns = Ns Sy 32 Pq uint
2093The number of transaction groups' worth of frees which should be aggregated
2094before TRIM operations are issued to the device.
2095This setting represents a trade-off between issuing larger,
2096more efficient TRIM operations and the delay
2097before the recently trimmed space is available for use by the device.
2098.Pp
2099Increasing this value will allow frees to be aggregated for a longer time.
2100This will result is larger TRIM operations and potentially increased memory
2101usage.
2102Decreasing this value will have the opposite effect.
2103The default of
2104.Sy 32
2105was determined to be a reasonable compromise.
2106.
2107.It Sy zfs_txg_history Ns = Ns Sy 0 Pq uint
2108Historical statistics for this many latest TXGs will be available in
2109.Pa /proc/spl/kstat/zfs/ Ns Ao Ar pool Ac Ns Pa /TXGs .
2110.
2111.It Sy zfs_txg_timeout Ns = Ns Sy 5 Ns s Pq uint
2112Flush dirty data to disk at least every this many seconds (maximum TXG
2113duration).
2114.
2115.It Sy zfs_vdev_aggregation_limit Ns = Ns Sy 1048576 Ns B Po 1 MiB Pc Pq uint
2116Max vdev I/O aggregation size.
2117.
2118.It Sy zfs_vdev_aggregation_limit_non_rotating Ns = Ns Sy 131072 Ns B Po 128 KiB Pc Pq uint
2119Max vdev I/O aggregation size for non-rotating media.
2120.
2121.It Sy zfs_vdev_mirror_rotating_inc Ns = Ns Sy 0 Pq int
2122A number by which the balancing algorithm increments the load calculation for
2123the purpose of selecting the least busy mirror member when an I/O operation
2124immediately follows its predecessor on rotational vdevs
2125for the purpose of making decisions based on load.
2126.
2127.It Sy zfs_vdev_mirror_rotating_seek_inc Ns = Ns Sy 5 Pq int
2128A number by which the balancing algorithm increments the load calculation for
2129the purpose of selecting the least busy mirror member when an I/O operation
2130lacks locality as defined by
2131.Sy zfs_vdev_mirror_rotating_seek_offset .
2132Operations within this that are not immediately following the previous operation
2133are incremented by half.
2134.
2135.It Sy zfs_vdev_mirror_rotating_seek_offset Ns = Ns Sy 1048576 Ns B Po 1 MiB Pc Pq int
2136The maximum distance for the last queued I/O operation in which
2137the balancing algorithm considers an operation to have locality.
2138.No See Sx ZFS I/O SCHEDULER .
2139.
2140.It Sy zfs_vdev_mirror_non_rotating_inc Ns = Ns Sy 0 Pq int
2141A number by which the balancing algorithm increments the load calculation for
2142the purpose of selecting the least busy mirror member on non-rotational vdevs
2143when I/O operations do not immediately follow one another.
2144.
2145.It Sy zfs_vdev_mirror_non_rotating_seek_inc Ns = Ns Sy 1 Pq int
2146A number by which the balancing algorithm increments the load calculation for
2147the purpose of selecting the least busy mirror member when an I/O operation
2148lacks
2149locality as defined by the
2150.Sy zfs_vdev_mirror_rotating_seek_offset .
2151Operations within this that are not immediately following the previous operation
2152are incremented by half.
2153.
2154.It Sy zfs_vdev_read_gap_limit Ns = Ns Sy 32768 Ns B Po 32 KiB Pc Pq uint
2155Aggregate read I/O operations if the on-disk gap between them is within this
2156threshold.
2157.
2158.It Sy zfs_vdev_write_gap_limit Ns = Ns Sy 4096 Ns B Po 4 KiB Pc Pq uint
2159Aggregate write I/O operations if the on-disk gap between them is within this
2160threshold.
2161.
2162.It Sy zfs_vdev_raidz_impl Ns = Ns Sy fastest Pq string
2163Select the raidz parity implementation to use.
2164.Pp
2165Variants that don't depend on CPU-specific features
2166may be selected on module load, as they are supported on all systems.
2167The remaining options may only be set after the module is loaded,
2168as they are available only if the implementations are compiled in
2169and supported on the running system.
2170.Pp
2171Once the module is loaded,
2172.Pa /sys/module/zfs/parameters/zfs_vdev_raidz_impl
2173will show the available options,
2174with the currently selected one enclosed in square brackets.
2175.Pp
2176.TS
2177lb l l .
2178fastest	selected by built-in benchmark
2179original	original implementation
2180scalar	scalar implementation
2181sse2	SSE2 instruction set	64-bit x86
2182ssse3	SSSE3 instruction set	64-bit x86
2183avx2	AVX2 instruction set	64-bit x86
2184avx512f	AVX512F instruction set	64-bit x86
2185avx512bw	AVX512F & AVX512BW instruction sets	64-bit x86
2186aarch64_neon	NEON	Aarch64/64-bit ARMv8
2187aarch64_neonx2	NEON with more unrolling	Aarch64/64-bit ARMv8
2188powerpc_altivec	Altivec	PowerPC
2189.TE
2190.
2191.It Sy zfs_vdev_scheduler Pq charp
2192.Sy DEPRECATED .
2193Prints warning to kernel log for compatibility.
2194.
2195.It Sy zfs_zevent_len_max Ns = Ns Sy 512 Pq uint
2196Max event queue length.
2197Events in the queue can be viewed with
2198.Xr zpool-events 8 .
2199.
2200.It Sy zfs_zevent_retain_max Ns = Ns Sy 2000 Pq int
2201Maximum recent zevent records to retain for duplicate checking.
2202Setting this to
2203.Sy 0
2204disables duplicate detection.
2205.
2206.It Sy zfs_zevent_retain_expire_secs Ns = Ns Sy 900 Ns s Po 15 min Pc Pq int
2207Lifespan for a recent ereport that was retained for duplicate checking.
2208.
2209.It Sy zfs_zil_clean_taskq_maxalloc Ns = Ns Sy 1048576 Pq int
2210The maximum number of taskq entries that are allowed to be cached.
2211When this limit is exceeded transaction records (itxs)
2212will be cleaned synchronously.
2213.
2214.It Sy zfs_zil_clean_taskq_minalloc Ns = Ns Sy 1024 Pq int
2215The number of taskq entries that are pre-populated when the taskq is first
2216created and are immediately available for use.
2217.
2218.It Sy zfs_zil_clean_taskq_nthr_pct Ns = Ns Sy 100 Ns % Pq int
2219This controls the number of threads used by
2220.Sy dp_zil_clean_taskq .
2221The default value of
2222.Sy 100%
2223will create a maximum of one thread per cpu.
2224.
2225.It Sy zil_maxblocksize Ns = Ns Sy 131072 Ns B Po 128 KiB Pc Pq uint
2226This sets the maximum block size used by the ZIL.
2227On very fragmented pools, lowering this
2228.Pq typically to Sy 36 KiB
2229can improve performance.
2230.
2231.It Sy zil_maxcopied Ns = Ns Sy 7680 Ns B Po 7.5 KiB Pc Pq uint
2232This sets the maximum number of write bytes logged via WR_COPIED.
2233It tunes a tradeoff between additional memory copy and possibly worse log
2234space efficiency vs additional range lock/unlock.
2235.
2236.It Sy zil_nocacheflush Ns = Ns Sy 0 Ns | Ns 1 Pq int
2237Disable the cache flush commands that are normally sent to disk by
2238the ZIL after an LWB write has completed.
2239Setting this will cause ZIL corruption on power loss
2240if a volatile out-of-order write cache is enabled.
2241.
2242.It Sy zil_replay_disable Ns = Ns Sy 0 Ns | Ns 1 Pq int
2243Disable intent logging replay.
2244Can be disabled for recovery from corrupted ZIL.
2245.
2246.It Sy zil_slog_bulk Ns = Ns Sy 67108864 Ns B Po 64 MiB Pc Pq u64
2247Limit SLOG write size per commit executed with synchronous priority.
2248Any writes above that will be executed with lower (asynchronous) priority
2249to limit potential SLOG device abuse by single active ZIL writer.
2250.
2251.It Sy zfs_zil_saxattr Ns = Ns Sy 1 Ns | Ns 0 Pq int
2252Setting this tunable to zero disables ZIL logging of new
2253.Sy xattr Ns = Ns Sy sa
2254records if the
2255.Sy org.openzfs:zilsaxattr
2256feature is enabled on the pool.
2257This would only be necessary to work around bugs in the ZIL logging or replay
2258code for this record type.
2259The tunable has no effect if the feature is disabled.
2260.
2261.It Sy zfs_embedded_slog_min_ms Ns = Ns Sy 64 Pq uint
2262Usually, one metaslab from each normal-class vdev is dedicated for use by
2263the ZIL to log synchronous writes.
2264However, if there are fewer than
2265.Sy zfs_embedded_slog_min_ms
2266metaslabs in the vdev, this functionality is disabled.
2267This ensures that we don't set aside an unreasonable amount of space for the
2268ZIL.
2269.
2270.It Sy zstd_earlyabort_pass Ns = Ns Sy 1 Pq uint
2271Whether heuristic for detection of incompressible data with zstd levels >= 3
2272using LZ4 and zstd-1 passes is enabled.
2273.
2274.It Sy zstd_abort_size Ns = Ns Sy 131072 Pq uint
2275Minimal uncompressed size (inclusive) of a record before the early abort
2276heuristic will be attempted.
2277.
2278.It Sy zio_deadman_log_all Ns = Ns Sy 0 Ns | Ns 1 Pq int
2279If non-zero, the zio deadman will produce debugging messages
2280.Pq see Sy zfs_dbgmsg_enable
2281for all zios, rather than only for leaf zios possessing a vdev.
2282This is meant to be used by developers to gain
2283diagnostic information for hang conditions which don't involve a mutex
2284or other locking primitive: typically conditions in which a thread in
2285the zio pipeline is looping indefinitely.
2286.
2287.It Sy zio_slow_io_ms Ns = Ns Sy 30000 Ns ms Po 30 s Pc Pq int
2288When an I/O operation takes more than this much time to complete,
2289it's marked as slow.
2290Each slow operation causes a delay zevent.
2291Slow I/O counters can be seen with
2292.Nm zpool Cm status Fl s .
2293.
2294.It Sy zio_dva_throttle_enabled Ns = Ns Sy 1 Ns | Ns 0 Pq int
2295Throttle block allocations in the I/O pipeline.
2296This allows for dynamic allocation distribution when devices are imbalanced.
2297When enabled, the maximum number of pending allocations per top-level vdev
2298is limited by
2299.Sy zfs_vdev_queue_depth_pct .
2300.
2301.It Sy zfs_xattr_compat Ns = Ns 0 Ns | Ns 1 Pq int
2302Control the naming scheme used when setting new xattrs in the user namespace.
2303If
2304.Sy 0
2305.Pq the default on Linux ,
2306user namespace xattr names are prefixed with the namespace, to be backwards
2307compatible with previous versions of ZFS on Linux.
2308If
2309.Sy 1
2310.Pq the default on Fx ,
2311user namespace xattr names are not prefixed, to be backwards compatible with
2312previous versions of ZFS on illumos and
2313.Fx .
2314.Pp
2315Either naming scheme can be read on this and future versions of ZFS, regardless
2316of this tunable, but legacy ZFS on illumos or
2317.Fx
2318are unable to read user namespace xattrs written in the Linux format, and
2319legacy versions of ZFS on Linux are unable to read user namespace xattrs written
2320in the legacy ZFS format.
2321.Pp
2322An existing xattr with the alternate naming scheme is removed when overwriting
2323the xattr so as to not accumulate duplicates.
2324.
2325.It Sy zio_requeue_io_start_cut_in_line Ns = Ns Sy 0 Ns | Ns 1 Pq int
2326Prioritize requeued I/O.
2327.
2328.It Sy zio_taskq_batch_pct Ns = Ns Sy 80 Ns % Pq uint
2329Percentage of online CPUs which will run a worker thread for I/O.
2330These workers are responsible for I/O work such as compression and
2331checksum calculations.
2332Fractional number of CPUs will be rounded down.
2333.Pp
2334The default value of
2335.Sy 80%
2336was chosen to avoid using all CPUs which can result in
2337latency issues and inconsistent application performance,
2338especially when slower compression and/or checksumming is enabled.
2339.
2340.It Sy zio_taskq_batch_tpq Ns = Ns Sy 0 Pq uint
2341Number of worker threads per taskq.
2342Lower values improve I/O ordering and CPU utilization,
2343while higher reduces lock contention.
2344.Pp
2345If
2346.Sy 0 ,
2347generate a system-dependent value close to 6 threads per taskq.
2348.
2349.It Sy zio_taskq_wr_iss_ncpus Ns = Ns Sy 0 Pq uint
2350Determines the number of CPUs to run write issue taskqs.
2351.Pp
2352When 0 (the default), the value to use is computed internally
2353as the number of actual CPUs in the system divided by the
2354.Sy spa_num_allocators
2355value.
2356.
2357.It Sy zio_taskq_read Ns = Ns Sy fixed,1,8 null scale null Pq charp
2358Set the queue and thread configuration for the IO read queues.
2359This is an advanced debugging parameter.
2360Don't change this unless you understand what it does.
2361.
2362.It Sy zio_taskq_write Ns = Ns Sy sync fixed,1,5 scale fixed,1,5 Pq charp
2363Set the queue and thread configuration for the IO write queues.
2364This is an advanced debugging parameter.
2365Don't change this unless you understand what it does.
2366.
2367.It Sy zvol_inhibit_dev Ns = Ns Sy 0 Ns | Ns 1 Pq uint
2368Do not create zvol device nodes.
2369This may slightly improve startup time on
2370systems with a very large number of zvols.
2371.
2372.It Sy zvol_major Ns = Ns Sy 230 Pq uint
2373Major number for zvol block devices.
2374.
2375.It Sy zvol_max_discard_blocks Ns = Ns Sy 16384 Pq long
2376Discard (TRIM) operations done on zvols will be done in batches of this
2377many blocks, where block size is determined by the
2378.Sy volblocksize
2379property of a zvol.
2380.
2381.It Sy zvol_prefetch_bytes Ns = Ns Sy 131072 Ns B Po 128 KiB Pc Pq uint
2382When adding a zvol to the system, prefetch this many bytes
2383from the start and end of the volume.
2384Prefetching these regions of the volume is desirable,
2385because they are likely to be accessed immediately by
2386.Xr blkid 8
2387or the kernel partitioner.
2388.
2389.It Sy zvol_request_sync Ns = Ns Sy 0 Ns | Ns 1 Pq uint
2390When processing I/O requests for a zvol, submit them synchronously.
2391This effectively limits the queue depth to
2392.Em 1
2393for each I/O submitter.
2394When unset, requests are handled asynchronously by a thread pool.
2395The number of requests which can be handled concurrently is controlled by
2396.Sy zvol_threads .
2397.Sy zvol_request_sync
2398is ignored when running on a kernel that supports block multiqueue
2399.Pq Li blk-mq .
2400.
2401.It Sy zvol_num_taskqs Ns = Ns Sy 0 Pq uint
2402Number of zvol taskqs.
2403If
2404.Sy 0
2405(the default) then scaling is done internally to prefer 6 threads per taskq.
2406This only applies on Linux.
2407.
2408.It Sy zvol_threads Ns = Ns Sy 0 Pq uint
2409The number of system wide threads to use for processing zvol block IOs.
2410If
2411.Sy 0
2412(the default) then internally set
2413.Sy zvol_threads
2414to the number of CPUs present or 32 (whichever is greater).
2415.
2416.It Sy zvol_blk_mq_threads Ns = Ns Sy 0 Pq uint
2417The number of threads per zvol to use for queuing IO requests.
2418This parameter will only appear if your kernel supports
2419.Li blk-mq
2420and is only read and assigned to a zvol at zvol load time.
2421If
2422.Sy 0
2423(the default) then internally set
2424.Sy zvol_blk_mq_threads
2425to the number of CPUs present.
2426.
2427.It Sy zvol_use_blk_mq Ns = Ns Sy 0 Ns | Ns 1 Pq uint
2428Set to
2429.Sy 1
2430to use the
2431.Li blk-mq
2432API for zvols.
2433Set to
2434.Sy 0
2435(the default) to use the legacy zvol APIs.
2436This setting can give better or worse zvol performance depending on
2437the workload.
2438This parameter will only appear if your kernel supports
2439.Li blk-mq
2440and is only read and assigned to a zvol at zvol load time.
2441.
2442.It Sy zvol_blk_mq_blocks_per_thread Ns = Ns Sy 8 Pq uint
2443If
2444.Sy zvol_use_blk_mq
2445is enabled, then process this number of
2446.Sy volblocksize Ns -sized blocks per zvol thread.
2447This tunable can be use to favor better performance for zvol reads (lower
2448values) or writes (higher values).
2449If set to
2450.Sy 0 ,
2451then the zvol layer will process the maximum number of blocks
2452per thread that it can.
2453This parameter will only appear if your kernel supports
2454.Li blk-mq
2455and is only applied at each zvol's load time.
2456.
2457.It Sy zvol_blk_mq_queue_depth Ns = Ns Sy 0 Pq uint
2458The queue_depth value for the zvol
2459.Li blk-mq
2460interface.
2461This parameter will only appear if your kernel supports
2462.Li blk-mq
2463and is only applied at each zvol's load time.
2464If
2465.Sy 0
2466(the default) then use the kernel's default queue depth.
2467Values are clamped to the kernel's
2468.Dv BLKDEV_MIN_RQ
2469and
2470.Dv BLKDEV_MAX_RQ Ns / Ns Dv BLKDEV_DEFAULT_RQ
2471limits.
2472.
2473.It Sy zvol_volmode Ns = Ns Sy 1 Pq uint
2474Defines zvol block devices behaviour when
2475.Sy volmode Ns = Ns Sy default :
2476.Bl -tag -compact -offset 4n -width "a"
2477.It Sy 1
2478.No equivalent to Sy full
2479.It Sy 2
2480.No equivalent to Sy dev
2481.It Sy 3
2482.No equivalent to Sy none
2483.El
2484.
2485.It Sy zvol_enforce_quotas Ns = Ns Sy 0 Ns | Ns 1 Pq uint
2486Enable strict ZVOL quota enforcement.
2487The strict quota enforcement may have a performance impact.
2488.El
2489.
2490.Sh ZFS I/O SCHEDULER
2491ZFS issues I/O operations to leaf vdevs to satisfy and complete I/O operations.
2492The scheduler determines when and in what order those operations are issued.
2493The scheduler divides operations into five I/O classes,
2494prioritized in the following order: sync read, sync write, async read,
2495async write, and scrub/resilver.
2496Each queue defines the minimum and maximum number of concurrent operations
2497that may be issued to the device.
2498In addition, the device has an aggregate maximum,
2499.Sy zfs_vdev_max_active .
2500Note that the sum of the per-queue minima must not exceed the aggregate maximum.
2501If the sum of the per-queue maxima exceeds the aggregate maximum,
2502then the number of active operations may reach
2503.Sy zfs_vdev_max_active ,
2504in which case no further operations will be issued,
2505regardless of whether all per-queue minima have been met.
2506.Pp
2507For many physical devices, throughput increases with the number of
2508concurrent operations, but latency typically suffers.
2509Furthermore, physical devices typically have a limit
2510at which more concurrent operations have no
2511effect on throughput or can actually cause it to decrease.
2512.Pp
2513The scheduler selects the next operation to issue by first looking for an
2514I/O class whose minimum has not been satisfied.
2515Once all are satisfied and the aggregate maximum has not been hit,
2516the scheduler looks for classes whose maximum has not been satisfied.
2517Iteration through the I/O classes is done in the order specified above.
2518No further operations are issued
2519if the aggregate maximum number of concurrent operations has been hit,
2520or if there are no operations queued for an I/O class that has not hit its
2521maximum.
2522Every time an I/O operation is queued or an operation completes,
2523the scheduler looks for new operations to issue.
2524.Pp
2525In general, smaller
2526.Sy max_active Ns s
2527will lead to lower latency of synchronous operations.
2528Larger
2529.Sy max_active Ns s
2530may lead to higher overall throughput, depending on underlying storage.
2531.Pp
2532The ratio of the queues'
2533.Sy max_active Ns s
2534determines the balance of performance between reads, writes, and scrubs.
2535For example, increasing
2536.Sy zfs_vdev_scrub_max_active
2537will cause the scrub or resilver to complete more quickly,
2538but reads and writes to have higher latency and lower throughput.
2539.Pp
2540All I/O classes have a fixed maximum number of outstanding operations,
2541except for the async write class.
2542Asynchronous writes represent the data that is committed to stable storage
2543during the syncing stage for transaction groups.
2544Transaction groups enter the syncing state periodically,
2545so the number of queued async writes will quickly burst up
2546and then bleed down to zero.
2547Rather than servicing them as quickly as possible,
2548the I/O scheduler changes the maximum number of active async write operations
2549according to the amount of dirty data in the pool.
2550Since both throughput and latency typically increase with the number of
2551concurrent operations issued to physical devices, reducing the
2552burstiness in the number of simultaneous operations also stabilizes the
2553response time of operations from other queues, in particular synchronous ones.
2554In broad strokes, the I/O scheduler will issue more concurrent operations
2555from the async write queue as there is more dirty data in the pool.
2556.
2557.Ss Async Writes
2558The number of concurrent operations issued for the async write I/O class
2559follows a piece-wise linear function defined by a few adjustable points:
2560.Bd -literal
2561       |              o---------| <-- \fBzfs_vdev_async_write_max_active\fP
2562  ^    |             /^         |
2563  |    |            / |         |
2564active |           /  |         |
2565 I/O   |          /   |         |
2566count  |         /    |         |
2567       |        /     |         |
2568       |-------o      |         | <-- \fBzfs_vdev_async_write_min_active\fP
2569      0|_______^______|_________|
2570       0%      |      |       100% of \fBzfs_dirty_data_max\fP
2571               |      |
2572               |      `-- \fBzfs_vdev_async_write_active_max_dirty_percent\fP
2573               `--------- \fBzfs_vdev_async_write_active_min_dirty_percent\fP
2574.Ed
2575.Pp
2576Until the amount of dirty data exceeds a minimum percentage of the dirty
2577data allowed in the pool, the I/O scheduler will limit the number of
2578concurrent operations to the minimum.
2579As that threshold is crossed, the number of concurrent operations issued
2580increases linearly to the maximum at the specified maximum percentage
2581of the dirty data allowed in the pool.
2582.Pp
2583Ideally, the amount of dirty data on a busy pool will stay in the sloped
2584part of the function between
2585.Sy zfs_vdev_async_write_active_min_dirty_percent
2586and
2587.Sy zfs_vdev_async_write_active_max_dirty_percent .
2588If it exceeds the maximum percentage,
2589this indicates that the rate of incoming data is
2590greater than the rate that the backend storage can handle.
2591In this case, we must further throttle incoming writes,
2592as described in the next section.
2593.
2594.Sh ZFS TRANSACTION DELAY
2595We delay transactions when we've determined that the backend storage
2596isn't able to accommodate the rate of incoming writes.
2597.Pp
2598If there is already a transaction waiting, we delay relative to when
2599that transaction will finish waiting.
2600This way the calculated delay time
2601is independent of the number of threads concurrently executing transactions.
2602.Pp
2603If we are the only waiter, wait relative to when the transaction started,
2604rather than the current time.
2605This credits the transaction for "time already served",
2606e.g. reading indirect blocks.
2607.Pp
2608The minimum time for a transaction to take is calculated as
2609.D1 min_time = min( Ns Sy zfs_delay_scale No \(mu Po Sy dirty No \- Sy min Pc / Po Sy max No \- Sy dirty Pc , 100ms)
2610.Pp
2611The delay has two degrees of freedom that can be adjusted via tunables.
2612The percentage of dirty data at which we start to delay is defined by
2613.Sy zfs_delay_min_dirty_percent .
2614This should typically be at or above
2615.Sy zfs_vdev_async_write_active_max_dirty_percent ,
2616so that we only start to delay after writing at full speed
2617has failed to keep up with the incoming write rate.
2618The scale of the curve is defined by
2619.Sy zfs_delay_scale .
2620Roughly speaking, this variable determines the amount of delay at the midpoint
2621of the curve.
2622.Bd -literal
2623delay
2624 10ms +-------------------------------------------------------------*+
2625      |                                                             *|
2626  9ms +                                                             *+
2627      |                                                             *|
2628  8ms +                                                             *+
2629      |                                                            * |
2630  7ms +                                                            * +
2631      |                                                            * |
2632  6ms +                                                            * +
2633      |                                                            * |
2634  5ms +                                                           *  +
2635      |                                                           *  |
2636  4ms +                                                           *  +
2637      |                                                           *  |
2638  3ms +                                                          *   +
2639      |                                                          *   |
2640  2ms +                                              (midpoint) *    +
2641      |                                                  |    **     |
2642  1ms +                                                  v ***       +
2643      |             \fBzfs_delay_scale\fP ---------->     ********         |
2644    0 +-------------------------------------*********----------------+
2645      0%                    <- \fBzfs_dirty_data_max\fP ->               100%
2646.Ed
2647.Pp
2648Note, that since the delay is added to the outstanding time remaining on the
2649most recent transaction it's effectively the inverse of IOPS.
2650Here, the midpoint of
2651.Em 500 us
2652translates to
2653.Em 2000 IOPS .
2654The shape of the curve
2655was chosen such that small changes in the amount of accumulated dirty data
2656in the first three quarters of the curve yield relatively small differences
2657in the amount of delay.
2658.Pp
2659The effects can be easier to understand when the amount of delay is
2660represented on a logarithmic scale:
2661.Bd -literal
2662delay
2663100ms +-------------------------------------------------------------++
2664      +                                                              +
2665      |                                                              |
2666      +                                                             *+
2667 10ms +                                                             *+
2668      +                                                           ** +
2669      |                                              (midpoint)  **  |
2670      +                                                  |     **    +
2671  1ms +                                                  v ****      +
2672      +             \fBzfs_delay_scale\fP ---------->        *****         +
2673      |                                             ****             |
2674      +                                          ****                +
2675100us +                                        **                    +
2676      +                                       *                      +
2677      |                                      *                       |
2678      +                                     *                        +
2679 10us +                                     *                        +
2680      +                                                              +
2681      |                                                              |
2682      +                                                              +
2683      +--------------------------------------------------------------+
2684      0%                    <- \fBzfs_dirty_data_max\fP ->               100%
2685.Ed
2686.Pp
2687Note here that only as the amount of dirty data approaches its limit does
2688the delay start to increase rapidly.
2689The goal of a properly tuned system should be to keep the amount of dirty data
2690out of that range by first ensuring that the appropriate limits are set
2691for the I/O scheduler to reach optimal throughput on the back-end storage,
2692and then by changing the value of
2693.Sy zfs_delay_scale
2694to increase the steepness of the curve.
2695