Skip to content

Commit 3218719

Browse files
0mpAlexander Stetsenko
authored andcommitted
arc: Do not allocate evict taskq if operating on a single evict thread
1 parent b43c67b commit 3218719

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
@@ -4089,7 +4089,7 @@ arc_evict_state(arc_state_t *state, arc_buf_contents_t type, uint64_t spa,
40894089
arc_buf_hdr_t **markers;
40904090
unsigned num_sublists = multilist_get_num_sublists(ml);
40914091
evict_arg_t *evarg;
4092-
boolean_t usetskq = zfs_arc_evict_threads_live > 1;
4092+
boolean_t useevicttaskq = zfs_arc_evict_threads_live > 1;
40934093

40944094
if (bytes == 0)
40954095
return (total_evicted);
@@ -4115,14 +4115,14 @@ arc_evict_state(arc_state_t *state, arc_buf_contents_t type, uint64_t spa,
41154115
multilist_sublist_unlock(mls);
41164116
}
41174117

4118-
if (usetskq) {
4118+
if (useevicttaskq) {
41194119
evarg = kmem_alloc(sizeof (*evarg) * num_sublists, KM_NOSLEEP);
41204120
/*
41214121
* Fall back to the regular single evict if it is not possible
41224122
* to allocate memory for the task queue entries.
41234123
*/
41244124
if (evarg == NULL)
4125-
usetskq = B_FALSE;
4125+
useevicttaskq = B_FALSE;
41264126
}
41274127

41284128
/*
@@ -4204,7 +4204,7 @@ arc_evict_state(arc_state_t *state, arc_buf_contents_t type, uint64_t spa,
42044204
if (sublist_idx >= num_sublists)
42054205
sublist_idx = 0;
42064206

4207-
if (usetskq) {
4207+
if (useevicttaskq) {
42084208
uint64_t evict = i < k ? bytes_pertask :
42094209
bytes_pertask_low;
42104210

@@ -4234,7 +4234,7 @@ arc_evict_state(arc_state_t *state, arc_buf_contents_t type, uint64_t spa,
42344234
total_evicted += bytes_evicted;
42354235
}
42364236

4237-
if (usetskq) {
4237+
if (useevicttaskq) {
42384238
taskq_wait(arc_evict_taskq);
42394239
total_evicted += scan_evicted;
42404240
}
@@ -4263,7 +4263,7 @@ arc_evict_state(arc_state_t *state, arc_buf_contents_t type, uint64_t spa,
42634263
}
42644264
}
42654265

4266-
if (usetskq)
4266+
if (useevicttaskq)
42674267
kmem_free(evarg, sizeof (*evarg) * num_sublists);
42684268

42694269
for (int i = 0; i < num_sublists; i++) {
@@ -7819,6 +7819,7 @@ arc_set_limits(uint64_t allmem)
78197819
void
78207820
arc_init(void)
78217821
{
7822+
boolean_t useevicttaskq;
78227823
uint64_t percent, allmem = arc_all_memory();
78237824
mutex_init(&arc_evict_lock, NULL, MUTEX_DEFAULT, NULL);
78247825
list_create(&arc_evict_waiters, sizeof (arc_evict_waiter_t),
@@ -7891,15 +7892,18 @@ arc_init(void)
78917892
MIN((highbit64(max_ncpus) - 1) + max_ncpus / 64, 16);
78927893
else
78937894
zfs_arc_evict_threads_live = zfs_arc_evict_threads;
7895+
useevicttaskq = zfs_arc_evict_threads_live > 1;
78947896

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

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

79047908
arc_ksp = kstat_create("zfs", 0, "arcstats", "misc", KSTAT_TYPE_NAMED,
79057909
sizeof (arc_stats) / sizeof (kstat_named_t), KSTAT_FLAG_VIRTUAL);
@@ -7960,6 +7964,8 @@ arc_init(void)
79607964
void
79617965
arc_fini(void)
79627966
{
7967+
boolean_t useevicttaskq = zfs_arc_evict_threads_live > 1;
7968+
79637969
arc_prune_t *p;
79647970

79657971
#ifdef _KERNEL
@@ -7974,8 +7980,10 @@ arc_fini(void)
79747980
arc_ksp = NULL;
79757981
}
79767982

7977-
taskq_wait(arc_evict_taskq);
7978-
taskq_destroy(arc_evict_taskq);
7983+
if (useevicttaskq) {
7984+
taskq_wait(arc_evict_taskq);
7985+
taskq_destroy(arc_evict_taskq);
7986+
}
79797987

79807988
taskq_wait(arc_prune_taskq);
79817989
taskq_destroy(arc_prune_taskq);

0 commit comments

Comments
 (0)