| 1 |
|
| 2 |
|
| 3 | |
| 4 | * Using the avg_vruntime, do the right thing and preserve lag across
|
| 5 | * sleep+wake cycles. EEVDF placement strategy #1, #2 if disabled.
|
| 6 |
|
| 7 | SCHED_FEAT(PLACE_LAG, true)
|
| 8 | |
| 9 | * Give new tasks half a slice to ease into the competition.
|
| 10 |
|
| 11 | SCHED_FEAT(PLACE_DEADLINE_INITIAL, true)
|
| 12 | |
| 13 | * Preserve relative virtual deadline on 'migration'.
|
| 14 |
|
| 15 | SCHED_FEAT(PLACE_REL_DEADLINE, true)
|
| 16 | |
| 17 | * Inhibit (wakeup) preemption until the current task has either matched the
|
| 18 | * 0-lag point or until is has exhausted it's slice.
|
| 19 |
|
| 20 | SCHED_FEAT(RUN_TO_PARITY, true)
|
| 21 | |
| 22 | * Allow wakeup of tasks with a shorter slice to cancel RUN_TO_PARITY for
|
| 23 | * current.
|
| 24 |
|
| 25 | SCHED_FEAT(PREEMPT_SHORT, true)
|
| 26 |
|
| 27 | |
| 28 | * Prefer to schedule the task we woke last (assuming it failed
|
| 29 | * wakeup-preemption), since its likely going to consume data we
|
| 30 | * touched, increases cache locality.
|
| 31 |
|
| 32 | SCHED_FEAT(NEXT_BUDDY, false)
|
| 33 |
|
| 34 | |
| 35 | * Allow completely ignoring cfs_rq->next; which can be set from various
|
| 36 | * places:
|
| 37 | * - NEXT_BUDDY (wakeup preemption)
|
| 38 | * - yield_to_task()
|
| 39 | * - cgroup dequeue / pick
|
| 40 |
|
| 41 | SCHED_FEAT(PICK_BUDDY, true)
|
| 42 |
|
| 43 | |
| 44 | * Consider buddies to be cache hot, decreases the likeliness of a
|
| 45 | * cache buddy being migrated away, increases cache locality.
|
| 46 |
|
| 47 | SCHED_FEAT(CACHE_HOT_BUDDY, true)
|
| 48 |
|
| 49 | |
| 50 | * Delay dequeueing tasks until they get selected or woken.
|
| 51 | *
|
| 52 | * By delaying the dequeue for non-eligible tasks, they remain in the
|
| 53 | * competition and can burn off their negative lag. When they get selected
|
| 54 | * they'll have positive lag by definition.
|
| 55 | *
|
| 56 | * DELAY_ZERO clips the lag on dequeue (or wakeup) to 0.
|
| 57 |
|
| 58 | SCHED_FEAT(DELAY_DEQUEUE, true)
|
| 59 | SCHED_FEAT(DELAY_ZERO, true)
|
| 60 |
|
| 61 | SCHED_FEAT(PARANOID_AVG, false)
|
| 62 |
|
| 63 | |
| 64 | * Allow wakeup-time preemption of the current task:
|
| 65 |
|
| 66 | SCHED_FEAT(WAKEUP_PREEMPTION, true)
|
| 67 |
|
| 68 | #ifdef CONFIG_HRTIMER_REARM_DEFERRED
|
| 69 | SCHED_FEAT(HRTICK, true)
|
| 70 | SCHED_FEAT(HRTICK_DL, true)
|
| 71 | #else
|
| 72 | SCHED_FEAT(HRTICK, false)
|
| 73 | SCHED_FEAT(HRTICK_DL, false)
|
| 74 | #endif
|
| 75 |
|
| 76 | |
| 77 | * Decrement CPU capacity based on time not spent running tasks
|
| 78 |
|
| 79 | SCHED_FEAT(NONTASK_CAPACITY, true)
|
| 80 |
|
| 81 | #ifdef CONFIG_PREEMPT_RT
|
| 82 | SCHED_FEAT(TTWU_QUEUE, false)
|
| 83 | #else
|
| 84 |
|
| 85 | |
| 86 | * Queue remote wakeups on the target CPU and process them
|
| 87 | * using the scheduler IPI. Reduces rq->lock contention/bounces.
|
| 88 |
|
| 89 | SCHED_FEAT(TTWU_QUEUE, true)
|
| 90 | #endif
|
| 91 |
|
| 92 | |
| 93 | * When doing wakeups, attempt to limit superfluous scans of the LLC domain.
|
| 94 |
|
| 95 | SCHED_FEAT(SIS_UTIL, true)
|
| 96 |
|
| 97 | |
| 98 | * Issue a WARN when we do multiple update_rq_clock() calls
|
| 99 | * in a single rq->lock section. Default disabled because the
|
| 100 | * annotations are not complete.
|
| 101 |
|
| 102 | SCHED_FEAT(WARN_DOUBLE_CLOCK, false)
|
| 103 |
|
| 104 | #ifdef HAVE_RT_PUSH_IPI
|
| 105 | |
| 106 | * In order to avoid a thundering herd attack of CPUs that are
|
| 107 | * lowering their priorities at the same time, and there being
|
| 108 | * a single CPU that has an RT task that can migrate and is waiting
|
| 109 | * to run, where the other CPUs will try to take that CPUs
|
| 110 | * rq lock and possibly create a large contention, sending an
|
| 111 | * IPI to that CPU and let that CPU push the RT task to where
|
| 112 | * it should go may be a better scenario.
|
| 113 | *
|
| 114 | * This is best for PREEMPT_RT, but for non-RT it can cause issues
|
| 115 | * when preemption is disabled for long periods of time. Have
|
| 116 | * it only default enabled for PREEMPT_RT.
|
| 117 |
|
| 118 | # ifdef CONFIG_PREEMPT_RT
|
| 119 | SCHED_FEAT(RT_PUSH_IPI, true)
|
| 120 | # else
|
| 121 | SCHED_FEAT(RT_PUSH_IPI, false)
|
| 122 | # endif
|
| 123 | #endif
|
| 124 |
|
| 125 | SCHED_FEAT(RT_RUNTIME_SHARE, false)
|
| 126 | SCHED_FEAT(LB_MIN, false)
|
| 127 | SCHED_FEAT(ATTACH_AGE_LOAD, true)
|
| 128 |
|
| 129 | SCHED_FEAT(WA_IDLE, true)
|
| 130 | SCHED_FEAT(WA_WEIGHT, true)
|
| 131 | SCHED_FEAT(WA_BIAS, true)
|
| 132 |
|
| 133 | |
| 134 | * UtilEstimation. Use estimated CPU utilization.
|
| 135 |
|
| 136 | SCHED_FEAT(UTIL_EST, true)
|
| 137 |
|
| 138 | SCHED_FEAT(LATENCY_WARN, false)
|
| 139 |
|
| 140 | |
| 141 | * Do newidle balancing proportional to its success rate using randomization.
|
| 142 |
|
| 143 | SCHED_FEAT(NI_RANDOM, true)
|
| 144 | SCHED_FEAT(NI_RATE, true)
|