Loading Documentation/scheduler/sched-hmp.txt +18 −0 Original line number Diff line number Diff line Loading @@ -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 ========================= Loading include/linux/sched/sysctl.h +1 −0 Original line number Diff line number Diff line Loading @@ -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; Loading kernel/sched/core.c +2 −0 Original line number Diff line number Diff line Loading @@ -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; Loading kernel/sched/sched.h +1 −2 Original line number Diff line number Diff line Loading @@ -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 */ Loading kernel/sysctl.c +7 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
Documentation/scheduler/sched-hmp.txt +18 −0 Original line number Diff line number Diff line Loading @@ -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 ========================= Loading
include/linux/sched/sysctl.h +1 −0 Original line number Diff line number Diff line Loading @@ -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; Loading
kernel/sched/core.c +2 −0 Original line number Diff line number Diff line Loading @@ -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; Loading
kernel/sched/sched.h +1 −2 Original line number Diff line number Diff line Loading @@ -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 */ Loading
kernel/sysctl.c +7 −0 Original line number Diff line number Diff line Loading @@ -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