]> git.proxmox.com Git - mirror_spl.git/commitdiff
Invert minclsyspri and maxclsyspri
authorBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 24 Jul 2015 17:32:55 +0000 (10:32 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 28 Jul 2015 20:59:03 +0000 (13:59 -0700)
On Linux the meaning of a processes priority is inverted with respect
to illumos.  High values on Linux indicate a _low_ priority while high
value on illumos indicate a _high_ priority.

In order to preserve the logical meaning of the minclsyspri and
maxclsyspri macros when they are used by the illumos wrapper functions
their values have been inverted.  This way when changes are merged
from upstream illumos we won't need to remember to invert the macro.
It could also lead to confusion.

Note this change also reverts some of the priorities changes in prior
commit 62aa81a.  The rational is as follows:

spl_kmem_cache    - High priority may result in blocked memory allocs
spl_system_taskq  - May perform I/O for file backed VDEVs
spl_dynamic_taskq - New taskq threads should be spawned promptly

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Ned Bass <bass6@llnl.gov>
Issue zfsonlinux/zfs#3607

include/sys/sysmacros.h
include/sys/taskq.h
module/spl/spl-kmem-cache.c
module/spl/spl-taskq.c

index 9f16ac70fdac6b4c459a4d5fbc33ecce2f8ac0ec..4dc7cd8585619a77d4405ab15724bb30769e3ce6 100644 (file)
@@ -93,8 +93,8 @@
  *
  * Treat shim tasks as SCHED_NORMAL tasks
  */
-#define minclsyspri                    (MAX_RT_PRIO)
-#define maxclsyspri                    (MAX_PRIO-1)
+#define minclsyspri                    (MAX_PRIO-1)
+#define maxclsyspri                    (MAX_RT_PRIO)
 #define defclsyspri                    (DEFAULT_PRIO)
 
 #ifndef NICE_TO_PRIO
index 5c29e8f0eb508efa232551742bec5d4a52962901..a43a86da651470d42ffc7858164a620e7d516146 100644 (file)
@@ -129,7 +129,7 @@ extern int taskq_member(taskq_t *, void *);
 #define taskq_create_proc(name, nthreads, pri, min, max, proc, flags) \
     taskq_create(name, nthreads, pri, min, max, flags)
 #define taskq_create_sysdc(name, nthreads, min, max, proc, dc, flags) \
-    taskq_create(name, nthreads, defclsyspri, min, max, flags)
+    taskq_create(name, nthreads, maxclsyspri, min, max, flags)
 
 int spl_taskq_init(void);
 void spl_taskq_fini(void);
index 0417f9d0b826aea34eeedf94a600321c99d2df18..a83c9f3ae8c146ac19d9289f1dec5919266f484a 100644 (file)
@@ -1718,7 +1718,7 @@ spl_kmem_cache_init(void)
        init_rwsem(&spl_kmem_cache_sem);
        INIT_LIST_HEAD(&spl_kmem_cache_list);
        spl_kmem_cache_taskq = taskq_create("spl_kmem_cache",
-           spl_kmem_cache_kmem_threads, defclsyspri,
+           spl_kmem_cache_kmem_threads, maxclsyspri,
            spl_kmem_cache_kmem_threads * 8, INT_MAX,
            TASKQ_PREPOPULATE | TASKQ_DYNAMIC);
        spl_register_shrinker(&spl_kmem_cache_shrinker);
index b4282333e7e6c1e82f53c06133d4292ce7f74f25..7a756af37aed97ea9e10d48e677e926e05436f24 100644 (file)
@@ -935,7 +935,6 @@ taskq_create(const char *name, int nthreads, pri_t pri,
        int count = 0, rc = 0, i;
 
        ASSERT(name != NULL);
-       ASSERT(pri <= maxclsyspri);
        ASSERT(minalloc >= 0);
        ASSERT(maxalloc <= INT_MAX);
        ASSERT(!(flags & (TASKQ_CPR_SAFE))); /* Unsupported */
@@ -1077,12 +1076,12 @@ int
 spl_taskq_init(void)
 {
        system_taskq = taskq_create("spl_system_taskq", MAX(boot_ncpus, 64),
-           defclsyspri, boot_ncpus, INT_MAX, TASKQ_PREPOPULATE|TASKQ_DYNAMIC);
+           maxclsyspri, boot_ncpus, INT_MAX, TASKQ_PREPOPULATE|TASKQ_DYNAMIC);
        if (system_taskq == NULL)
                return (1);
 
        dynamic_taskq = taskq_create("spl_dynamic_taskq", 1,
-           defclsyspri, boot_ncpus, INT_MAX, TASKQ_PREPOPULATE);
+           maxclsyspri, boot_ncpus, INT_MAX, TASKQ_PREPOPULATE);
        if (dynamic_taskq == NULL) {
                taskq_destroy(system_taskq);
                return (1);