1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2391e43daSPeter Zijlstra 3391e43daSPeter Zijlstra /* 486bfbb7cSPeter Zijlstra * Using the avg_vruntime, do the right thing and preserve lag across 586bfbb7cSPeter Zijlstra * sleep+wake cycles. EEVDF placement strategy #1, #2 if disabled. 6391e43daSPeter Zijlstra */ 786bfbb7cSPeter Zijlstra SCHED_FEAT(PLACE_LAG, true) 8f25b7b32SPeter Zijlstra /* 9f25b7b32SPeter Zijlstra * Give new tasks half a slice to ease into the competition. 10f25b7b32SPeter Zijlstra */ 11147f3efaSPeter Zijlstra SCHED_FEAT(PLACE_DEADLINE_INITIAL, true) 12f25b7b32SPeter Zijlstra /* 1382e9d045SPeter Zijlstra * Preserve relative virtual deadline on 'migration'. 1482e9d045SPeter Zijlstra */ 1582e9d045SPeter Zijlstra SCHED_FEAT(PLACE_REL_DEADLINE, true) 1682e9d045SPeter Zijlstra /* 17f25b7b32SPeter Zijlstra * Inhibit (wakeup) preemption until the current task has either matched the 18f25b7b32SPeter Zijlstra * 0-lag point or until is has exhausted it's slice. 19f25b7b32SPeter Zijlstra */ 2063304558SPeter Zijlstra SCHED_FEAT(RUN_TO_PARITY, true) 21*85e511dfSPeter Zijlstra /* 22*85e511dfSPeter Zijlstra * Allow wakeup of tasks with a shorter slice to cancel RESPECT_SLICE for 23*85e511dfSPeter Zijlstra * current. 24*85e511dfSPeter Zijlstra */ 25*85e511dfSPeter Zijlstra SCHED_FEAT(PREEMPT_SHORT, true) 26391e43daSPeter Zijlstra 27391e43daSPeter Zijlstra /* 28391e43daSPeter Zijlstra * Prefer to schedule the task we woke last (assuming it failed 29391e43daSPeter Zijlstra * wakeup-preemption), since its likely going to consume data we 30391e43daSPeter Zijlstra * touched, increases cache locality. 31391e43daSPeter Zijlstra */ 32f8b6d1ccSPeter Zijlstra SCHED_FEAT(NEXT_BUDDY, false) 33391e43daSPeter Zijlstra 34391e43daSPeter Zijlstra /* 353b03706fSIngo Molnar * Consider buddies to be cache hot, decreases the likeliness of a 36391e43daSPeter Zijlstra * cache buddy being migrated away, increases cache locality. 37391e43daSPeter Zijlstra */ 38f8b6d1ccSPeter Zijlstra SCHED_FEAT(CACHE_HOT_BUDDY, true) 39391e43daSPeter Zijlstra 40391e43daSPeter Zijlstra /* 41152e11f6SPeter Zijlstra * Delay dequeueing tasks until they get selected or woken. 42152e11f6SPeter Zijlstra * 43152e11f6SPeter Zijlstra * By delaying the dequeue for non-eligible tasks, they remain in the 44152e11f6SPeter Zijlstra * competition and can burn off their negative lag. When they get selected 45152e11f6SPeter Zijlstra * they'll have positive lag by definition. 4654a58a78SPeter Zijlstra * 4754a58a78SPeter Zijlstra * DELAY_ZERO clips the lag on dequeue (or wakeup) to 0. 48152e11f6SPeter Zijlstra */ 49152e11f6SPeter Zijlstra SCHED_FEAT(DELAY_DEQUEUE, true) 5054a58a78SPeter Zijlstra SCHED_FEAT(DELAY_ZERO, true) 51152e11f6SPeter Zijlstra 52152e11f6SPeter Zijlstra /* 538ed92e51SIngo Molnar * Allow wakeup-time preemption of the current task: 548ed92e51SIngo Molnar */ 558ed92e51SIngo Molnar SCHED_FEAT(WAKEUP_PREEMPTION, true) 568ed92e51SIngo Molnar 57f8b6d1ccSPeter Zijlstra SCHED_FEAT(HRTICK, false) 58e0ee463cSJuri Lelli SCHED_FEAT(HRTICK_DL, false) 59f8b6d1ccSPeter Zijlstra SCHED_FEAT(DOUBLE_TICK, false) 60391e43daSPeter Zijlstra 61391e43daSPeter Zijlstra /* 625d4dfdddSNicolas Pitre * Decrement CPU capacity based on time not spent running tasks 63391e43daSPeter Zijlstra */ 645d4dfdddSNicolas Pitre SCHED_FEAT(NONTASK_CAPACITY, true) 65391e43daSPeter Zijlstra 66539fbb5bSThomas Gleixner #ifdef CONFIG_PREEMPT_RT 67539fbb5bSThomas Gleixner SCHED_FEAT(TTWU_QUEUE, false) 68539fbb5bSThomas Gleixner #else 69539fbb5bSThomas Gleixner 70391e43daSPeter Zijlstra /* 71391e43daSPeter Zijlstra * Queue remote wakeups on the target CPU and process them 72391e43daSPeter Zijlstra * using the scheduler IPI. Reduces rq->lock contention/bounces. 73391e43daSPeter Zijlstra */ 74f8b6d1ccSPeter Zijlstra SCHED_FEAT(TTWU_QUEUE, true) 75539fbb5bSThomas Gleixner #endif 76391e43daSPeter Zijlstra 774c77b18cSPeter Zijlstra /* 784c77b18cSPeter Zijlstra * When doing wakeups, attempt to limit superfluous scans of the LLC domain. 794c77b18cSPeter Zijlstra */ 8070fb5ccfSChen Yu SCHED_FEAT(SIS_UTIL, true) 814c77b18cSPeter Zijlstra 8226ae58d2SPeter Zijlstra /* 8326ae58d2SPeter Zijlstra * Issue a WARN when we do multiple update_rq_clock() calls 8426ae58d2SPeter Zijlstra * in a single rq->lock section. Default disabled because the 8526ae58d2SPeter Zijlstra * annotations are not complete. 8626ae58d2SPeter Zijlstra */ 8726ae58d2SPeter Zijlstra SCHED_FEAT(WARN_DOUBLE_CLOCK, false) 8826ae58d2SPeter Zijlstra 89b6366f04SSteven Rostedt #ifdef HAVE_RT_PUSH_IPI 90b6366f04SSteven Rostedt /* 91b6366f04SSteven Rostedt * In order to avoid a thundering herd attack of CPUs that are 92b6366f04SSteven Rostedt * lowering their priorities at the same time, and there being 93b6366f04SSteven Rostedt * a single CPU that has an RT task that can migrate and is waiting 94b6366f04SSteven Rostedt * to run, where the other CPUs will try to take that CPUs 95b6366f04SSteven Rostedt * rq lock and possibly create a large contention, sending an 96b6366f04SSteven Rostedt * IPI to that CPU and let that CPU push the RT task to where 97b6366f04SSteven Rostedt * it should go may be a better scenario. 98b6366f04SSteven Rostedt */ 99b6366f04SSteven Rostedt SCHED_FEAT(RT_PUSH_IPI, true) 100b6366f04SSteven Rostedt #endif 101b6366f04SSteven Rostedt 1022586af1aSDaniel Bristot de Oliveira SCHED_FEAT(RT_RUNTIME_SHARE, false) 103eb95308eSPeter Zijlstra SCHED_FEAT(LB_MIN, false) 104a9280514SPeter Zijlstra SCHED_FEAT(ATTACH_AGE_LOAD, true) 105a9280514SPeter Zijlstra 106d153b153SPeter Zijlstra SCHED_FEAT(WA_IDLE, true) 107f2cdd9ccSPeter Zijlstra SCHED_FEAT(WA_WEIGHT, true) 108f2cdd9ccSPeter Zijlstra SCHED_FEAT(WA_BIAS, true) 1097f65ea42SPatrick Bellasi 1107f65ea42SPatrick Bellasi /* 1117f65ea42SPatrick Bellasi * UtilEstimation. Use estimated CPU utilization. 1127f65ea42SPatrick Bellasi */ 113d519329fSPatrick Bellasi SCHED_FEAT(UTIL_EST, true) 1140c2de3f0SPeter Zijlstra 115c006fac5SPaul Turner SCHED_FEAT(LATENCY_WARN, false) 116