sched: make sched_cpu_high_irqload a runtime tunable
It may be desirable to be able to alter the scehd_cpu_high_irqload setting easily, so make it a runtime tunable value. Change-Id: I832030eec2aafa101f0f435a4fd2d401d447880d Signed-off-by: Steve Muckle <smuckle@codeaurora.org>
This commit is contained in:
parent
e5f54d3484
commit
75d1c94217
|
@ -1351,6 +1351,24 @@ frequency. Hence it is strongly advised to have all cpus in a cluster have the
|
|||
same value for mostly_idle_freq. For more details, see section on "Task
|
||||
packing" (sec 5.6).
|
||||
|
||||
*** 7.22 sched_cpu_high_irqload
|
||||
|
||||
Appears at: /proc/sys/kernel/sched_cpu_high_irqload
|
||||
|
||||
Default value: 10000000 (10ms)
|
||||
|
||||
The scheduler keeps a decaying average of the amount of irq and softirq activity
|
||||
seen on each CPU within a ten millisecond window. Note that this "irqload"
|
||||
(reported in the sched_cpu_load tracepoint) will be higher than the typical load
|
||||
in a single window since every time the window rolls over, the value is decayed
|
||||
by some fraction and then added to the irq/softirq time spent in the next
|
||||
window.
|
||||
|
||||
When the irqload on a CPU exceeds the value of this tunable, the CPU is no
|
||||
longer eligible to be seen as mostly idle. This will affect the task placement
|
||||
logic described above, causing the scheduler to try and steer tasks away from
|
||||
the CPU.
|
||||
|
||||
=========================
|
||||
8. HMP SCHEDULER TRACE POINTS
|
||||
=========================
|
||||
|
|
|
@ -40,6 +40,7 @@ extern unsigned int sysctl_sched_wakeup_load_threshold;
|
|||
extern unsigned int sysctl_sched_window_stats_policy;
|
||||
extern unsigned int sysctl_sched_account_wait_time;
|
||||
extern unsigned int sysctl_sched_ravg_hist_size;
|
||||
extern unsigned int sysctl_sched_cpu_high_irqload;
|
||||
extern unsigned int sysctl_sched_freq_account_wait_time;
|
||||
extern unsigned int sysctl_sched_migration_fixup;
|
||||
extern unsigned int sysctl_sched_heavy_task_pct;
|
||||
|
|
|
@ -1163,6 +1163,8 @@ __read_mostly unsigned int sysctl_sched_window_stats_policy =
|
|||
static __read_mostly unsigned int sched_account_wait_time = 1;
|
||||
__read_mostly unsigned int sysctl_sched_account_wait_time = 1;
|
||||
|
||||
__read_mostly unsigned int sysctl_sched_cpu_high_irqload = (10 * NSEC_PER_MSEC);
|
||||
|
||||
#ifdef CONFIG_SCHED_FREQ_INPUT
|
||||
|
||||
static __read_mostly unsigned int sched_migration_fixup = 1;
|
||||
|
|
|
@ -782,10 +782,9 @@ static inline u64 sched_irqload(int cpu)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#define SCHED_HIGH_IRQ_NS (10 * NSEC_PER_MSEC)
|
||||
static inline int sched_cpu_high_irqload(int cpu)
|
||||
{
|
||||
return sched_irqload(cpu) >= SCHED_HIGH_IRQ_NS;
|
||||
return sched_irqload(cpu) >= sysctl_sched_cpu_high_irqload;
|
||||
}
|
||||
|
||||
#else /* CONFIG_SCHED_HMP */
|
||||
|
|
|
@ -346,6 +346,13 @@ static struct ctl_table kern_table[] = {
|
|||
.mode = 0644,
|
||||
.proc_handler = sched_window_update_handler,
|
||||
},
|
||||
{
|
||||
.procname = "sched_cpu_high_irqload",
|
||||
.data = &sysctl_sched_cpu_high_irqload,
|
||||
.maxlen = sizeof(unsigned int),
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
},
|
||||
{
|
||||
.procname = "sched_ravg_hist_size",
|
||||
.data = &sysctl_sched_ravg_hist_size,
|
||||
|
|
Loading…
Reference in New Issue