From: Eric Dumazet <eric.dumazet@gmail.com>
To: Venkatesh Pallipadi <venki@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
Martin Schwidefsky <schwidefsky@de.ibm.com>,
Ingo Molnar <mingo@elte.hu>, "H. Peter Anvin" <hpa@zytor.com>,
Thomas Gleixner <tglx@linutronix.de>,
Balbir Singh <balbir@linux.vnet.ibm.com>,
linux-kernel@vger.kernel.org, Paul Turner <pjt@google.com>
Subject: Re: [PATCH] si time accounting accounts bh_disable'd time to si
Date: Mon, 27 Sep 2010 22:53:25 +0200 [thread overview]
Message-ID: <1285620805.2512.128.camel@edumazet-laptop> (raw)
In-Reply-To: <1285619753-10892-1-git-send-email-venki@google.com>
Le lundi 27 septembre 2010 à 13:35 -0700, Venkatesh Pallipadi a écrit :
> >> >> > You still do have the problem with local_bh_disable() though, since you
> >> >> > cannot distinguish between having bh disabled and processing softirq.
> >> >> >
> >> >> > So a hardirq that hits while you have bh disabled will inflate your
> >> >> > softirq time.
>
> >> >> Hmm, that bug is valid for CONFIG_VIRT_CPU_ACCOUNTING=y as well.
> >> >
> >> > And nobody ever noticed?
> >> >
> >> Yes. I inherited the API from VIRT_CPU_ACCOUNTING along with this
> >> local_bh_disable bug. Agree that we need one extra bit to handle this
> >> case. I will take a stab at fixing this along with refresh of this
> >> patchset if no one else has beaten me to it until then.
> >
> >Make sure to only fix the softirq processing on the hardirq tail, not
> > the ksoftirqd one :-)
>
> softirq processing from hardirq tail and ksoftirqd are currently
> handled in the same way and I didn't see any issues changing both of
> them. Am I missing something?
>
> Here's the patch I have for this.
>
> [PATCH] si time accounting accounts bh_disable'd time to si
>
> Peter Zijlstra found a bug in the way softirq time is accounted in
> VIRT_CPU_ACCOUNTING on this thread.
> http://lkml.indiana.edu/hypermail//linux/kernel/1009.2/01366.html
>
> The problem is, softirq processing uses local_bh_disable internally and there
> would be no way later in the flow to differentiate between whether softirq is
> being processed or is it just that bh has been disabled. So, a hardirq when bh
> id disabled results in time being wrongly accounted for softirq.
>
> Looking at the code a bit more, the problem exists in !VIRT_CPU_ACCOUNTING
> as well. As account_system_time() in normal tick based accouting also uses
> softirq_count, which will be set when not in softirq with bh disabled.
>
> Peter also suggested solution of using 2 * SOFTIRQ_OFFSET as irq count
> for local_bh_{disable,enable} and using just SOFTIRQ_OFFSET while softirq
> processing. The patch below does that and adds API in_serving_softirq() which
> returns whether we are currently processing softirq or not.
>
> Also changes one of the usages of softirq_count in net/sched/cls_cgroup.c
> to in_serving_softirq.
>
> Looks like many usages of in_softirq really want in_serving_softirq. Those
> changes can be made individually on a case by case basis.
>
> Signed-off-by: Venkatesh Pallipadi <venki@google.com>
> ---
> include/linux/hardirq.h | 3 ++
> include/linux/sched.h | 2 +-
> kernel/sched.c | 2 +-
> kernel/softirq.c | 51 +++++++++++++++++++++++++++++++---------------
> net/sched/cls_cgroup.c | 2 +-
> 5 files changed, 40 insertions(+), 20 deletions(-)
>
> diff --git a/include/linux/hardirq.h b/include/linux/hardirq.h
> index d5b3876..1c736ae 100644
> --- a/include/linux/hardirq.h
> +++ b/include/linux/hardirq.h
> @@ -82,10 +82,13 @@
> /*
> * Are we doing bottom half or hardware interrupt processing?
> * Are we in a softirq context? Interrupt context?
> + * in_softirq answers - are we currently processing softirq or have bh disabled?
> + * in_serving_softirq answers - are we currently processing softirq?
> */
> #define in_irq() (hardirq_count())
> #define in_softirq() (softirq_count())
> #define in_interrupt() (irq_count())
> +#define in_serving_softirq() (softirq_count() == SOFTIRQ_OFFSET)
>
But softirq handlers sometime call functions that might disable bh
again. It would be good to not switch softirq time to system time ;)
Shouldnt we reserve a bit (high order bit out of 8) instead ?
* PREEMPT_MASK: 0x000000ff
* SOFTIRQ_MASK: 0x0000ff00
* SERVING_SOFTIRQ: 0x00008000
* HARDIRQ_MASK: 0x03ff0000
* NMI_MASK: 0x04000000
next prev parent reply other threads:[~2010-09-27 20:53 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
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 [this message]
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=1285620805.2512.128.camel@edumazet-laptop \
--to=eric.dumazet@gmail.com \
--cc=balbir@linux.vnet.ibm.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=peterz@infradead.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®