Blame view

kernel/sched/features.h 3.69 KB
81f7e3824   Eric Lee   Initial Release, ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
  /* SPDX-License-Identifier: GPL-2.0 */
  /*
   * Only give sleepers 50% of their service deficit. This allows
   * them to run sooner, but does not allow tons of sleepers to
   * rip the spread apart.
   */
  SCHED_FEAT(GENTLE_FAIR_SLEEPERS, true)
  
  /*
   * Place new tasks ahead so that they do not starve already running
   * tasks
   */
  SCHED_FEAT(START_DEBIT, true)
  
  /*
   * Prefer to schedule the task we woke last (assuming it failed
   * wakeup-preemption), since its likely going to consume data we
   * touched, increases cache locality.
   */
  SCHED_FEAT(NEXT_BUDDY, false)
  
  /*
   * Prefer to schedule the task that ran last (when we did
   * wake-preempt) as that likely will touch the same data, increases
   * cache locality.
   */
  SCHED_FEAT(LAST_BUDDY, true)
  
  /*
   * Consider buddies to be cache hot, decreases the likelyness of a
   * cache buddy being migrated away, increases cache locality.
   */
  SCHED_FEAT(CACHE_HOT_BUDDY, true)
  
  /*
   * Allow wakeup-time preemption of the current task:
   */
  SCHED_FEAT(WAKEUP_PREEMPTION, true)
  
  SCHED_FEAT(HRTICK, false)
  SCHED_FEAT(DOUBLE_TICK, false)
  SCHED_FEAT(LB_BIAS, true)
  
  /*
   * Decrement CPU capacity based on time not spent running tasks
   */
  SCHED_FEAT(NONTASK_CAPACITY, true)
  
  /*
   * Queue remote wakeups on the target CPU and process them
   * using the scheduler IPI. Reduces rq->lock contention/bounces.
   */
  SCHED_FEAT(TTWU_QUEUE, true)
  
  /*
   * When doing wakeups, attempt to limit superfluous scans of the LLC domain.
   */
  SCHED_FEAT(SIS_AVG_CPU, false)
  SCHED_FEAT(SIS_PROP, true)
  
  /*
   * Issue a WARN when we do multiple update_rq_clock() calls
   * in a single rq->lock section. Default disabled because the
   * annotations are not complete.
   */
  SCHED_FEAT(WARN_DOUBLE_CLOCK, false)
  
  #ifdef HAVE_RT_PUSH_IPI
  /*
   * In order to avoid a thundering herd attack of CPUs that are
   * lowering their priorities at the same time, and there being
   * a single CPU that has an RT task that can migrate and is waiting
   * to run, where the other CPUs will try to take that CPUs
   * rq lock and possibly create a large contention, sending an
   * IPI to that CPU and let that CPU push the RT task to where
   * it should go may be a better scenario.
   */
  SCHED_FEAT(RT_PUSH_IPI, true)
  #endif
  
  SCHED_FEAT(RT_RUNTIME_SHARE, true)
  SCHED_FEAT(LB_MIN, false)
  SCHED_FEAT(ATTACH_AGE_LOAD, true)
  
  SCHED_FEAT(WA_IDLE, true)
  SCHED_FEAT(WA_WEIGHT, true)
  SCHED_FEAT(WA_BIAS, true)
  
  /*
   * UtilEstimation. Use estimated CPU utilization.
   */
  SCHED_FEAT(UTIL_EST, true)
  
  /*
   * Energy aware scheduling. Use platform energy model to guide scheduling
   * decisions optimizing for energy efficiency.
   */
  #ifdef CONFIG_DEFAULT_USE_ENERGY_AWARE
  SCHED_FEAT(ENERGY_AWARE, true)
  #else
  SCHED_FEAT(ENERGY_AWARE, false)
  #endif
  
  /*
   * Energy aware scheduling algorithm choices:
   * EAS_PREFER_IDLE
   *   Direct tasks in a schedtune.prefer_idle=1 group through
   *   the EAS path for wakeup task placement. Otherwise, put
   *   those tasks through the mainline slow path.
   * FIND_BEST_TARGET
   *   Limit the number of placement options for which we calculate
   *   energy by using heuristics to select 'best idle' and
   *   'best active' cpu options.
   * FBT_STRICT_ORDER
   *   ON: If the target CPU saves any energy, use that.
   *   OFF: Use whichever of target or backup saves most.
   */
  SCHED_FEAT(EAS_PREFER_IDLE, true)
  SCHED_FEAT(FIND_BEST_TARGET, true)
  SCHED_FEAT(FBT_STRICT_ORDER, true)
  
  /*
   * Apply schedtune boost hold to tasks of all sched classes.
   * If enabled, schedtune will hold the boost applied to a CPU
   * for 50ms regardless of task activation - if the task is
   * still running 50ms later, the boost hold expires and schedtune
   * boost will expire immediately the task stops.
   * If disabled, this behaviour will only apply to tasks of the
   * RT class.
   */
  SCHED_FEAT(SCHEDTUNE_BOOST_HOLD_ALL, false)