Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 75d1c942 authored by Steve Muckle's avatar Steve Muckle
Browse files

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: default avatarSteve Muckle <smuckle@codeaurora.org>
parent e5f54d34
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -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
=========================
+1 −0
Original line number Diff line number Diff line
@@ -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;
+2 −0
Original line number Diff line number Diff line
@@ -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;
+1 −2
Original line number Diff line number Diff line
@@ -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 */
+7 −0
Original line number Diff line number Diff line
@@ -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,