mirror of
https://github.com/team-infusion-developers/android_kernel_samsung_msm8976.git
synced 2024-11-07 04:09:21 +00:00
tracing/sched: Track per-cpu rt and non-rt cpu_load.
Add a new tracepoint trace_sched_enq_deq_task to track per-cpu rt and non-rt cpu_load during task enqueue and dequeue. This is useful to visualize and compare the load on different cpus and also to understand how balanced the load is at any point of time. Note: We only print cpu_load[0] because we only care about the most recent load history for tracking load balancer effectiveness. Change-Id: I46f0bb84e81652099ed5edf8c2686c70c8b8330c Signed-off-by: Arun Bharadwaj <abharadw@codeaurora.org>
This commit is contained in:
parent
5128a0e3a2
commit
241bfbb3ba
2 changed files with 40 additions and 0 deletions
|
@ -50,6 +50,44 @@ TRACE_EVENT(sched_kthread_stop_ret,
|
|||
TP_printk("ret=%d", __entry->ret)
|
||||
);
|
||||
|
||||
/*
|
||||
* Tracepoint for task enqueue/dequeue:
|
||||
*/
|
||||
TRACE_EVENT(sched_enq_deq_task,
|
||||
|
||||
TP_PROTO(struct task_struct *p, int enqueue),
|
||||
|
||||
TP_ARGS(p, enqueue),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__array( char, comm, TASK_COMM_LEN )
|
||||
__field( pid_t, pid )
|
||||
__field( int, prio )
|
||||
__field( int, cpu )
|
||||
__field( int, enqueue )
|
||||
__field(unsigned int, nr_running )
|
||||
__field(unsigned long, cpu_load )
|
||||
__field(unsigned int, rt_nr_running )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
|
||||
__entry->pid = p->pid;
|
||||
__entry->prio = p->prio;
|
||||
__entry->cpu = task_cpu(p);
|
||||
__entry->enqueue = enqueue;
|
||||
__entry->nr_running = task_rq(p)->nr_running;
|
||||
__entry->cpu_load = task_rq(p)->cpu_load[0];
|
||||
__entry->rt_nr_running = task_rq(p)->rt.rt_nr_running;
|
||||
),
|
||||
|
||||
TP_printk("cpu=%d %s comm=%s pid=%d prio=%d nr_running=%u cpu_load=%lu rt_nr_running=%u",
|
||||
__entry->cpu, __entry->enqueue ? "enqueue" : "dequeue",
|
||||
__entry->comm, __entry->pid,
|
||||
__entry->prio, __entry->nr_running,
|
||||
__entry->cpu_load, __entry->rt_nr_running)
|
||||
);
|
||||
|
||||
/*
|
||||
* Tracepoint for waking up a task:
|
||||
*/
|
||||
|
|
|
@ -777,6 +777,7 @@ static void enqueue_task(struct rq *rq, struct task_struct *p, int flags)
|
|||
update_rq_clock(rq);
|
||||
sched_info_queued(p);
|
||||
p->sched_class->enqueue_task(rq, p, flags);
|
||||
trace_sched_enq_deq_task(p, 1);
|
||||
}
|
||||
|
||||
static void dequeue_task(struct rq *rq, struct task_struct *p, int flags)
|
||||
|
@ -784,6 +785,7 @@ static void dequeue_task(struct rq *rq, struct task_struct *p, int flags)
|
|||
update_rq_clock(rq);
|
||||
sched_info_dequeued(p);
|
||||
p->sched_class->dequeue_task(rq, p, flags);
|
||||
trace_sched_enq_deq_task(p, 0);
|
||||
}
|
||||
|
||||
void activate_task(struct rq *rq, struct task_struct *p, int flags)
|
||||
|
|
Loading…
Reference in a new issue