diff --git a/module/zfs/arc.c b/module/zfs/arc.c index 6c9164f76bcb..2fa506f1c136 100644 --- a/module/zfs/arc.c +++ b/module/zfs/arc.c @@ -6900,6 +6900,12 @@ arc_state_multilist_index_func(multilist_t *ml, void *obj) multilist_get_num_sublists(ml)); } +#define WARN_IF_TUN_IGNORED(tun, val) do { \ + if ((tun) && ((tun) != (val))) \ + dprintf("WARNING: ignoring tunable %s (using %llu instead)\n",\ + #tun, val); \ +} while (0) + /* * Called during module initialization and periodically thereafter to * apply reasonable changes to the exposed performance tunings. Can also be @@ -6913,6 +6919,15 @@ arc_tuning_update(void) uint64_t allmem = arc_all_memory(); unsigned long limit; + /* Valid range: 32M - */ + if ((zfs_arc_min) && (zfs_arc_min != arc_c_min) && + (zfs_arc_min >= 2ULL << SPA_MAXBLOCKSHIFT) && + (zfs_arc_min <= arc_c_max)) { + arc_c_min = zfs_arc_min; + arc_c = MAX(arc_c, arc_c_min); + } + WARN_IF_TUN_IGNORED(zfs_arc_min, arc_c_min); + /* Valid range: 64M - */ if ((zfs_arc_max) && (zfs_arc_max != arc_c_max) && (zfs_arc_max >= 64 << 20) && (zfs_arc_max < allmem) && @@ -6925,14 +6940,7 @@ arc_tuning_update(void) if (arc_dnode_size_limit > arc_meta_limit) arc_dnode_size_limit = arc_meta_limit; } - - /* Valid range: 32M - */ - if ((zfs_arc_min) && (zfs_arc_min != arc_c_min) && - (zfs_arc_min >= 2ULL << SPA_MAXBLOCKSHIFT) && - (zfs_arc_min <= arc_c_max)) { - arc_c_min = zfs_arc_min; - arc_c = MAX(arc_c, arc_c_min); - } + WARN_IF_TUN_IGNORED(zfs_arc_max, arc_c_max); /* Valid range: 16M - */ if ((zfs_arc_meta_min) && (zfs_arc_meta_min != arc_meta_min) && @@ -6944,6 +6952,7 @@ arc_tuning_update(void) if (arc_dnode_size_limit < arc_meta_min) arc_dnode_size_limit = arc_meta_min; } + WARN_IF_TUN_IGNORED(zfs_arc_meta_min, arc_meta_min); /* Valid range: - */ limit = zfs_arc_meta_limit ? zfs_arc_meta_limit : @@ -6952,6 +6961,7 @@ arc_tuning_update(void) (limit >= arc_meta_min) && (limit <= arc_c_max)) arc_meta_limit = limit; + WARN_IF_TUN_IGNORED(zfs_arc_meta_limit, arc_meta_limit); /* Valid range: - */ limit = zfs_arc_dnode_limit ? zfs_arc_dnode_limit : @@ -6960,6 +6970,7 @@ arc_tuning_update(void) (limit >= arc_meta_min) && (limit <= arc_meta_limit)) arc_dnode_size_limit = limit; + WARN_IF_TUN_IGNORED(zfs_arc_dnode_limit, arc_dnode_size_limit); /* Valid range: 1 - N */ if (zfs_arc_grow_retry) @@ -6989,11 +7000,12 @@ arc_tuning_update(void) if ((zfs_arc_lotsfree_percent >= 0) && (zfs_arc_lotsfree_percent <= 100)) arc_lotsfree_percent = zfs_arc_lotsfree_percent; + WARN_IF_TUN_IGNORED(zfs_arc_lotsfree_percent, arc_lotsfree_percent); /* Valid range: 0 - */ if ((zfs_arc_sys_free) && (zfs_arc_sys_free != arc_sys_free)) arc_sys_free = MIN(MAX(zfs_arc_sys_free, 0), allmem); - + WARN_IF_TUN_IGNORED(zfs_arc_sys_free, arc_sys_free); } static void