* Increase priority of a workqueue thread ?
@ 2005-10-20 13:12 Block Device
2005-10-20 13:36 ` linux-os (Dick Johnson)
2005-10-20 15:05 ` Con Kolivas
0 siblings, 2 replies; 4+ messages in thread
From: Block Device @ 2005-10-20 13:12 UTC (permalink / raw)
To: Linux Kernel Mailing List
Hi,
I am using a custom workqueue thread in my module. How do I increase the
priority of the workqueue threads ?
I've seen that each workqueue contains an array of per-cpu structures
which has a
task_struct of the thread on a particular cpu. Since these threads are
created from keventd
I think they'll have the same priority as keventd. Also the per-cpu
structure is something which is private to the workqueue
implementation. Directly using it (from my driver) to increase the
priority of the workqueue doesnt seem correct to me. Is there any
interface or standard way of changing the priority of a workqueue.
Thanks
BD
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Increase priority of a workqueue thread ?
2005-10-20 13:12 Increase priority of a workqueue thread ? Block Device
@ 2005-10-20 13:36 ` linux-os (Dick Johnson)
2005-10-20 15:05 ` Con Kolivas
1 sibling, 0 replies; 4+ messages in thread
From: linux-os (Dick Johnson) @ 2005-10-20 13:36 UTC (permalink / raw)
To: Block Device; +Cc: Linux Kernel Mailing List
On Thu, 20 Oct 2005, Block Device wrote:
> Hi,
> I am using a custom workqueue thread in my module. How do I increase the
> priority of the workqueue threads ?
> I've seen that each workqueue contains an array of per-cpu structures
> which has a
> task_struct of the thread on a particular cpu. Since these threads are
> created from keventd
> I think they'll have the same priority as keventd. Also the per-cpu
> structure is something which is private to the workqueue
> implementation. Directly using it (from my driver) to increase the
> priority of the workqueue doesnt seem correct to me. Is there any
> interface or standard way of changing the priority of a workqueue.
>
> Thanks
> BD
I don't think you want to increase the priority of keventd.
You need to create a seperate kernel thread for your module's
work. That thread's priority can be set with set_user_nice()...
set_user_nice(current, -19);
Older kernels required:
task_lock(current);
current->nice = -19;
task_unlock(current);
The kernel thread can set this up when it is first started.
Cheers,
Dick Johnson
Penguin : Linux version 2.6.13.4 on an i686 machine (5589.55 BogoMips).
Warning : 98.36% of all statistics are fiction.
.
****************************************************************
The information transmitted in this message is confidential and may be privileged. Any review, retransmission, dissemination, or other use of this information by persons or entities other than the intended recipient is prohibited. If you are not the intended recipient, please notify Analogic Corporation immediately - by replying to this message or by sending an email to DeliveryErrors@analogic.com - and destroy all copies of this information, including any attachments, without reading or disclosing them.
Thank you.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Increase priority of a workqueue thread ?
2005-10-20 13:12 Increase priority of a workqueue thread ? Block Device
2005-10-20 13:36 ` linux-os (Dick Johnson)
@ 2005-10-20 15:05 ` Con Kolivas
2005-10-21 6:55 ` Block Device
1 sibling, 1 reply; 4+ messages in thread
From: Con Kolivas @ 2005-10-20 15:05 UTC (permalink / raw)
To: Block Device; +Cc: Linux Kernel Mailing List
[-- Attachment #1: Type: text/plain, Size: 866 bytes --]
On Thu, 20 Oct 2005 23:12, Block Device wrote:
> Hi,
> I am using a custom workqueue thread in my module. How do I increase
> the priority of the workqueue threads ?
> I've seen that each workqueue contains an array of per-cpu structures
> which has a
> task_struct of the thread on a particular cpu. Since these threads are
> created from keventd
> I think they'll have the same priority as keventd. Also the per-cpu
> structure is something which is private to the workqueue
> implementation. Directly using it (from my driver) to increase the
> priority of the workqueue doesnt seem correct to me. Is there any
> interface or standard way of changing the priority of a workqueue.
By strange coincidence I was working on a patch to do this. Here's what I have
so far - I know the code is safe but I don't know if it does as advertised
yet ;)
Cheers,
Con
[-- Attachment #2: set_workqueue_nice.patch --]
[-- Type: text/x-diff, Size: 1643 bytes --]
Index: linux-2.6.14-rc4-ck1/include/linux/workqueue.h
===================================================================
--- linux-2.6.14-rc4-ck1.orig/include/linux/workqueue.h 2005-06-18 23:59:46.000000000 +1000
+++ linux-2.6.14-rc4-ck1/include/linux/workqueue.h 2005-10-11 16:03:09.000000000 +1000
@@ -56,6 +56,7 @@ extern struct workqueue_struct *__create
#define create_singlethread_workqueue(name) __create_workqueue((name), 1)
extern void destroy_workqueue(struct workqueue_struct *wq);
+extern void set_workqueue_nice(struct workqueue_struct *wq, long nice);
extern int FASTCALL(queue_work(struct workqueue_struct *wq, struct work_struct *work));
extern int FASTCALL(queue_delayed_work(struct workqueue_struct *wq, struct work_struct *work, unsigned long delay));
Index: linux-2.6.14-rc4-ck1/kernel/workqueue.c
===================================================================
--- linux-2.6.14-rc4-ck1.orig/kernel/workqueue.c 2005-10-11 15:56:13.000000000 +1000
+++ linux-2.6.14-rc4-ck1/kernel/workqueue.c 2005-10-11 16:03:09.000000000 +1000
@@ -383,6 +383,26 @@ void destroy_workqueue(struct workqueue_
kfree(wq);
}
+void set_workqueue_nice(struct workqueue_struct *wq, long nice)
+{
+ struct task_struct *p;
+ int cpu;
+
+ lock_cpu_hotplug();
+ if (is_single_threaded(wq)) {
+ p = wq->cpu_wq->thread;
+ set_user_nice(p, nice);
+ } else {
+ for_each_online_cpu(cpu) {
+ struct cpu_workqueue_struct *cwq = wq->cpu_wq + cpu;
+
+ p = cwq->thread;
+ set_user_nice(p, nice);
+ }
+ }
+ unlock_cpu_hotplug();
+}
+
static struct workqueue_struct *keventd_wq;
int fastcall schedule_work(struct work_struct *work)
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Increase priority of a workqueue thread ?
2005-10-20 15:05 ` Con Kolivas
@ 2005-10-21 6:55 ` Block Device
0 siblings, 0 replies; 4+ messages in thread
From: Block Device @ 2005-10-21 6:55 UTC (permalink / raw)
To: Con Kolivas; +Cc: Linux Kernel Mailing List
Con, Dick,
Thanks a lot :) ... I'll try it out and see whether it works for me :)
Regards
BD.
On 10/20/05, Con Kolivas <kernel@kolivas.org> wrote:
> On Thu, 20 Oct 2005 23:12, Block Device wrote:
> > Hi,
> > I am using a custom workqueue thread in my module. How do I increase
> > the priority of the workqueue threads ?
> > I've seen that each workqueue contains an array of per-cpu structures
> > which has a
> > task_struct of the thread on a particular cpu. Since these threads are
> > created from keventd
> > I think they'll have the same priority as keventd. Also the per-cpu
> > structure is something which is private to the workqueue
> > implementation. Directly using it (from my driver) to increase the
> > priority of the workqueue doesnt seem correct to me. Is there any
> > interface or standard way of changing the priority of a workqueue.
>
> By strange coincidence I was working on a patch to do this. Here's what I have
> so far - I know the code is safe but I don't know if it does as advertised
> yet ;)
>
> Cheers,
> Con
>
>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2005-10-21 6:55 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-10-20 13:12 Increase priority of a workqueue thread ? Block Device
2005-10-20 13:36 ` linux-os (Dick Johnson)
2005-10-20 15:05 ` Con Kolivas
2005-10-21 6:55 ` Block Device
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox