mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-24 03:08:51 +03:00
zfs_arc_num_sublists_per_state should be common to all multilists
The global tunable zfs_arc_num_sublists_per_state is used by the ARC and the dbuf cache, and other users are planned. We should change this tunable to be common to all multilists. This tuning may be overridden on a per-multilist basis. Reviewed-by: Pavel Zakharov <pavel.zakharov@delphix.com> Reviewed-by: Dan Kimmel <dan.kimmel@delphix.com> Reviewed-by: Tony Hutter <hutter2@llnl.gov> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Matthew Ahrens <mahrens@delphix.com> Closes #5764
This commit is contained in:
committed by
Brian Behlendorf
parent
3d3fe9f9bb
commit
c30e58c462
+11
-25
@@ -21,7 +21,7 @@
|
||||
/*
|
||||
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, Joyent, Inc. All rights reserved.
|
||||
* Copyright (c) 2011, 2016 by Delphix. All rights reserved.
|
||||
* Copyright (c) 2011, 2017 by Delphix. All rights reserved.
|
||||
* Copyright (c) 2014 by Saso Kiselkov. All rights reserved.
|
||||
* Copyright 2015 Nexenta Systems, Inc. All rights reserved.
|
||||
*/
|
||||
@@ -307,13 +307,6 @@ static kcondvar_t arc_reclaim_waiters_cv;
|
||||
*/
|
||||
int zfs_arc_evict_batch_limit = 10;
|
||||
|
||||
/*
|
||||
* The number of sublists used for each of the arc state lists. If this
|
||||
* is not set to a suitable value by the user, it will be configured to
|
||||
* the number of CPUs on the system in arc_init().
|
||||
*/
|
||||
int zfs_arc_num_sublists_per_state = 0;
|
||||
|
||||
/* number of seconds before growing cache again */
|
||||
static int arc_grow_retry = 5;
|
||||
|
||||
@@ -6285,43 +6278,43 @@ arc_state_init(void)
|
||||
multilist_create(&arc_mru->arcs_list[ARC_BUFC_METADATA],
|
||||
sizeof (arc_buf_hdr_t),
|
||||
offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node),
|
||||
zfs_arc_num_sublists_per_state, arc_state_multilist_index_func);
|
||||
arc_state_multilist_index_func);
|
||||
multilist_create(&arc_mru->arcs_list[ARC_BUFC_DATA],
|
||||
sizeof (arc_buf_hdr_t),
|
||||
offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node),
|
||||
zfs_arc_num_sublists_per_state, arc_state_multilist_index_func);
|
||||
arc_state_multilist_index_func);
|
||||
multilist_create(&arc_mru_ghost->arcs_list[ARC_BUFC_METADATA],
|
||||
sizeof (arc_buf_hdr_t),
|
||||
offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node),
|
||||
zfs_arc_num_sublists_per_state, arc_state_multilist_index_func);
|
||||
arc_state_multilist_index_func);
|
||||
multilist_create(&arc_mru_ghost->arcs_list[ARC_BUFC_DATA],
|
||||
sizeof (arc_buf_hdr_t),
|
||||
offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node),
|
||||
zfs_arc_num_sublists_per_state, arc_state_multilist_index_func);
|
||||
arc_state_multilist_index_func);
|
||||
multilist_create(&arc_mfu->arcs_list[ARC_BUFC_METADATA],
|
||||
sizeof (arc_buf_hdr_t),
|
||||
offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node),
|
||||
zfs_arc_num_sublists_per_state, arc_state_multilist_index_func);
|
||||
arc_state_multilist_index_func);
|
||||
multilist_create(&arc_mfu->arcs_list[ARC_BUFC_DATA],
|
||||
sizeof (arc_buf_hdr_t),
|
||||
offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node),
|
||||
zfs_arc_num_sublists_per_state, arc_state_multilist_index_func);
|
||||
arc_state_multilist_index_func);
|
||||
multilist_create(&arc_mfu_ghost->arcs_list[ARC_BUFC_METADATA],
|
||||
sizeof (arc_buf_hdr_t),
|
||||
offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node),
|
||||
zfs_arc_num_sublists_per_state, arc_state_multilist_index_func);
|
||||
arc_state_multilist_index_func);
|
||||
multilist_create(&arc_mfu_ghost->arcs_list[ARC_BUFC_DATA],
|
||||
sizeof (arc_buf_hdr_t),
|
||||
offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node),
|
||||
zfs_arc_num_sublists_per_state, arc_state_multilist_index_func);
|
||||
arc_state_multilist_index_func);
|
||||
multilist_create(&arc_l2c_only->arcs_list[ARC_BUFC_METADATA],
|
||||
sizeof (arc_buf_hdr_t),
|
||||
offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node),
|
||||
zfs_arc_num_sublists_per_state, arc_state_multilist_index_func);
|
||||
arc_state_multilist_index_func);
|
||||
multilist_create(&arc_l2c_only->arcs_list[ARC_BUFC_DATA],
|
||||
sizeof (arc_buf_hdr_t),
|
||||
offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node),
|
||||
zfs_arc_num_sublists_per_state, arc_state_multilist_index_func);
|
||||
arc_state_multilist_index_func);
|
||||
|
||||
refcount_create(&arc_anon->arcs_esize[ARC_BUFC_METADATA]);
|
||||
refcount_create(&arc_anon->arcs_esize[ARC_BUFC_DATA]);
|
||||
@@ -6452,9 +6445,6 @@ arc_init(void)
|
||||
/* Apply user specified tunings */
|
||||
arc_tuning_update();
|
||||
|
||||
if (zfs_arc_num_sublists_per_state < 1)
|
||||
zfs_arc_num_sublists_per_state = MAX(boot_ncpus, 1);
|
||||
|
||||
/* if kmem_flags are set, lets try to use less memory */
|
||||
if (kmem_debugging())
|
||||
arc_c = arc_c / 2;
|
||||
@@ -7745,10 +7735,6 @@ MODULE_PARM_DESC(zfs_compressed_arc_enabled, "Disable compressed arc buffers");
|
||||
module_param(zfs_arc_min_prefetch_lifespan, int, 0644);
|
||||
MODULE_PARM_DESC(zfs_arc_min_prefetch_lifespan, "Min life of prefetch block");
|
||||
|
||||
module_param(zfs_arc_num_sublists_per_state, int, 0644);
|
||||
MODULE_PARM_DESC(zfs_arc_num_sublists_per_state,
|
||||
"Number of sublists used in each of the ARC state lists");
|
||||
|
||||
module_param(l2arc_write_max, ulong, 0644);
|
||||
MODULE_PARM_DESC(l2arc_write_max, "Max write bytes per interval");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user