BTW:
static int __init iop_adma_init (void)
{
+ iop_adma_workqueue = create_workqueue("iop-adma");
+ if (!iop_adma_workqueue)
+ return -ENODEV;
+
Could you also try upping the prio of all the "iop-adma" threads?
You should see thread names such as (on SMP) "iop-adma/0", "iop-adma/1"
... "iop-adma/N" where N = # of CPUs - 1.
do a "chrt -p -f 98 <pid>" once for each of the thread's PIDs. The
chrt can be found in the package "util-linux" on Red Hat / Fedora, and in
schedutils on Debian.
It just dawned on me that workqueues don't run at a high priority by
default. So it's funny that I'm running all my current tasklets as a low
priority work queues :-)
But that can certainly be a cause of high latency. I need to update my
patches to make the workqueue thread a higher priority. All benchmarks on
this patch have been using a low priority work queue.
I also don't see any nice API to have the priority set for a workqueue
thread from within the kernel. Looks like one needs to be added,
otherwise, I need to have the wrapper dig into the workqueue structs to
find the thread that handles the workqueue.
Thanks,
-- Steve
-