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.
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.