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

Commit df52824c authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "sched: make sched_cpu_high_irqload a runtime tunable"

parents c777a169 75d1c942
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,