• Cliff Wickman's avatar
    hotplug cpu: migrate a task within its cpuset · 470fd646
    Cliff Wickman authored
    When a cpu is disabled, move_task_off_dead_cpu() is called for tasks that have
    been running on that cpu.
    
    Currently, such a task is migrated:
     1) to any cpu on the same node as the disabled cpu, which is both online
        and among that task's cpus_allowed
     2) to any cpu which is both online and among that task's cpus_allowed
    
    It is typical of a multithreaded application running on a large NUMA system to
    have its tasks confined to a cpuset so as to cluster them near the memory that
    they share.  Furthermore, it is typical to explicitly place such a task on a
    specific cpu in that cpuset.  And in that case the task's cpus_allowed
    includes only a single cpu.
    
    This patch would insert a preference to migrate such a task to some cpu within
    its cpuset (and set its cpus_allowed to its entire cpuset).
    
    With this patch, migrate the task to:
     1) to any cpu on the same node as the disabled cpu, which is both online
        and among that task's cpus_allowed
     2) to any online cpu within the task's cpuset
     3) to any cpu which is both online and among that task's cpus_allowed
    
    In order to do this, move_task_off_dead_cpu() must make a call to
    cpuset_cpus_allowed_locked(), a new subset of cpuset_cpus_allowed(), that will
    not block.  (name change - per Oleg's suggestion)
    
    Calls are made to cpuset_lock() and cpuset_unlock() in migration_call() to set
    the cpuset mutex during the whole migrate_live_tasks() and
    migrate_dead_tasks() procedure.
    
    [akpm@linux-foundation.org: build fix]
    [pj@sgi.com: Fix indentation and spacing]
    Signed-off-by: default avatarCliff Wickman <cpw@sgi.com>
    Cc: Oleg Nesterov <oleg@tv-sign.ru>
    Cc: Christoph Lameter <clameter@sgi.com>
    Cc: Paul Jackson <pj@sgi.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Signed-off-by: default avatarPaul Jackson <pj@sgi.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    470fd646
cpuset.c 67.2 KB