• Peter Zijlstra's avatar
    sched/fair: Implement an EEVDF-like scheduling policy · 147f3efa
    Peter Zijlstra authored
    Where CFS is currently a WFQ based scheduler with only a single knob,
    the weight. The addition of a second, latency oriented parameter,
    makes something like WF2Q or EEVDF based a much better fit.
    
    Specifically, EEVDF does EDF like scheduling in the left half of the
    tree -- those entities that are owed service. Except because this is a
    virtual time scheduler, the deadlines are in virtual time as well,
    which is what allows over-subscription.
    
    EEVDF has two parameters:
    
     - weight, or time-slope: which is mapped to nice just as before
    
     - request size, or slice length: which is used to compute
       the virtual deadline as: vd_i = ve_i + r_i/w_i
    
    Basically, by setting a smaller slice, the deadline will be earlier
    and the task will be more eligible and ran earlier.
    
    Tick driven preemption is driven by request/slice completion; while
    wakeup preemption is driven by the deadline.
    
    Because the tree is now effectively an interval tree, and the
    selection is no longer 'leftmost', over-scheduling is less of a
    problem.
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Link: https://lore.kernel.org/r/20230531124603.931005524@infradead.org
    147f3efa
fair.c 356 KB