2005-10-20 13:12:52

by Block Device

[permalink] [raw]
Subject: Increase priority of a workqueue thread ?

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


2005-10-20 13:36:13

by linux-os (Dick Johnson)

[permalink] [raw]
Subject: Re: Increase priority of a workqueue thread ?


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 [email protected] - and destroy all copies of this information, including any attachments, without reading or disclosing them.

Thank you.

2005-10-20 15:05:29

by Con Kolivas

[permalink] [raw]
Subject: Re: Increase priority of a workqueue thread ?

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


Attachments:
(No filename) (866.00 B)
set_workqueue_nice.patch (1.60 kB)
Download all attachments

2005-10-21 06:55:08

by Block Device

[permalink] [raw]
Subject: Re: Increase priority of a workqueue thread ?

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 <[email protected]> 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
>
>
>