Hello, On 09/08/2010 10:28 AM, Dave Chinner wrote: >> They may if necessary to keep the workqueue progressing. > > Ok, so the normal case is that they will all be processed local to the > CPU they were queued on, like the old workqueue code? Bound workqueues always process works locally. Please consider the following scenario. w0, w1, w2 are queued to q0 on the same CPU. w0 burns CPU for 5ms then sleeps for 10ms then burns CPU for 5ms again then finishes. w1 and w2 sleeps for 10ms. The following is what happens with the original workqueue (ignoring all other tasks and processing overhead). TIME IN MSECS EVENT 0 w0 burns CPU 5 w0 sleeps 15 w0 wakes and burns CPU 20 w0 finishes, w1 starts and sleeps 30 w1 finishes, w2 starts and sleeps 40 w2 finishes With cmwq if @max_active >= 3, TIME IN MSECS EVENT 0 w0 burns CPU 5 w0 sleeps, w1 starts and sleeps, w2 starts and sleeps 15 w0 wakes and burns CPU, w1 finishes, w2 finishes 20 w0 finishes IOW, cmwq assigns a new worker when there are more work items to process but no work item is currently in progress on the CPU. Please note that this behavior is across *all* workqueues. It doesn't matter which work item belongs to which workqueue. Thanks. -- tejun _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs