Loading include/trace/events/sched.h +50 −0 Original line number Diff line number Diff line Loading @@ -245,6 +245,56 @@ TRACE_EVENT(sched_cpu_hotplug, __entry->status ? "online" : "offline", __entry->error) ); /* * Tracepoint for load balancing: */ #if NR_CPUS > 32 #error "Unsupported NR_CPUS for lb tracepoint." #endif TRACE_EVENT(sched_load_balance, TP_PROTO(int cpu, enum cpu_idle_type idle, int balance, unsigned long group_mask, int busiest_nr_running, unsigned long imbalance, unsigned int env_flags, int ld_moved, unsigned int balance_interval), TP_ARGS(cpu, idle, balance, group_mask, busiest_nr_running, imbalance, env_flags, ld_moved, balance_interval), TP_STRUCT__entry( __field( int, cpu) __field( enum cpu_idle_type, idle) __field( int, balance) __field( unsigned long, group_mask) __field( int, busiest_nr_running) __field( unsigned long, imbalance) __field( unsigned int, env_flags) __field( int, ld_moved) __field( unsigned int, balance_interval) ), TP_fast_assign( __entry->cpu = cpu; __entry->idle = idle; __entry->balance = balance; __entry->group_mask = group_mask; __entry->busiest_nr_running = busiest_nr_running; __entry->imbalance = imbalance; __entry->env_flags = env_flags; __entry->ld_moved = ld_moved; __entry->balance_interval = balance_interval; ), TP_printk("cpu=%d state=%s balance=%d group=%#lx busy_nr=%d imbalance=%ld flags=%#x ld_moved=%d bal_int=%d", __entry->cpu, __entry->idle == CPU_IDLE ? "idle" : (__entry->idle == CPU_NEWLY_IDLE ? "newly_idle" : "busy"), __entry->balance, __entry->group_mask, __entry->busiest_nr_running, __entry->imbalance, __entry->env_flags, __entry->ld_moved, __entry->balance_interval) ); DECLARE_EVENT_CLASS(sched_process_template, TP_PROTO(struct task_struct *p), Loading kernel/sched/fair.c +6 −1 Original line number Diff line number Diff line Loading @@ -5027,7 +5027,7 @@ static int load_balance(int this_cpu, struct rq *this_rq, { int ld_moved, cur_ld_moved, active_balance = 0; struct sched_group *group; struct rq *busiest; struct rq *busiest = NULL; unsigned long flags; struct cpumask *cpus = __get_cpu_var(load_balance_mask); Loading Loading @@ -5249,6 +5249,11 @@ out_one_pinned: ld_moved = 0; out: trace_sched_load_balance(this_cpu, idle, *balance, group ? group->cpumask[0] : 0, busiest ? busiest->nr_running : 0, env.imbalance, env.flags, ld_moved, sd->balance_interval); return ld_moved; } Loading Loading
include/trace/events/sched.h +50 −0 Original line number Diff line number Diff line Loading @@ -245,6 +245,56 @@ TRACE_EVENT(sched_cpu_hotplug, __entry->status ? "online" : "offline", __entry->error) ); /* * Tracepoint for load balancing: */ #if NR_CPUS > 32 #error "Unsupported NR_CPUS for lb tracepoint." #endif TRACE_EVENT(sched_load_balance, TP_PROTO(int cpu, enum cpu_idle_type idle, int balance, unsigned long group_mask, int busiest_nr_running, unsigned long imbalance, unsigned int env_flags, int ld_moved, unsigned int balance_interval), TP_ARGS(cpu, idle, balance, group_mask, busiest_nr_running, imbalance, env_flags, ld_moved, balance_interval), TP_STRUCT__entry( __field( int, cpu) __field( enum cpu_idle_type, idle) __field( int, balance) __field( unsigned long, group_mask) __field( int, busiest_nr_running) __field( unsigned long, imbalance) __field( unsigned int, env_flags) __field( int, ld_moved) __field( unsigned int, balance_interval) ), TP_fast_assign( __entry->cpu = cpu; __entry->idle = idle; __entry->balance = balance; __entry->group_mask = group_mask; __entry->busiest_nr_running = busiest_nr_running; __entry->imbalance = imbalance; __entry->env_flags = env_flags; __entry->ld_moved = ld_moved; __entry->balance_interval = balance_interval; ), TP_printk("cpu=%d state=%s balance=%d group=%#lx busy_nr=%d imbalance=%ld flags=%#x ld_moved=%d bal_int=%d", __entry->cpu, __entry->idle == CPU_IDLE ? "idle" : (__entry->idle == CPU_NEWLY_IDLE ? "newly_idle" : "busy"), __entry->balance, __entry->group_mask, __entry->busiest_nr_running, __entry->imbalance, __entry->env_flags, __entry->ld_moved, __entry->balance_interval) ); DECLARE_EVENT_CLASS(sched_process_template, TP_PROTO(struct task_struct *p), Loading
kernel/sched/fair.c +6 −1 Original line number Diff line number Diff line Loading @@ -5027,7 +5027,7 @@ static int load_balance(int this_cpu, struct rq *this_rq, { int ld_moved, cur_ld_moved, active_balance = 0; struct sched_group *group; struct rq *busiest; struct rq *busiest = NULL; unsigned long flags; struct cpumask *cpus = __get_cpu_var(load_balance_mask); Loading Loading @@ -5249,6 +5249,11 @@ out_one_pinned: ld_moved = 0; out: trace_sched_load_balance(this_cpu, idle, *balance, group ? group->cpumask[0] : 0, busiest ? busiest->nr_running : 0, env.imbalance, env.flags, ld_moved, sd->balance_interval); return ld_moved; } Loading