diff options
author | Peter Zijlstra <a.p.zijlstra@chello.nl> | 2009-07-23 14:13:26 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-09-02 03:12:18 -0400 |
commit | 768d0c27226e6587cad2fcf543f9711da3f3774e (patch) | |
tree | 0e299fb34584ff3c5c59f3ed95da70aab372dbc7 /kernel/sched_fair.c | |
parent | 8f0dfc34e9b323a028c2ec41abb7e9de477b7a94 (diff) |
sched: Add wait, sleep and iowait accounting tracepoints
Add 3 schedstat tracepoints to help account for wait-time,
sleep-time and iowait-time.
They can also be used as a perf-counter source to profile tasks
on these clocks.
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Arjan van de Ven <arjan@linux.intel.com>
LKML-Reference: <new-submission>
[ build fix for the !CONFIG_SCHEDSTATS case ]
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/sched_fair.c')
-rw-r--r-- | kernel/sched_fair.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c index 471fa281f5e0..2ff850f90d1e 100644 --- a/kernel/sched_fair.c +++ b/kernel/sched_fair.c | |||
@@ -546,6 +546,13 @@ update_stats_wait_end(struct cfs_rq *cfs_rq, struct sched_entity *se) | |||
546 | schedstat_set(se->wait_sum, se->wait_sum + | 546 | schedstat_set(se->wait_sum, se->wait_sum + |
547 | rq_of(cfs_rq)->clock - se->wait_start); | 547 | rq_of(cfs_rq)->clock - se->wait_start); |
548 | schedstat_set(se->wait_start, 0); | 548 | schedstat_set(se->wait_start, 0); |
549 | |||
550 | #ifdef CONFIG_SCHEDSTATS | ||
551 | if (entity_is_task(se)) { | ||
552 | trace_sched_stat_wait(task_of(se), | ||
553 | rq_of(cfs_rq)->clock - se->wait_start); | ||
554 | } | ||
555 | #endif | ||
549 | } | 556 | } |
550 | 557 | ||
551 | static inline void | 558 | static inline void |
@@ -636,8 +643,10 @@ static void enqueue_sleeper(struct cfs_rq *cfs_rq, struct sched_entity *se) | |||
636 | se->sleep_start = 0; | 643 | se->sleep_start = 0; |
637 | se->sum_sleep_runtime += delta; | 644 | se->sum_sleep_runtime += delta; |
638 | 645 | ||
639 | if (tsk) | 646 | if (tsk) { |
640 | account_scheduler_latency(tsk, delta >> 10, 1); | 647 | account_scheduler_latency(tsk, delta >> 10, 1); |
648 | trace_sched_stat_sleep(tsk, delta); | ||
649 | } | ||
641 | } | 650 | } |
642 | if (se->block_start) { | 651 | if (se->block_start) { |
643 | u64 delta = rq_of(cfs_rq)->clock - se->block_start; | 652 | u64 delta = rq_of(cfs_rq)->clock - se->block_start; |
@@ -655,6 +664,7 @@ static void enqueue_sleeper(struct cfs_rq *cfs_rq, struct sched_entity *se) | |||
655 | if (tsk->in_iowait) { | 664 | if (tsk->in_iowait) { |
656 | se->iowait_sum += delta; | 665 | se->iowait_sum += delta; |
657 | se->iowait_count++; | 666 | se->iowait_count++; |
667 | trace_sched_stat_iowait(tsk, delta); | ||
658 | } | 668 | } |
659 | 669 | ||
660 | /* | 670 | /* |