Windows Registry
Registry
Open ZFS uses the Registry for default tunable values which is read in on startup.
\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\ZFSin old
\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\OpenZFS new
hostid
The Registry key hostid is generally handled by OpenZFS internally, ie, generated randomly if it is not set the first time Open ZFS is loaded.
You can change hostid if that is so desired. For example, if you share the pool between multiple Operating Systems on the same Hardware.
Arc Max
To set the ARC maximum memory usage to 2GB, create an entry;
"zfs_arc_max" REG_QWORD "0x80000000"
and reboot. If you wish to change it on a running system without rebooting, see the kstat example.
Vectorized Raidz
There are a few vectorized implementations to chose from, due to a lack of kstat porting, we can not display the method used or available. It is printed on the debug console.
To disable all assembler implementations, create a registry setting:
"zfs_sha256_impl" REG_SZ "generic" "zfs_sha512_impl" REG_SZ "generic" "icp_aes_impl" REG_SZ "generic" "icp_gcm_impl" REG_SZ "generic" "zfs_blake3_impl" REG_SZ "generic" "zfs_vdev_raidz_impl" REG_SZ "original" "zfs_fletcher_4_impl" REG_SZ "scalar"
Which would set the implementations to use the standard C versions. The default value is fastest which picks the highest available. Examples are
zfs_vdev_raidz_impl: [original] scalar sse2 ssse3 icp_gcm_impl_get: cycle fastest [generic] icp_aes_impl_get: cycle fastest [generic] x86_64 aesni zfs_fletcher_4_impl_get: fastest [scalar] superscalar superscalar4 sse2 ssse3
Available tunables
As of 2022, the tunables are now written to the Registry when you install OpenZFS, so all available tunables are visible there. This list below is now obsolete.
The ZFS tunables are many and constantly changing. The easiest way to display them all is to run the kstat program. <- Not true
Obsolete Complete list as of 2019-06-03:
active_vnodes
aggregation_limit
arc_lotsfree_percent
arc_reduce_dnlc_percent
async_read_max_active
async_read_min_active
async_write_max_active
async_write_max_dirty_pct
async_write_min_active
async_write_min_dirty_pct
create_negatives
crtime
dbuf_cache_max_bytes
force_formd_normalized
fzap_default_block_shift
hostid
ignore_negatives
ignore_positives
l2arc_feed_again
l2arc_feed_min_ms
l2arc_feed_secs
l2arc_headroom
l2arc_headroom_boost
l2arc_max_block_size
l2arc_noprefetch
l2arc_norw
l2arc_write_boost
l2arc_write_max
max_active
metaslab_aliquot
metaslab_df_alloc_threshold
metaslab_df_free_pct
read_gap_limit
reclaim_nodes
scrub_max_active
scrub_min_active
skip_unlinked_drain
snaptime
spa_asize_inflation
spa_max_replication_override
spa_mode_global
spa_version
sync_read_max_active
sync_read_min_active
sync_write_max_active
sync_write_min_active
use_system_sync
vdev_mirror_shift
vnop_debug
write_gap_limit
zfetch_array_rd_sz
zfetch_max_streams
zfetch_min_sec_reap
zfs_arc_average_blocksize
zfs_arc_grow_retry
zfs_arc_max
zfs_arc_meta_limit
zfs_arc_meta_min
zfs_arc_min
zfs_arc_p_min_shift
zfs_arc_shrink_shift
zfs_default_bs
zfs_default_ibs
zfs_delay_max_ns
zfs_delay_min_dirty_percent
zfs_delay_scale
zfs_dirty_data_max
zfs_dirty_data_sync
zfs_flags
zfs_free_bpobj_enabled
zfs_immediate_write_sz
zfs_lua_max_instrlimit
zfs_lua_max_memlimit
zfs_mdcomp_disable
zfs_no_scrub_io
zfs_no_scrub_prefetch
zfs_nocacheflush
zfs_prefetch_disable
zfs_read_chunk_size
zfs_recover
zfs_recv_queue_length
zfs_scrub_limit
zfs_send_corrupt_data
zfs_send_holes_without_brth_tm
zfs_send_queue_length
zfs_send_set_freerecords_bit
zfs_send_unmodified_spill_bloc
zfs_special_class_metadata_res
zfs_trim_extent_bytes_max
zfs_trim_extent_bytes_min
zfs_trim_metaslab_skip
zfs_trim_queue_limit
zfs_trim_txg_batch
zfs_txg_timeout
zfs_vdev_cache_bshift
zfs_vdev_cache_max
zfs_vdev_cache_size
zfs_vdev_file_size_mismatch_cn
zfs_vdev_queue_depth_pct
zfs_write_implies_delete_child
zil_replay_disable
zio_dva_throttle_enabled
zio_injection_enabled
zpl_version
zvol_immediate_write_sz
zvol_inhibit_dev