mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-26 03:09:34 +03:00
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.
This commit is contained in:
parent
aaad2f7226
commit
915404bd50
@ -44,6 +44,7 @@ extern "C" {
|
||||
#define TASKQ_PREPOPULATE 0x00000001
|
||||
#define TASKQ_CPR_SAFE 0x00000002
|
||||
#define TASKQ_DYNAMIC 0x00000004
|
||||
#define TASKQ_THREADS_CPU_PCT 0x00000008
|
||||
|
||||
typedef unsigned long taskqid_t;
|
||||
typedef void (task_func_t)(void *);
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user