aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/sched.h
diff options
context:
space:
mode:
authorVenkatesh Pallipadi <venki@google.com>2010-10-04 20:03:19 -0400
committerIngo Molnar <mingo@elte.hu>2010-10-18 14:52:24 -0400
commitb52bfee445d315549d41eacf2fa7c156e7d153d5 (patch)
tree740f3aa24e2afad42772a662ceb460c555003c0f /include/linux/sched.h
parent6cdd5199daf0cb7b0fcc8dca941af08492612887 (diff)
sched: Add IRQ_TIME_ACCOUNTING, finer accounting of irq time
s390/powerpc/ia64 have support for CONFIG_VIRT_CPU_ACCOUNTING which does the fine granularity accounting of user, system, hardirq, softirq times. Adding that option on archs like x86 will be challenging however, given the state of TSC reliability on various platforms and also the overhead it will add in syscall entry exit. Instead, add a lighter variant that only does finer accounting of hardirq and softirq times, providing precise irq times (instead of timer tick based samples). This accounting is added with a new config option CONFIG_IRQ_TIME_ACCOUNTING so that there won't be any overhead for users not interested in paying the perf penalty. This accounting is based on sched_clock, with the code being generic. So, other archs may find it useful as well. This patch just adds the core logic and does not enable this logic yet. Signed-off-by: Venkatesh Pallipadi <venki@google.com> Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> LKML-Reference: <1286237003-12406-5-git-send-email-venki@google.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include/linux/sched.h')
-rw-r--r--include/linux/sched.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h
index aca0ce675939..2cca9a92f5e5 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -1826,6 +1826,19 @@ extern void sched_clock_idle_sleep_event(void);
1826extern void sched_clock_idle_wakeup_event(u64 delta_ns); 1826extern void sched_clock_idle_wakeup_event(u64 delta_ns);
1827#endif 1827#endif
1828 1828
1829#ifdef CONFIG_IRQ_TIME_ACCOUNTING
1830/*
1831 * An i/f to runtime opt-in for irq time accounting based off of sched_clock.
1832 * The reason for this explicit opt-in is not to have perf penalty with
1833 * slow sched_clocks.
1834 */
1835extern void enable_sched_clock_irqtime(void);
1836extern void disable_sched_clock_irqtime(void);
1837#else
1838static inline void enable_sched_clock_irqtime(void) {}
1839static inline void disable_sched_clock_irqtime(void) {}
1840#endif
1841
1829extern unsigned long long 1842extern unsigned long long
1830task_sched_runtime(struct task_struct *task); 1843task_sched_runtime(struct task_struct *task);
1831extern unsigned long long thread_group_sched_runtime(struct task_struct *task); 1844extern unsigned long long thread_group_sched_runtime(struct task_struct *task);