• Leonardo Bras's avatar
    workqueue: Avoid using isolated cpus' timers on queue_delayed_work · aae17ebb
    Leonardo Bras authored
    When __queue_delayed_work() is called, it chooses a cpu for handling the
    timer interrupt. As of today, it will pick either the cpu passed as
    parameter or the last cpu used for this.
    
    This is not good if a system does use CPU isolation, because it can take
    away some valuable cpu time to:
    1 - deal with the timer interrupt,
    2 - schedule-out the desired task,
    3 - queue work on a random workqueue, and
    4 - schedule the desired task back to the cpu.
    
    So to fix this, during __queue_delayed_work(), if cpu isolation is in
    place, pick a random non-isolated cpu to handle the timer interrupt.
    
    As an optimization, if the current cpu is not isolated, use it instead
    of looking for another candidate.
    Signed-off-by: default avatarLeonardo Bras <leobras@redhat.com>
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    aae17ebb
workqueue.c 207 KB