mirror of
https://github.com/torvalds/linux.git
synced 2026-07-30 19:21:28 +02:00
sched: Improve the Scheduler
This change is for general scheduler improvement. Change-Id: Id6818d7f79e8babb316aff3568cb65397df53c6f Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org> Signed-off-by: Shaleen Agrawal <shalagra@codeaurora.org>
This commit is contained in:
parent
0808e3fa4d
commit
b6b9ecaecb
|
|
@ -43,7 +43,7 @@ struct walt_related_thread_group {
|
|||
struct rcu_head rcu;
|
||||
u64 last_update;
|
||||
u64 downmigrate_ts;
|
||||
u64 start_ts;
|
||||
u64 start_ktime_ts;
|
||||
};
|
||||
|
||||
struct walt_task_struct {
|
||||
|
|
|
|||
|
|
@ -66,6 +66,7 @@ unsigned int sysctl_sched_bug_on_rt_throttle;
|
|||
unsigned int sysctl_panic_on_walt_bug;
|
||||
unsigned int sysctl_sched_suppress_region2;
|
||||
unsigned int sysctl_sched_skip_sp_newly_idle_lb = 1;
|
||||
unsigned int sysctl_sched_hyst_min_coloc_ns = 80000000;
|
||||
|
||||
/* range is [1 .. INT_MAX] */
|
||||
static int sysctl_task_read_pid = 1;
|
||||
|
|
@ -752,6 +753,14 @@ struct ctl_table walt_table[] = {
|
|||
.extra1 = SYSCTL_ZERO,
|
||||
.extra2 = SYSCTL_ONE,
|
||||
},
|
||||
{
|
||||
.procname = "sched_hyst_min_coloc_ns",
|
||||
.data = &sysctl_sched_hyst_min_coloc_ns,
|
||||
.maxlen = sizeof(unsigned int),
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec_minmax,
|
||||
.extra1 = SYSCTL_ZERO,
|
||||
},
|
||||
{
|
||||
.procname = "panic_on_walt_bug",
|
||||
.data = &sysctl_panic_on_walt_bug,
|
||||
|
|
|
|||
|
|
@ -300,25 +300,39 @@ extern const char *migrate_type_names[];
|
|||
|
||||
TRACE_EVENT(sched_set_preferred_cluster,
|
||||
|
||||
TP_PROTO(struct walt_related_thread_group *grp, u64 total_demand),
|
||||
TP_PROTO(struct walt_related_thread_group *grp, u64 total_demand,
|
||||
bool prev_skip_min),
|
||||
|
||||
TP_ARGS(grp, total_demand),
|
||||
TP_ARGS(grp, total_demand, prev_skip_min),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(int, id)
|
||||
__field(u64, total_demand)
|
||||
__field(bool, skip_min)
|
||||
__field(bool, prev_skip_min)
|
||||
__field(u64, start_ktime_ts)
|
||||
__field(u64, last_update)
|
||||
__field(unsigned int, sysctl_sched_hyst_min_coloc_ns)
|
||||
__field(u64, downmigrate_ts)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->id = grp->id;
|
||||
__entry->total_demand = total_demand;
|
||||
__entry->skip_min = grp->skip_min;
|
||||
__entry->prev_skip_min = prev_skip_min;
|
||||
__entry->start_ktime_ts = grp->start_ktime_ts;
|
||||
__entry->last_update = grp->last_update;
|
||||
__entry->sysctl_sched_hyst_min_coloc_ns = sysctl_sched_hyst_min_coloc_ns;
|
||||
__entry->downmigrate_ts = grp->downmigrate_ts;
|
||||
),
|
||||
|
||||
TP_printk("group_id %d total_demand %llu skip_min %d",
|
||||
TP_printk("group_id %d total_demand %llu skip_min %d prev_skip_min %d start_ktime_ts %llu last_update %llu min_coloc_ns %u downmigrate_ts %llu",
|
||||
__entry->id, __entry->total_demand,
|
||||
__entry->skip_min)
|
||||
__entry->skip_min, __entry->prev_skip_min,
|
||||
__entry->start_ktime_ts, __entry->last_update,
|
||||
__entry->sysctl_sched_hyst_min_coloc_ns,
|
||||
__entry->downmigrate_ts)
|
||||
);
|
||||
|
||||
TRACE_EVENT(sched_migration_update_sum,
|
||||
|
|
|
|||
|
|
@ -2693,7 +2693,7 @@ static DEFINE_RWLOCK(related_thread_group_lock);
|
|||
|
||||
static inline
|
||||
void update_best_cluster(struct walt_related_thread_group *grp,
|
||||
u64 demand, bool boost)
|
||||
u64 combined_demand, bool boost)
|
||||
{
|
||||
if (boost) {
|
||||
/*
|
||||
|
|
@ -2705,15 +2705,18 @@ void update_best_cluster(struct walt_related_thread_group *grp,
|
|||
}
|
||||
|
||||
if (is_suh_max())
|
||||
demand = sched_group_upmigrate;
|
||||
combined_demand = sched_group_upmigrate;
|
||||
|
||||
if (!grp->skip_min) {
|
||||
if (demand >= sched_group_upmigrate)
|
||||
if (combined_demand >= sched_group_upmigrate)
|
||||
grp->skip_min = true;
|
||||
return;
|
||||
}
|
||||
if (demand < sched_group_downmigrate) {
|
||||
if (!sysctl_sched_coloc_downmigrate_ns) {
|
||||
if (combined_demand < sched_group_downmigrate) {
|
||||
if (!sysctl_sched_coloc_downmigrate_ns ||
|
||||
(grp->last_update - grp->start_ktime_ts) <
|
||||
sysctl_sched_hyst_min_coloc_ns) {
|
||||
grp->downmigrate_ts = 0;
|
||||
grp->skip_min = false;
|
||||
return;
|
||||
}
|
||||
|
|
@ -2780,13 +2783,15 @@ static void _set_preferred_cluster(struct walt_related_thread_group *grp)
|
|||
|
||||
grp->last_update = wallclock;
|
||||
update_best_cluster(grp, combined_demand, group_boost);
|
||||
trace_sched_set_preferred_cluster(grp, combined_demand);
|
||||
|
||||
out:
|
||||
trace_sched_set_preferred_cluster(grp, combined_demand, prev_skip_min);
|
||||
if (grp->id == DEFAULT_CGROUP_COLOC_ID
|
||||
&& grp->skip_min != prev_skip_min) {
|
||||
if (grp->skip_min)
|
||||
grp->start_ts = sched_clock();
|
||||
grp->start_ktime_ts = wallclock;
|
||||
else
|
||||
grp->start_ktime_ts = 0;
|
||||
sched_update_hyst_times();
|
||||
}
|
||||
}
|
||||
|
|
@ -3297,12 +3302,12 @@ bool is_rtgb_active(void)
|
|||
u64 get_rtgb_active_time(void)
|
||||
{
|
||||
struct walt_related_thread_group *grp;
|
||||
u64 now = sched_clock();
|
||||
u64 now = walt_ktime_get_ns();
|
||||
|
||||
grp = lookup_related_thread_group(DEFAULT_CGROUP_COLOC_ID);
|
||||
|
||||
if (grp && grp->skip_min && grp->start_ts)
|
||||
return now - grp->start_ts;
|
||||
if (grp && grp->skip_min && grp->start_ktime_ts)
|
||||
return now - grp->start_ktime_ts;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -225,6 +225,8 @@ extern unsigned int sysctl_input_boost_freq[8];
|
|||
extern unsigned int sysctl_sched_boost_on_input;
|
||||
extern unsigned int sysctl_sched_user_hint;
|
||||
extern unsigned int sysctl_sched_conservative_pl;
|
||||
extern unsigned int sysctl_sched_hyst_min_coloc_ns;
|
||||
|
||||
#define WALT_MANY_WAKEUP_DEFAULT 1000
|
||||
extern unsigned int sysctl_sched_many_wakeup_threshold;
|
||||
extern unsigned int sysctl_walt_rtg_cfs_boost_prio;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user