• Josh Don's avatar
    sched: Cgroup SCHED_IDLE support · 30400039
    Josh Don authored
    This extends SCHED_IDLE to cgroups.
    
    Interface: cgroup/cpu.idle.
     0: default behavior
     1: SCHED_IDLE
    
    Extending SCHED_IDLE to cgroups means that we incorporate the existing
    aspects of SCHED_IDLE; a SCHED_IDLE cgroup will count all of its
    descendant threads towards the idle_h_nr_running count of all of its
    ancestor cgroups. Thus, sched_idle_rq() will work properly.
    Additionally, SCHED_IDLE cgroups are configured with minimum weight.
    
    There are two key differences between the per-task and per-cgroup
    SCHED_IDLE interface:
    
      - The cgroup interface allows tasks within a SCHED_IDLE hierarchy to
        maintain their relative weights. The entity that is "idle" is the
        cgroup, not the tasks themselves.
    
      - Since the idle entity is the cgroup, our SCHED_IDLE wakeup preemption
        decision is not made by comparing the current task with the woken
        task, but rather by comparing their matching sched_entity.
    
    A typical use-case for this is a user that creates an idle and a
    non-idle subtree. The non-idle subtree will dominate competition vs
    the idle subtree, but the idle subtree will still be high priority vs
    other users on the system. The latter is accomplished via comparing
    matching sched_entity in the waken preemption path (this could also be
    improved by making the sched_idle_rq() decision dependent on the
    perspective of a specific task).
    
    For now, we maintain the existing SCHED_IDLE semantics. Future patches
    may make improvements that extend how we treat SCHED_IDLE entities.
    
    The per-task_group idle field is an integer that currently only holds
    either a 0 or a 1. This is explicitly typed as an integer to allow for
    further extensions to this API. For example, a negative value may
    indicate a highly latency-sensitive cgroup that should be preferred
    for preemption/placement/etc.
    Signed-off-by: default avatarJosh Don <joshdon@google.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: default avatarVincent Guittot <vincent.guittot@linaro.org>
    Link: https://lore.kernel.org/r/20210730020019.1487127-2-joshdon@google.com
    30400039
fair.c 307 KB