diff options
author | DeHackEd <[email protected]> | 2020-05-20 13:07:21 -0400 |
---|---|---|
committer | GitHub <[email protected]> | 2020-05-20 10:07:21 -0700 |
commit | 57434abae6af23cf0b0b360882762dfae7fee555 (patch) | |
tree | 579045b12eee6557d4d650869ab380266cae3b5c | |
parent | de4f06c275430937026e328f48438cc799eba987 (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.c | 4 | ||||
-rw-r--r-- | module/zfs/dsl_pool.c | 6 | ||||
-rw-r--r-- | module/zfs/txg.c | 2 |
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); } |