Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull scheduler updates from Ingo Molnar: - Remove the unused per rq load array and all its infrastructure, by Dietmar Eggemann. - Add utilization clamping support by Patrick Bellasi. This is a refinement of the energy aware scheduling framework with support for boosting of interactive and capping of background workloads: to make sure critical GUI threads get maximum frequency ASAP, and to make sure background processing doesn't unnecessarily move to cpufreq governor to higher frequencies and less energy efficient CPU modes. - Add the bare minimum of tracepoints required for LISA EAS regression testing, by Qais Yousef - which allows automated testing of various power management features, including energy aware scheduling. - Restructure the former tsk_nr_cpus_allowed() facility that the -rt kernel used to modify the scheduler's CPU affinity logic such as migrate_disable() - introduce the task->cpus_ptr value instead of taking the address of &task->cpus_allowed directly - by Sebastian Andrzej Siewior. - Misc optimizations, fixes, cleanups and small enhancements - see the Git log for details. * 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (33 commits) sched/uclamp: Add uclamp support to energy_compute() sched/uclamp: Add uclamp_util_with() sched/cpufreq, sched/uclamp: Add clamps for FAIR and RT tasks sched/uclamp: Set default clamps for RT tasks sched/uclamp: Reset uclamp values on RESET_ON_FORK sched/uclamp: Extend sched_setattr() to support utilization clamping sched/core: Allow sched_setattr() to use the current policy sched/uclamp: Add system default clamps sched/uclamp: Enforce last task's UCLAMP_MAX sched/uclamp: Add bucket local max tracking sched/uclamp: Add CPU's clamp buckets refcounting sched/fair: Rename weighted_cpuload() to cpu_runnable_load() sched/debug: Export the newly added tracepoints sched/debug: Add sched_overutilized tracepoint sched/debug: Add new tracepoint to track PELT at se level sched/debug: Add new tracepoints to track PELT at rq level sched/debug: Add a new sched_trace_*() helper functions sched/autogroup: Make autogroup_path() always available sched/wait: Deduplicate code with do-while sched/topology: Remove unused 'sd' parameter from arch_scale_cpu_capacity() ...
This commit is contained in:
53
init/Kconfig
53
init/Kconfig
@@ -677,6 +677,59 @@ config HAVE_UNSTABLE_SCHED_CLOCK
|
||||
config GENERIC_SCHED_CLOCK
|
||||
bool
|
||||
|
||||
menu "Scheduler features"
|
||||
|
||||
config UCLAMP_TASK
|
||||
bool "Enable utilization clamping for RT/FAIR tasks"
|
||||
depends on CPU_FREQ_GOV_SCHEDUTIL
|
||||
help
|
||||
This feature enables the scheduler to track the clamped utilization
|
||||
of each CPU based on RUNNABLE tasks scheduled on that CPU.
|
||||
|
||||
With this option, the user can specify the min and max CPU
|
||||
utilization allowed for RUNNABLE tasks. The max utilization defines
|
||||
the maximum frequency a task should use while the min utilization
|
||||
defines the minimum frequency it should use.
|
||||
|
||||
Both min and max utilization clamp values are hints to the scheduler,
|
||||
aiming at improving its frequency selection policy, but they do not
|
||||
enforce or grant any specific bandwidth for tasks.
|
||||
|
||||
If in doubt, say N.
|
||||
|
||||
config UCLAMP_BUCKETS_COUNT
|
||||
int "Number of supported utilization clamp buckets"
|
||||
range 5 20
|
||||
default 5
|
||||
depends on UCLAMP_TASK
|
||||
help
|
||||
Defines the number of clamp buckets to use. The range of each bucket
|
||||
will be SCHED_CAPACITY_SCALE/UCLAMP_BUCKETS_COUNT. The higher the
|
||||
number of clamp buckets the finer their granularity and the higher
|
||||
the precision of clamping aggregation and tracking at run-time.
|
||||
|
||||
For example, with the minimum configuration value we will have 5
|
||||
clamp buckets tracking 20% utilization each. A 25% boosted tasks will
|
||||
be refcounted in the [20..39]% bucket and will set the bucket clamp
|
||||
effective value to 25%.
|
||||
If a second 30% boosted task should be co-scheduled on the same CPU,
|
||||
that task will be refcounted in the same bucket of the first task and
|
||||
it will boost the bucket clamp effective value to 30%.
|
||||
The clamp effective value of a bucket is reset to its nominal value
|
||||
(20% in the example above) when there are no more tasks refcounted in
|
||||
that bucket.
|
||||
|
||||
An additional boost/capping margin can be added to some tasks. In the
|
||||
example above the 25% task will be boosted to 30% until it exits the
|
||||
CPU. If that should be considered not acceptable on certain systems,
|
||||
it's always possible to reduce the margin by increasing the number of
|
||||
clamp buckets to trade off used memory for run-time tracking
|
||||
precision.
|
||||
|
||||
If in doubt, use the default value.
|
||||
|
||||
endmenu
|
||||
|
||||
#
|
||||
# For architectures that want to enable the support for NUMA-affine scheduler
|
||||
# balancing logic:
|
||||
|
@@ -72,7 +72,8 @@ struct task_struct init_task
|
||||
.static_prio = MAX_PRIO - 20,
|
||||
.normal_prio = MAX_PRIO - 20,
|
||||
.policy = SCHED_NORMAL,
|
||||
.cpus_allowed = CPU_MASK_ALL,
|
||||
.cpus_ptr = &init_task.cpus_mask,
|
||||
.cpus_mask = CPU_MASK_ALL,
|
||||
.nr_cpus_allowed= NR_CPUS,
|
||||
.mm = NULL,
|
||||
.active_mm = &init_mm,
|
||||
|
Reference in New Issue
Block a user