diff options
author | Brian Behlendorf <[email protected]> | 2009-07-09 10:07:52 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2009-07-09 10:07:52 -0700 |
commit | 915404bd509e5231c134042560d86e3ac86c1ab4 (patch) | |
tree | 0de8503858a15030764ccb144e7a8150def5fcd7 /module/spl | |
parent | aaad2f7226d26c8ca3575830d07aa08363f346b3 (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.c | 9 |
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); |