aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDeHackEd <[email protected]>2020-05-20 13:07:21 -0400
committerGitHub <[email protected]>2020-05-20 10:07:21 -0700
commit57434abae6af23cf0b0b360882762dfae7fee555 (patch)
tree579045b12eee6557d4d650869ab380266cae3b5c
parentde4f06c275430937026e328f48438cc799eba987 (diff)
Use boot_ncpus in place of max_ncpus in taskq_create
Due to hotplug support or BIOS bugs sometimes max_ncpus can be an absurdly high value. I have a system with 32 cores/threads but reports max_ncpus == 440. This many threads potentially cripples the system during arc_prune floods for example. boot_ncpus is the number of working CPUs when called so use that instead. Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: DHE <[email protected]> Closes #10282
-rw-r--r--module/zfs/arc.c4
-rw-r--r--module/zfs/dsl_pool.c6
-rw-r--r--module/zfs/txg.c2
3 files changed, 6 insertions, 6 deletions
diff --git a/module/zfs/arc.c b/module/zfs/arc.c
index a6b739ec3..4f2207ae7 100644
--- a/module/zfs/arc.c
+++ b/module/zfs/arc.c
@@ -7348,8 +7348,8 @@ arc_init(void)
offsetof(arc_prune_t, p_node));
mutex_init(&arc_prune_mtx, NULL, MUTEX_DEFAULT, NULL);
- arc_prune_taskq = taskq_create("arc_prune", max_ncpus, defclsyspri,
- max_ncpus, INT_MAX, TASKQ_PREPOPULATE | TASKQ_DYNAMIC);
+ arc_prune_taskq = taskq_create("arc_prune", boot_ncpus, defclsyspri,
+ boot_ncpus, INT_MAX, TASKQ_PREPOPULATE | TASKQ_DYNAMIC);
arc_ksp = kstat_create("zfs", 0, "arcstats", "misc", KSTAT_TYPE_NAMED,
sizeof (arc_stats) / sizeof (kstat_named_t), KSTAT_FLAG_VIRTUAL);
diff --git a/module/zfs/dsl_pool.c b/module/zfs/dsl_pool.c
index fa2c7d695..4dd86a9fe 100644
--- a/module/zfs/dsl_pool.c
+++ b/module/zfs/dsl_pool.c
@@ -220,10 +220,10 @@ dsl_pool_open_impl(spa_t *spa, uint64_t txg)
mutex_init(&dp->dp_lock, NULL, MUTEX_DEFAULT, NULL);
cv_init(&dp->dp_spaceavail_cv, NULL, CV_DEFAULT, NULL);
- dp->dp_zrele_taskq = taskq_create("z_zrele", max_ncpus, defclsyspri,
- max_ncpus * 8, INT_MAX, TASKQ_PREPOPULATE | TASKQ_DYNAMIC);
+ dp->dp_zrele_taskq = taskq_create("z_zrele", boot_ncpus, defclsyspri,
+ boot_ncpus * 8, INT_MAX, TASKQ_PREPOPULATE | TASKQ_DYNAMIC);
dp->dp_unlinked_drain_taskq = taskq_create("z_unlinked_drain",
- max_ncpus, defclsyspri, max_ncpus, INT_MAX,
+ boot_ncpus, defclsyspri, boot_ncpus, INT_MAX,
TASKQ_PREPOPULATE | TASKQ_DYNAMIC);
return (dp);
diff --git a/module/zfs/txg.c b/module/zfs/txg.c
index 2284234fe..a5f2b0417 100644
--- a/module/zfs/txg.c
+++ b/module/zfs/txg.c
@@ -453,7 +453,7 @@ txg_dispatch_callbacks(dsl_pool_t *dp, uint64_t txg)
* Commit callback taskq hasn't been created yet.
*/
tx->tx_commit_cb_taskq = taskq_create("tx_commit_cb",
- max_ncpus, defclsyspri, max_ncpus, max_ncpus * 2,
+ boot_ncpus, defclsyspri, boot_ncpus, boot_ncpus * 2,
TASKQ_PREPOPULATE | TASKQ_DYNAMIC);
}