mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 19:56:18 +00:00
schedstat: consolidate per-task cpu runtime stats
Impact: simplify code When we turn on CONFIG_SCHEDSTATS, per-task cpu runtime is accumulated twice. Once in task->se.sum_exec_runtime and once in sched_info.cpu_time. These two stats are exactly the same. Given that task->se.sum_exec_runtime is always accumulated by the core scheduler, sched_info can reuse that data instead of duplicate the accounting. Signed-off-by: Ken Chen <kenchen@google.com> Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
e9515c3c9f
commit
9c2c48020e
5 changed files with 7 additions and 7 deletions
|
@ -347,7 +347,7 @@ static int proc_pid_wchan(struct task_struct *task, char *buffer)
|
||||||
static int proc_pid_schedstat(struct task_struct *task, char *buffer)
|
static int proc_pid_schedstat(struct task_struct *task, char *buffer)
|
||||||
{
|
{
|
||||||
return sprintf(buffer, "%llu %llu %lu\n",
|
return sprintf(buffer, "%llu %llu %lu\n",
|
||||||
task->sched_info.cpu_time,
|
task->se.sum_exec_runtime,
|
||||||
task->sched_info.run_delay,
|
task->sched_info.run_delay,
|
||||||
task->sched_info.pcount);
|
task->sched_info.pcount);
|
||||||
}
|
}
|
||||||
|
|
|
@ -670,8 +670,7 @@ struct reclaim_state;
|
||||||
struct sched_info {
|
struct sched_info {
|
||||||
/* cumulative counters */
|
/* cumulative counters */
|
||||||
unsigned long pcount; /* # of times run on this cpu */
|
unsigned long pcount; /* # of times run on this cpu */
|
||||||
unsigned long long cpu_time, /* time spent on the cpu */
|
unsigned long long run_delay; /* time spent waiting on a runqueue */
|
||||||
run_delay; /* time spent waiting on a runqueue */
|
|
||||||
|
|
||||||
/* timestamps */
|
/* timestamps */
|
||||||
unsigned long long last_arrival,/* when we last ran on a cpu */
|
unsigned long long last_arrival,/* when we last ran on a cpu */
|
||||||
|
|
|
@ -127,7 +127,7 @@ int __delayacct_add_tsk(struct taskstats *d, struct task_struct *tsk)
|
||||||
*/
|
*/
|
||||||
t1 = tsk->sched_info.pcount;
|
t1 = tsk->sched_info.pcount;
|
||||||
t2 = tsk->sched_info.run_delay;
|
t2 = tsk->sched_info.run_delay;
|
||||||
t3 = tsk->sched_info.cpu_time;
|
t3 = tsk->se.sum_exec_runtime;
|
||||||
|
|
||||||
d->cpu_count += t1;
|
d->cpu_count += t1;
|
||||||
|
|
||||||
|
|
|
@ -596,6 +596,8 @@ struct rq {
|
||||||
#ifdef CONFIG_SCHEDSTATS
|
#ifdef CONFIG_SCHEDSTATS
|
||||||
/* latency stats */
|
/* latency stats */
|
||||||
struct sched_info rq_sched_info;
|
struct sched_info rq_sched_info;
|
||||||
|
unsigned long long rq_cpu_time;
|
||||||
|
/* could above be rq->cfs_rq.exec_clock + rq->rt_rq.rt_runtime ? */
|
||||||
|
|
||||||
/* sys_sched_yield() stats */
|
/* sys_sched_yield() stats */
|
||||||
unsigned int yld_exp_empty;
|
unsigned int yld_exp_empty;
|
||||||
|
|
|
@ -31,7 +31,7 @@ static int show_schedstat(struct seq_file *seq, void *v)
|
||||||
rq->yld_act_empty, rq->yld_exp_empty, rq->yld_count,
|
rq->yld_act_empty, rq->yld_exp_empty, rq->yld_count,
|
||||||
rq->sched_switch, rq->sched_count, rq->sched_goidle,
|
rq->sched_switch, rq->sched_count, rq->sched_goidle,
|
||||||
rq->ttwu_count, rq->ttwu_local,
|
rq->ttwu_count, rq->ttwu_local,
|
||||||
rq->rq_sched_info.cpu_time,
|
rq->rq_cpu_time,
|
||||||
rq->rq_sched_info.run_delay, rq->rq_sched_info.pcount);
|
rq->rq_sched_info.run_delay, rq->rq_sched_info.pcount);
|
||||||
|
|
||||||
seq_printf(seq, "\n");
|
seq_printf(seq, "\n");
|
||||||
|
@ -123,7 +123,7 @@ static inline void
|
||||||
rq_sched_info_depart(struct rq *rq, unsigned long long delta)
|
rq_sched_info_depart(struct rq *rq, unsigned long long delta)
|
||||||
{
|
{
|
||||||
if (rq)
|
if (rq)
|
||||||
rq->rq_sched_info.cpu_time += delta;
|
rq->rq_cpu_time += delta;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
|
@ -236,7 +236,6 @@ static inline void sched_info_depart(struct task_struct *t)
|
||||||
unsigned long long delta = task_rq(t)->clock -
|
unsigned long long delta = task_rq(t)->clock -
|
||||||
t->sched_info.last_arrival;
|
t->sched_info.last_arrival;
|
||||||
|
|
||||||
t->sched_info.cpu_time += delta;
|
|
||||||
rq_sched_info_depart(task_rq(t), delta);
|
rq_sched_info_depart(task_rq(t), delta);
|
||||||
|
|
||||||
if (t->state == TASK_RUNNING)
|
if (t->state == TASK_RUNNING)
|
||||||
|
|
Loading…
Reference in a new issue