On Tue, Jan 21, 2014 at 03:19:36PM +0530, Viresh Kumar wrote:
On 20 January 2014 21:11, Frederic Weisbecker fweisbec@gmail.com wrote:
But for workqueues having a global affinity, I think they can be rescheduled later on the old CPUs. Although I'm not sure about that, I'm Cc'ing Tejun.
Works queued on workqueues with WQ_UNBOUND flag set are run on any cpu and is decided by scheduler, whereas works queued on workqueues with this flag not set and without a cpu number mentioned while queuing work, runs on local CPU always.
Ok, so it is fine to migrate the latter kind I guess?
Also, one of the plan is to extend the sysfs interface of workqueues to override their affinity. If any of you guys want to try something there, that would be welcome. Also we want to work on the timer affinity. Perhaps we don't need a user interface for that, or maybe something on top of full dynticks to outline that we want the unbound timers to run on housekeeping CPUs only.
What about a quiesce option as mentioned by PeterZ? With that we can move all UNBOUND timers and workqueues away. But to guarantee that we don't get them queued again later we need to make similar updates in workqueue/timer subsystem to disallow queuing any such stuff on such cpusets.
I haven't checked the details but then this quiesce option would involve a dependency on cpuset for any workload involving workqueues affinity. I'm not sure we really want this. Besides, workqueues have an existing sysfs interface that can be easily extended.
Now indeed we may also want to enforce some policy to make sure that further created and queued workqueues are affine to a specific subset of CPUs. And then cpuset sounds like a good idea :)