Skip to content

Commit d899eaf

Browse files
committed
arc: Do not allocate evict taskq if operating on a single evict thread
1 parent f173fb2 commit d899eaf

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

module/zfs/arc.c

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4093,7 +4093,7 @@ arc_evict_state(arc_state_t *state, arc_buf_contents_t type, uint64_t spa,
40934093
arc_buf_hdr_t **markers;
40944094
unsigned num_sublists = multilist_get_num_sublists(ml);
40954095
evict_arg_t *evarg;
4096-
boolean_t usetskq = zfs_arc_evict_threads_live > 1;
4096+
boolean_t useevicttaskq = zfs_arc_evict_threads_live > 1;
40974097

40984098
if (bytes == 0)
40994099
return (total_evicted);
@@ -4119,14 +4119,14 @@ arc_evict_state(arc_state_t *state, arc_buf_contents_t type, uint64_t spa,
41194119
multilist_sublist_unlock(mls);
41204120
}
41214121

4122-
if (usetskq) {
4122+
if (useevicttaskq) {
41234123
evarg = kmem_alloc(sizeof (*evarg) * num_sublists, KM_NOSLEEP);
41244124
/*
41254125
* Fall back to the regular single evict if it is not possible
41264126
* to allocate memory for the task queue entries.
41274127
*/
41284128
if (evarg == NULL)
4129-
usetskq = B_FALSE;
4129+
useevicttaskq = B_FALSE;
41304130
}
41314131

41324132
/*
@@ -4208,7 +4208,7 @@ arc_evict_state(arc_state_t *state, arc_buf_contents_t type, uint64_t spa,
42084208
if (sublist_idx >= num_sublists)
42094209
sublist_idx = 0;
42104210

4211-
if (usetskq) {
4211+
if (useevicttaskq) {
42124212
uint64_t evict = i < k ? bytes_pertask :
42134213
bytes_pertask_low;
42144214

@@ -4238,7 +4238,7 @@ arc_evict_state(arc_state_t *state, arc_buf_contents_t type, uint64_t spa,
42384238
total_evicted += bytes_evicted;
42394239
}
42404240

4241-
if (usetskq) {
4241+
if (useevicttaskq) {
42424242
taskq_wait(arc_evict_taskq);
42434243
total_evicted += scan_evicted;
42444244
}
@@ -4267,7 +4267,7 @@ arc_evict_state(arc_state_t *state, arc_buf_contents_t type, uint64_t spa,
42674267
}
42684268
}
42694269

4270-
if (usetskq)
4270+
if (useevicttaskq)
42714271
kmem_free(evarg, sizeof (*evarg) * num_sublists);
42724272

42734273
for (int i = 0; i < num_sublists; i++) {
@@ -7818,6 +7818,7 @@ arc_set_limits(uint64_t allmem)
78187818
void
78197819
arc_init(void)
78207820
{
7821+
boolean_t useevicttaskq;
78217822
uint64_t percent, allmem = arc_all_memory();
78227823
mutex_init(&arc_evict_lock, NULL, MUTEX_DEFAULT, NULL);
78237824
list_create(&arc_evict_waiters, sizeof (arc_evict_waiter_t),
@@ -7890,15 +7891,18 @@ arc_init(void)
78907891
MIN((highbit64(max_ncpus) - 1) + max_ncpus / 64, 16);
78917892
else
78927893
zfs_arc_evict_threads_live = zfs_arc_evict_threads;
7894+
useevicttaskq = zfs_arc_evict_threads_live > 1;
78937895

78947896
list_create(&arc_prune_list, sizeof (arc_prune_t),
78957897
offsetof(arc_prune_t, p_node));
78967898
mutex_init(&arc_prune_mtx, NULL, MUTEX_DEFAULT, NULL);
78977899

78987900
arc_prune_taskq = taskq_create("arc_prune", zfs_arc_prune_task_threads,
78997901
defclsyspri, 100, INT_MAX, TASKQ_PREPOPULATE | TASKQ_DYNAMIC);
7900-
arc_evict_taskq = taskq_create("arc_evict", zfs_arc_evict_threads_live,
7901-
defclsyspri, 0, INT_MAX, TASKQ_PREPOPULATE);
7902+
if (useevicttaskq)
7903+
arc_evict_taskq = taskq_create("arc_evict",
7904+
zfs_arc_evict_threads_live, defclsyspri, 0, INT_MAX,
7905+
TASKQ_PREPOPULATE);
79027906

79037907
arc_ksp = kstat_create("zfs", 0, "arcstats", "misc", KSTAT_TYPE_NAMED,
79047908
sizeof (arc_stats) / sizeof (kstat_named_t), KSTAT_FLAG_VIRTUAL);
@@ -7959,6 +7963,8 @@ arc_init(void)
79597963
void
79607964
arc_fini(void)
79617965
{
7966+
boolean_t useevicttaskq = zfs_arc_evict_threads_live > 1;
7967+
79627968
arc_prune_t *p;
79637969

79647970
#ifdef _KERNEL
@@ -7973,8 +7979,10 @@ arc_fini(void)
79737979
arc_ksp = NULL;
79747980
}
79757981

7976-
taskq_wait(arc_evict_taskq);
7977-
taskq_destroy(arc_evict_taskq);
7982+
if (useevicttaskq) {
7983+
taskq_wait(arc_evict_taskq);
7984+
taskq_destroy(arc_evict_taskq);
7985+
}
79787986

79797987
taskq_wait(arc_prune_taskq);
79807988
taskq_destroy(arc_prune_taskq);

0 commit comments

Comments
 (0)