Re: Work queue questions

anish singh
2012-09-25T03:06:17Z

On Tue, Sep 25, 2012 at 1:38 AM, Tejun Heo <tj@kernel.org> wrote:
> Hello,
>
> On Mon, Sep 24, 2012 at 08:57:40PM +0100, Deepawali Verma wrote:
>> May be I misunderstood, I read in the documentation about max_active.
>> In this case, max_active is 1, but I created three workqueues, do you
>
> I see. Why are you doing that? Is there ordering requirement? Why
> not just use system_unbound_wq?
>
>> mean to say for this case, single thread can process three requests
>> queued up in the three different workqueues.
>
> In the following execution log you posted,
>
> kworker/u:1-21 [000] 110.964895: task_event: MYTASKJOB2381 XStarted
> kworker/u:1-21 [000] 110.964909: task_event: MYTASKJOB2381 Xstopped
> kworker/u:1-21 [000] 110.965137: task_event: MYTASKJOB2382 XStarted
> kworker/u:1-21 [000] 110.965154: task_event: MYTASKJOB2382 Xstopped
> kworker/u:5-3724 [000] 110.965311: task_event: MYTASKJOB2383 XStarted
> kworker/u:5-3724 [000] 110.965325: task_event: MYTASKJOB2383 Xstopped
>
> The first two got executed on the same worker thread but the third one
> is on a different one. It really looks like you just don't have large
> enough work for scheduler to interleave them or migrate workers to
> different CPUs.
Tejun, It is also very well mentioned in the documentation
Documentation/workqueue.txt
Quoting from it:
"Some users depend on the strict execution ordering of ST wq. The
combination of @max_active of 1 and WQ_UNBOUND is used to achieve this
behavior. Work items on such wq are always queued to the unbound gcwq
and only one work item can be active at any given time thus achieving
the same ordering property as ST wq."
So what Deepawali Verma is observing is the same.
>
> Thanks.
>
> --
> tejun