scheduler_tick()

 

 

 

 

trigger_load_balance()

 

 

 

 

<in softirq context>
run_rebalance_domains()
pick_next_task → pick_next_task_fair()
_do_fork()
wake_up_new_task ()
do_execveat_common()
sched_exec()
try_to_wake_up()

nohz_idle_balance()

rebalance_domains()

idle_balance()
select_task_rq → select_task_rq_fair()load_balance()

struct sched_group = \

find_idlest_group();

...

 

int cpu = find_idlest_cpu();

struct sched_group = \

find_busiest_group();

...

 

struct rq *busiest = \

find_busiest_queue();