summaryrefslogtreecommitdiffstats
path: root/module/spl
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2009-07-09 10:07:52 -0700
committerBrian Behlendorf <[email protected]>2009-07-09 10:07:52 -0700
commit915404bd509e5231c134042560d86e3ac86c1ab4 (patch)
tree0de8503858a15030764ccb144e7a8150def5fcd7 /module/spl
parentaaad2f7226d26c8ca3575830d07aa08363f346b3 (diff)
Add basic support for TASKQ_THREADS_CPU_PCT taskq flag which is
used to scale the number of threads based on the number of online CPUs. As CPUs are added/removed we should rescale the thread count appropriately, but currently this is only done at create.
Diffstat (limited to 'module/spl')
-rw-r--r--module/spl/spl-taskq.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/module/spl/spl-taskq.c b/module/spl/spl-taskq.c
index 5960761f4..7575aa3b0 100644
--- a/module/spl/spl-taskq.c
+++ b/module/spl/spl-taskq.c
@@ -375,6 +375,15 @@ __taskq_create(const char *name, int nthreads, pri_t pri,
ASSERT(maxalloc <= INT_MAX);
ASSERT(!(flags & (TASKQ_CPR_SAFE | TASKQ_DYNAMIC))); /* Unsupported */
+ /* Scale the number of threads using nthreads as a percentage */
+ if (flags & TASKQ_THREADS_CPU_PCT) {
+ ASSERT(nthreads <= 100);
+ ASSERT(nthreads >= 0);
+ nthreads = MIN(nthreads, 100);
+ nthreads = MAX(nthreads, 0);
+ nthreads = MAX((num_online_cpus() * nthreads) / 100, 1);
+ }
+
tq = kmem_alloc(sizeof(*tq), KM_SLEEP);
if (tq == NULL)
RETURN(NULL);