Merge "sched/walt: Improve the scheduler"

This commit is contained in:
qctecmdr 2021-08-24 14:48:15 -07:00 committed by Gerrit - the friendly Code Review server
commit 315a58f72b
4 changed files with 29 additions and 18 deletions

View File

@ -61,6 +61,7 @@ unsigned int sysctl_sched_many_wakeup_threshold = WALT_MANY_WAKEUP_DEFAULT;
const int sched_user_hint_max = 1000; const int sched_user_hint_max = 1000;
unsigned int sysctl_walt_rtg_cfs_boost_prio = 99; /* disabled by default */ unsigned int sysctl_walt_rtg_cfs_boost_prio = 99; /* disabled by default */
unsigned int sysctl_sched_sync_hint_enable = 1; unsigned int sysctl_sched_sync_hint_enable = 1;
unsigned int sysctl_sched_bug_on_rt_throttle;
unsigned int sysctl_panic_on_walt_bug; unsigned int sysctl_panic_on_walt_bug;
unsigned int sysctl_sched_suppress_region2; unsigned int sysctl_sched_suppress_region2;
@ -713,6 +714,15 @@ struct ctl_table walt_table[] = {
.extra1 = SYSCTL_ZERO, .extra1 = SYSCTL_ZERO,
.extra2 = SYSCTL_ONE, .extra2 = SYSCTL_ONE,
}, },
{
.procname = "sched_bug_on_rt_throttle",
.data = &sysctl_sched_bug_on_rt_throttle,
.maxlen = sizeof(unsigned int),
.mode = 0644,
.proc_handler = proc_dointvec_minmax,
.extra1 = SYSCTL_ZERO,
.extra2 = SYSCTL_ONE,
},
{ {
.procname = "sched_suppress_region2", .procname = "sched_suppress_region2",
.data = &sysctl_sched_suppress_region2, .data = &sysctl_sched_suppress_region2,

View File

@ -4130,6 +4130,23 @@ static void android_rvh_force_compatible_post(void *unused, void *unused2)
cpu_maps_update_done(); cpu_maps_update_done();
} }
static void dump_throttled_rt_tasks(void *unused, int cpu, u64 clock,
ktime_t rt_period, u64 rt_runtime, s64 rt_period_timer_expires)
{
printk_deferred("sched: RT throttling activated for cpu %d\n", cpu);
printk_deferred("rt_period_timer: expires=%lld now=%llu rt_time=%llu runtime=%llu period=%llu\n",
rt_period_timer_expires, ktime_get_ns(),
task_rq(current)->rt.rt_time, rt_runtime, rt_period);
printk_deferred("potential CPU hogs:\n");
#ifdef CONFIG_SCHED_INFO
if (sched_info_on())
printk_deferred("current %s (%d) is running for %llu nsec\n",
current->comm, current->pid,
clock - current->sched_info.last_arrival);
#endif
BUG_ON(sysctl_sched_bug_on_rt_throttle);
}
static void register_walt_hooks(void) static void register_walt_hooks(void)
{ {
register_trace_android_rvh_wake_up_new_task(android_rvh_wake_up_new_task, NULL); register_trace_android_rvh_wake_up_new_task(android_rvh_wake_up_new_task, NULL);
@ -4161,6 +4178,7 @@ static void register_walt_hooks(void)
register_trace_cpu_frequency_limits(walt_cpu_frequency_limits, NULL); register_trace_cpu_frequency_limits(walt_cpu_frequency_limits, NULL);
register_trace_android_rvh_force_compatible_pre(android_rvh_force_compatible_pre, NULL); register_trace_android_rvh_force_compatible_pre(android_rvh_force_compatible_pre, NULL);
register_trace_android_rvh_force_compatible_post(android_rvh_force_compatible_post, NULL); register_trace_android_rvh_force_compatible_post(android_rvh_force_compatible_post, NULL);
register_trace_android_vh_dump_throttled_rt_tasks(dump_throttled_rt_tasks, NULL);
} }
atomic64_t walt_irq_work_lastq_ws; atomic64_t walt_irq_work_lastq_ws;

View File

@ -286,6 +286,7 @@ extern unsigned int sysctl_sched_task_unfilter_period;
extern unsigned int __read_mostly sysctl_sched_asym_cap_sibling_freq_match_pct; extern unsigned int __read_mostly sysctl_sched_asym_cap_sibling_freq_match_pct;
extern unsigned int sysctl_walt_low_latency_task_threshold; /* disabled by default */ extern unsigned int sysctl_walt_low_latency_task_threshold; /* disabled by default */
extern unsigned int sysctl_sched_sync_hint_enable; extern unsigned int sysctl_sched_sync_hint_enable;
extern unsigned int sysctl_sched_bug_on_rt_throttle;
extern unsigned int sysctl_sched_suppress_region2; extern unsigned int sysctl_sched_suppress_region2;
extern struct ctl_table walt_table[]; extern struct ctl_table walt_table[];
extern struct ctl_table walt_base_table[]; extern struct ctl_table walt_base_table[];

View File

@ -11,23 +11,6 @@
#include "walt.h" #include "walt.h"
#include "walt_debug.h" #include "walt_debug.h"
static void dump_throttled_rt_tasks(void *unused, int cpu, u64 clock,
ktime_t rt_period, u64 rt_runtime, s64 rt_period_timer_expires)
{
printk_deferred("sched: RT throttling activated for cpu %d\n", cpu);
printk_deferred("rt_period_timer: expires=%lld now=%llu rt_time=%llu runtime=%llu period=%llu\n",
rt_period_timer_expires, ktime_get_ns(),
task_rq(current)->rt.rt_time, rt_runtime, rt_period);
printk_deferred("potential CPU hogs:\n");
#ifdef CONFIG_SCHED_INFO
if (sched_info_on())
printk_deferred("current %s (%d) is running for %llu nsec\n",
current->comm, current->pid,
clock - current->sched_info.last_arrival);
#endif
BUG();
}
static void android_rvh_schedule_bug(void *unused, struct task_struct *unused2) static void android_rvh_schedule_bug(void *unused, struct task_struct *unused2)
{ {
BUG(); BUG();
@ -41,7 +24,6 @@ static int __init walt_debug_init(void)
if (ret) if (ret)
return ret; return ret;
register_trace_android_vh_dump_throttled_rt_tasks(dump_throttled_rt_tasks, NULL);
register_trace_android_rvh_schedule_bug(android_rvh_schedule_bug, NULL); register_trace_android_rvh_schedule_bug(android_rvh_schedule_bug, NULL);
return 0; return 0;