All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: Venkatesh Pallipadi <venki@google.com>
Cc: Ingo Molnar <mingo@elte.hu>, "H. Peter Anvin" <hpa@zytor.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Balbir Singh <balbir@linux.vnet.ibm.com>,
	Martin Schwidefsky <schwidefsky@de.ibm.com>,
	linux-kernel@vger.kernel.org, Paul Turner <pjt@google.com>
Subject: Re: [PATCH 2/6] Add IRQ_TIME_ACCOUNTING, finer accounting of CPU irq time
Date: Sun, 19 Sep 2010 13:11:48 +0200	[thread overview]
Message-ID: <1284894708.2275.607.camel@laptop> (raw)
In-Reply-To: <1284688596-6731-3-git-send-email-venki@google.com>

On Thu, 2010-09-16 at 18:56 -0700, Venkatesh Pallipadi wrote:
> 
> Signed-off-by: Venkatesh Pallipadi <venki@google.com>
> ---
>  include/linux/hardirq.h |    2 +-
>  include/linux/sched.h   |   11 +++++++++++
>  kernel/sched.c          |   38 ++++++++++++++++++++++++++++++++++++++
>  3 files changed, 50 insertions(+), 1 deletions(-)
> 
> diff --git a/include/linux/hardirq.h b/include/linux/hardirq.h
> index ce22d09..bfafd29 100644
> --- a/include/linux/hardirq.h
> +++ b/include/linux/hardirq.h
> @@ -132,7 +132,7 @@ extern void synchronize_irq(unsigned int irq);
>  
>  struct task_struct;
>  
> -#ifndef CONFIG_VIRT_CPU_ACCOUNTING
> +#if !defined(CONFIG_VIRT_CPU_ACCOUNTING) && !defined(CONFIG_IRQ_TIME_ACCOUNTING)
>  static inline void account_system_vtime(struct task_struct *tsk)
>  {
>  }
> diff --git a/include/linux/sched.h b/include/linux/sched.h
> index 1e2a6db..dbb6808 100644
> --- a/include/linux/sched.h
> +++ b/include/linux/sched.h
> @@ -1826,6 +1826,17 @@ extern void sched_clock_idle_sleep_event(void);
>  extern void sched_clock_idle_wakeup_event(u64 delta_ns);
>  #endif
>  
> +#ifdef CONFIG_IRQ_TIME_ACCOUNTING
> +/*
> + * An i/f to runtime opt-in for irq time accounting based off of sched_clock.
> + * The reason for this explicit opt-in is not to have perf penalty with
> + * slow sched_clocks.
> + */
> +extern void enable_sched_clock_irqtime(void);
> +#else
> +static inline void enable_sched_clock_irqtime(void) {}
> +#endif
> +
>  extern unsigned long long
>  task_sched_runtime(struct task_struct *task);
>  extern unsigned long long thread_group_sched_runtime(struct task_struct *task);
> diff --git a/kernel/sched.c b/kernel/sched.c
> index ed09d4f..912d2de 100644
> --- a/kernel/sched.c
> +++ b/kernel/sched.c
> @@ -1917,6 +1917,44 @@ static void deactivate_task(struct rq *rq, struct task_struct *p, int flags)
>         dec_nr_running(rq);
>  }
>  
> +#ifdef CONFIG_IRQ_TIME_ACCOUNTING
> +
> +static DEFINE_PER_CPU(u64, cpu_hardirq_time);
> +static DEFINE_PER_CPU(u64, cpu_softirq_time);
> +
> +static DEFINE_PER_CPU(u64, irq_start_time);
> +static int sched_clock_irqtime;
> +
> +void enable_sched_clock_irqtime(void)
> +{
> +       sched_clock_irqtime = 1;
> +}
> +
> +void account_system_vtime(struct task_struct *tsk)
> +{
> +       unsigned long flags;
> +       int cpu;
> +       u64 now, delta;
> +
> +       if (!sched_clock_irqtime)
> +               return;
> +
> +       local_irq_save(flags);
> +
> +       cpu = task_cpu(tsk);

Can this ever be anything other can smp_processor_id() and current?

> +       now = sched_clock();

this should be using one of the kernel/sched_clock.c thingies, probably
local_clock(), or sched_clock_cpu(cpu).

> +       delta = now - per_cpu(irq_start_time, cpu);
> +       per_cpu(irq_start_time, cpu) = now;
> +       if (hardirq_count())
> +               per_cpu(cpu_hardirq_time, cpu) += delta;
> +       else if (softirq_count())
> +               per_cpu(cpu_softirq_time, cpu) += delta;
> +
> +       local_irq_restore(flags);
> +}

Also, this isn't a complete API, its very asymmetric, please cure that.

  reply	other threads:[~2010-09-19 11:12 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-17  1:56 [PATCH 0/6] Proper kernel irq time accounting Venkatesh Pallipadi
2010-09-17  1:56 ` [PATCH 1/6] Consolidate account_system_vtime extern declaration Venkatesh Pallipadi
2010-09-17  1:56 ` [PATCH 2/6] Add IRQ_TIME_ACCOUNTING, finer accounting of CPU irq time Venkatesh Pallipadi
2010-09-19 11:11   ` Peter Zijlstra [this message]
2010-09-20 17:13     ` Venkatesh Pallipadi
2010-09-20 17:23       ` Peter Zijlstra
2010-09-19 11:21   ` Peter Zijlstra
2010-09-19 11:42     ` Peter Zijlstra
2010-09-19 12:01     ` Peter Zijlstra
2010-09-20  7:27       ` Martin Schwidefsky
2010-09-20  9:27         ` Peter Zijlstra
2010-09-20 17:16           ` Venkatesh Pallipadi
2010-09-20 17:26             ` Peter Zijlstra
2010-09-27 20:35               ` [PATCH] si time accounting accounts bh_disable'd time to si Venkatesh Pallipadi
2010-09-27 20:53                 ` Eric Dumazet
2010-09-27 21:11                   ` Venkatesh Pallipadi
2010-09-27 21:16                     ` Eric Dumazet
2010-09-30 11:17                 ` Peter Zijlstra
2010-09-17  1:56 ` [PATCH 3/6] x86: Add IRQ_TIME_ACCOUNTING in x86 Venkatesh Pallipadi
2010-09-17  1:56 ` [PATCH 4/6] sched: Do not account irq time to current task Venkatesh Pallipadi
2010-09-19 11:28   ` Peter Zijlstra
2010-09-20 17:33     ` Venkatesh Pallipadi
2010-09-20 17:38       ` Peter Zijlstra
2010-09-20 17:40         ` Venkatesh Pallipadi
2010-09-17  1:56 ` [PATCH 5/6] sched: Remove irq time from available CPU power Venkatesh Pallipadi
2010-09-19 11:31   ` Peter Zijlstra
2010-09-20 17:38     ` Venkatesh Pallipadi
2010-09-17  1:56 ` [PATCH 6/6] Export per cpu hardirq and softirq time in proc Venkatesh Pallipadi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1284894708.2275.607.camel@laptop \
    --to=peterz@infradead.org \
    --cc=balbir@linux.vnet.ibm.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=pjt@google.com \
    --cc=schwidefsky@de.ibm.com \
    --cc=tglx@linutronix.de \
    --cc=venki@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.