From: Ashwin Chaugule <ashwinc@codeaurora.org>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-kernel@vger.kernel.org, mingo@redhat.com
Subject: Re: [RFC] [PATCH 1/1] hrtimers: Cache next hrtimer
Date: Sun, 30 Aug 2009 02:06:57 -0400 [thread overview]
Message-ID: <4A9A1701.2070703@codeaurora.org> (raw)
In-Reply-To: <alpine.LFD.2.00.0908282005410.19335@localhost.localdomain>
Thomas Gleixner wrote:
> Hmm. I'd really like to know why that's behaving different.
>
> Usually there are only timers in the CLOCK_MONOTONIC base during
> boot. CLOCK_REALTIME base should be empty most of the time. If my
> theory is correct then the number of reprogram events is correct as
> well because base[MONOTONIC]->first is always the one which armed the
> timer.
>
>
>
Okay, I think I figured this out :)
I added some debug to find out how many timers are going to expire_next.
hrtimer_reprogram()
if (expires.tv64 == expires_next->tv64)
if (timer != next_hrtimer)
timer->realtime++;
(lazily reusing realtime here, coz we know its always zero otherwise ;) )
Now timer->realtime is very much non-zero :)
So, now base->first has already changed (leftmost node in the rb tree) and is
pointing to this new timer node which is also going to expire_next, but hasn't
changed the value of expire_next (we just returned 0).
Therefore, in remove_hrtimer()
+ if (base->first == &timer->node) {
+ base->first = rb_next(&timer->node);
+ /* Reprogram the clock event device. if enabled */
+ if (reprogram && hrtimer_hres_active()) {
+ expires = ktime_sub(hrtimer_get_expires(timer),
+ base->offset);
timer->node is going to point to the latest timer enqueued which is going
to expire_next.
With your latest patch, we will force reprogram, but the next node to arm
the timer will be needless, because, its expiry is equal to expires_next.
So, by having a pointer like next_hrtimer, helps to represent all the timers
that are going to expire next, and thats why timer->cache_hits was always less
than timer->total_count.IOW, we avoided re-programming the device, if the
next timer was going to expire at the same time as the one we just removed.
Thoughts ?
Cheers,
Ashwin
next prev parent reply other threads:[~2009-08-30 6:06 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-27 21:51 Ashwin Chaugule
2009-08-27 21:56 ` Ashwin Chaugule
2009-08-27 22:51 ` Thomas Gleixner
2009-08-27 23:09 ` Ashwin Chaugule
2009-08-27 23:16 ` Thomas Gleixner
2009-08-28 5:56 ` Ashwin Chaugule
2009-08-28 11:17 ` Thomas Gleixner
2009-08-28 16:34 ` Ashwin Chaugule
2009-08-28 18:19 ` Thomas Gleixner
2009-08-28 20:27 ` Ashwin Chaugule
2009-08-30 6:06 ` Ashwin Chaugule [this message]
2009-08-30 8:36 ` Thomas Gleixner
2009-08-31 4:17 ` Ashwin Chaugule
2009-08-31 7:08 ` Thomas Gleixner
2009-09-01 3:13 ` Ashwin Chaugule
2009-09-03 17:48 ` Ashwin Chaugule
2009-09-15 9:09 ` [tip:timers/core] hrtimer: Eliminate needless reprogramming of clock events device tip-bot for Ashwin Chaugule
2009-09-15 15:19 ` tip-bot for Ashwin Chaugule
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=4A9A1701.2070703@codeaurora.org \
--to=ashwinc@codeaurora.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.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: 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
Powered by JetHome