From: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> To: Thomas Gleixner <tglx@linutronix.de> Cc: Santosh Shilimkar <santosh.shilimkar@ti.com>, Jason Liu <liu.h.jason@gmail.com>, LKML <linux-kernel@vger.kernel.org>, "linux-arm-kernel@lists.infradead.org" <linux-arm-kernel@lists.infradead.org> Subject: Re: too many timer retries happen when do local timer swtich with broadcast timer Date: Fri, 22 Feb 2013 10:28:36 +0000 [thread overview] Message-ID: <20130222102836.GB12140@e102568-lin.cambridge.arm.com> (raw) In-Reply-To: <alpine.LFD.2.02.1302212214020.22263@ionos> On Thu, Feb 21, 2013 at 10:19:18PM +0000, Thomas Gleixner wrote: > On Thu, 21 Feb 2013, Santosh Shilimkar wrote: > > On Thursday 21 February 2013 07:18 PM, Thomas Gleixner wrote: > > > find below a completely untested patch, which should address that issue. > > > > > After looking at the thread, I tried to see the issue on OMAP and could > > see the same issue as Jason. > > That's interesting. We have the same issue on x86 since 2007 and > nobody noticed ever. It's basically the same problem there, but it > seems that on x86 getting out of those low power states is way slower > than the minimal reprogramming delta which is used to enforce the > local timer to fire after the wakeup. > > I'm still amazed that as Jason stated a 1us reprogramming delta is > sufficient to get this ping-pong going. I somehow doubt that, but > maybe ARM is really that fast :) It also depends on when the idle driver exits broadcast mode. Certainly if that's the last thing it does before enabling IRQs, that might help trigger the issue. I am still a bit sceptic myself too, and I take advantage of Thomas' knowledge on the subject, which is ways deeper than mine BTW, to ask a question. The thread started with a subject "too many retries...." and here I have a doubt. If the fix is not applied, on the CPU affine to the broadcast timer, it is _normal_ to have local timer retries, since the CPU is setting/forcing the local timer to fire after a min_delta_ns every time the expired event was local to the CPU affine to the broadcast timer. The problem, supposedly, is that the timer has not enough time (sorry for the mouthful) to expire(fire) before IRQs are disabled and the idle thread goes back to idle again. This means that we should notice a mismatch between the number of broadcast timer IRQs and local timer IRQs on the CPU affine to the broadcast timer IRQ (granted, we also have to take into account broadcast timer IRQs meant to service (through IPI) a local timer expired on a CPU which is not the one running the broadcast IRQ handler and "normal" local timer IRQs as well). I am not sure the sheer number of retries is a symptom of the problem happening, but I might well be mistaken so I am asking. For certain, with the fix applied, lots of duplicate IRQs on the CPU affine to the broadcast timer are eliminated, since the local timer is not reprogrammed anymore (before the fix, basically the broadcast timer was firing an IRQ that did nothing since the CPU was already out of broadcast mode by the time the broadcast handler was running, the real job was carried out in the local timer handler). > > > Your patch fixes the retries on both CPUs on my dual core machine. So > > you use my tested by if you need one. > > They are always welcome. > > > Tested-by: Santosh Shilimkar <santosh.shilimkar@ti.com> You can add mine too, we should fix the WARN_ON_ONCE mentioned in Santosh's reply. Tested-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
WARNING: multiple messages have this Message-ID (diff)
From: lorenzo.pieralisi@arm.com (Lorenzo Pieralisi) To: linux-arm-kernel@lists.infradead.org Subject: too many timer retries happen when do local timer swtich with broadcast timer Date: Fri, 22 Feb 2013 10:28:36 +0000 [thread overview] Message-ID: <20130222102836.GB12140@e102568-lin.cambridge.arm.com> (raw) In-Reply-To: <alpine.LFD.2.02.1302212214020.22263@ionos> On Thu, Feb 21, 2013 at 10:19:18PM +0000, Thomas Gleixner wrote: > On Thu, 21 Feb 2013, Santosh Shilimkar wrote: > > On Thursday 21 February 2013 07:18 PM, Thomas Gleixner wrote: > > > find below a completely untested patch, which should address that issue. > > > > > After looking at the thread, I tried to see the issue on OMAP and could > > see the same issue as Jason. > > That's interesting. We have the same issue on x86 since 2007 and > nobody noticed ever. It's basically the same problem there, but it > seems that on x86 getting out of those low power states is way slower > than the minimal reprogramming delta which is used to enforce the > local timer to fire after the wakeup. > > I'm still amazed that as Jason stated a 1us reprogramming delta is > sufficient to get this ping-pong going. I somehow doubt that, but > maybe ARM is really that fast :) It also depends on when the idle driver exits broadcast mode. Certainly if that's the last thing it does before enabling IRQs, that might help trigger the issue. I am still a bit sceptic myself too, and I take advantage of Thomas' knowledge on the subject, which is ways deeper than mine BTW, to ask a question. The thread started with a subject "too many retries...." and here I have a doubt. If the fix is not applied, on the CPU affine to the broadcast timer, it is _normal_ to have local timer retries, since the CPU is setting/forcing the local timer to fire after a min_delta_ns every time the expired event was local to the CPU affine to the broadcast timer. The problem, supposedly, is that the timer has not enough time (sorry for the mouthful) to expire(fire) before IRQs are disabled and the idle thread goes back to idle again. This means that we should notice a mismatch between the number of broadcast timer IRQs and local timer IRQs on the CPU affine to the broadcast timer IRQ (granted, we also have to take into account broadcast timer IRQs meant to service (through IPI) a local timer expired on a CPU which is not the one running the broadcast IRQ handler and "normal" local timer IRQs as well). I am not sure the sheer number of retries is a symptom of the problem happening, but I might well be mistaken so I am asking. For certain, with the fix applied, lots of duplicate IRQs on the CPU affine to the broadcast timer are eliminated, since the local timer is not reprogrammed anymore (before the fix, basically the broadcast timer was firing an IRQ that did nothing since the CPU was already out of broadcast mode by the time the broadcast handler was running, the real job was carried out in the local timer handler). > > > Your patch fixes the retries on both CPUs on my dual core machine. So > > you use my tested by if you need one. > > They are always welcome. > > > Tested-by: Santosh Shilimkar <santosh.shilimkar@ti.com> You can add mine too, we should fix the WARN_ON_ONCE mentioned in Santosh's reply. Tested-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
next prev parent reply other threads:[~2013-02-22 10:28 UTC|newest] Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top 2013-02-20 11:16 too many timer retries happen when do local timer swtich with broadcast timer Jason Liu 2013-02-20 11:16 ` Jason Liu 2013-02-20 13:33 ` Thomas Gleixner 2013-02-20 13:33 ` Thomas Gleixner 2013-02-21 6:16 ` Jason Liu 2013-02-21 6:16 ` Jason Liu 2013-02-21 9:36 ` Thomas Gleixner 2013-02-21 9:36 ` Thomas Gleixner 2013-02-21 10:50 ` Jason Liu 2013-02-21 10:50 ` Jason Liu 2013-02-21 13:48 ` Thomas Gleixner 2013-02-21 13:48 ` Thomas Gleixner 2013-02-21 15:12 ` Santosh Shilimkar 2013-02-21 15:12 ` Santosh Shilimkar 2013-02-21 22:19 ` Thomas Gleixner 2013-02-21 22:19 ` Thomas Gleixner 2013-02-22 10:07 ` Santosh Shilimkar 2013-02-22 10:07 ` Santosh Shilimkar 2013-02-22 10:24 ` Thomas Gleixner 2013-02-22 10:24 ` Thomas Gleixner 2013-02-22 10:30 ` Santosh Shilimkar 2013-02-22 10:30 ` Santosh Shilimkar 2013-02-22 10:31 ` Lorenzo Pieralisi 2013-02-22 10:31 ` Lorenzo Pieralisi 2013-02-22 11:02 ` Santosh Shilimkar 2013-02-22 11:02 ` Santosh Shilimkar 2013-02-22 12:07 ` Thomas Gleixner 2013-02-22 12:07 ` Thomas Gleixner 2013-02-22 14:48 ` Lorenzo Pieralisi 2013-02-22 14:48 ` Lorenzo Pieralisi 2013-02-22 15:03 ` Thomas Gleixner 2013-02-22 15:03 ` Thomas Gleixner 2013-02-22 15:26 ` Lorenzo Pieralisi 2013-02-22 15:26 ` Lorenzo Pieralisi 2013-02-22 18:52 ` Thomas Gleixner 2013-02-22 18:52 ` Thomas Gleixner 2013-02-25 6:12 ` Santosh Shilimkar 2013-02-25 6:12 ` Santosh Shilimkar 2013-02-25 6:38 ` Jason Liu 2013-02-25 6:38 ` Jason Liu 2013-02-25 13:34 ` Lorenzo Pieralisi 2013-02-25 13:34 ` Lorenzo Pieralisi 2013-02-22 10:28 ` Lorenzo Pieralisi [this message] 2013-02-22 10:28 ` Lorenzo Pieralisi 2013-02-22 10:26 ` Jason Liu 2013-02-22 10:26 ` Jason Liu 2013-02-21 10:35 ` Lorenzo Pieralisi 2013-02-21 10:35 ` Lorenzo Pieralisi 2013-02-21 10:49 ` Jason Liu 2013-02-21 10:49 ` Jason Liu
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=20130222102836.GB12140@e102568-lin.cambridge.arm.com \ --to=lorenzo.pieralisi@arm.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=liu.h.jason@gmail.com \ --cc=santosh.shilimkar@ti.com \ --cc=tglx@linutronix.de \ /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: linkBe 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.