From: john stultz <johnstul@us.ibm.com>
To: Daniel Walker <dwalker@fifo99.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>,
linux-kernel@vger.kernel.org, Ingo Molnar <mingo@elte.hu>,
Thomas Gleixner <tglx@linutronix.de>
Subject: Re: [RFC][patch 1/5] move clock source related code to clocksource.c
Date: Tue, 21 Jul 2009 15:00:07 -0700 [thread overview]
Message-ID: <1248213607.3298.107.camel@localhost> (raw)
In-Reply-To: <1248205851.14209.777.camel@desktop>
On Tue, 2009-07-21 at 12:50 -0700, Daniel Walker wrote:
> On Tue, 2009-07-21 at 21:17 +0200, Martin Schwidefsky wrote:
> > plain text document attachment (clocksource-move.diff)
> > From: Martin Schwidefsky <schwidefsky@de.ibm.com>
> >
> > Move clock source related code from timekeeping.c to clocksource.c
> > where they belong. The selected clocks source "clock" is now defined
> > in clocksource.c and clocksource_init is added to set up the initial
> > clock.
>
> The problem is most (if not all) the code your moving is actually time
> keeping code .. The reason it seems like clocksource code is cause John
> wasn't very choosy about which structure he added variables too .. So
> really this clean up needs to be in reverse, remove all the timekeeping
> code from the clocksource code.
Not so much that I wasn't very choosy, but that I had to pick my battles
there. At the time, Roman claimed keeping the timekeeping values in the
clocksource (instead of global to timekeeping.c) actually produced
better code.
I do agree with Daniel's main point, that the patch mixes the layers I
tried to establish in the design.
Clocksource: Abstracts out a hardware counter.
NTP: Provides the reference time.
Timekeeping: Manages accumulating the clocksource, and combining input
from ntp's reference time to steer the hardware frequency.
Unfortunately, many timekeeping values got stuffed into the struct
clocksource. I've had plans to try to clean this up and utilize Patrick
Ohly's simpler clockcounter struct as a basis for a clocksource, nesting
the structures somewhat to look something like:
/* minimal structure only giving hardware info and access methods */
struct cyclecounter {
char *name;
cycle_t (*read)(const struct cyclecounter *cc);
cycle_t (*vread)(const struct cyclecounter *cc);
cycle_t mask;
u32 mult;
u32 shift;
};
/* more complicated structure holding timekeeping values */
struct timesource {
struct cyclecounter counter;
u32 corrected_mult;
cycle_t cycle_interval;
u64 xtime_interval;
u32 raw_interval;
cycle_t cycle_last;
u64 xtime_nsec;
s64 error; /* probably should be ntp_error */
...
}
However such a change would be quite a bit of churn to much of the
timekeeping code, and to only marginal benefit. So I've put it off.
Martin, I've not been able to review your changes in extreme detail, but
I'm curious what the motivation for the drastic code rearrangement was?
I see you pushing a fair amount of code down a level, for instance,
except for the locking, getmonotonicraw() basically gets pushed down to
clocksource_read_raw(). The ktime_get/ktime_get_ts/getnstimeofday do
reduce some duplicate code, but that could still be minimized without
pushing stuff down to the clocksource level.
Is there any streamlining performance benefit from the way you moved
things around?
thanks
-john
next prev parent reply other threads:[~2009-07-21 22:10 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-21 19:17 [RFC][patch 0/5] clocksource cleanup / improvement Martin Schwidefsky
2009-07-21 19:17 ` [RFC][patch 1/5] move clock source related code to clocksource.c Martin Schwidefsky
2009-07-21 19:50 ` Daniel Walker
2009-07-21 21:55 ` Martin Schwidefsky
2009-07-21 22:00 ` john stultz [this message]
2009-07-22 7:25 ` Martin Schwidefsky
2009-07-22 17:45 ` john stultz
2009-07-23 0:28 ` john stultz
2009-07-23 7:53 ` Martin Schwidefsky
2009-07-23 10:52 ` Martin Schwidefsky
2009-07-25 0:08 ` john stultz
2009-07-27 11:55 ` Martin Schwidefsky
2009-07-23 7:23 ` Martin Schwidefsky
2009-07-21 19:17 ` [RFC][patch 2/5] cleanup clocksource selection Martin Schwidefsky
2009-07-21 22:07 ` john stultz
2009-07-21 19:17 ` [RFC][patch 3/5] remove clocksource inline functions Martin Schwidefsky
2009-07-21 19:48 ` Daniel Walker
2009-07-21 22:03 ` john stultz
2009-07-22 7:33 ` Martin Schwidefsky
2009-07-21 19:17 ` [RFC][patch 4/5] clocksource_read/clocksource_read_raw " Martin Schwidefsky
2009-07-21 22:01 ` john stultz
2009-07-22 7:29 ` Martin Schwidefsky
2009-07-21 19:17 ` [RFC][patch 5/5] update clocksource with stop_machine Martin Schwidefsky
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=1248213607.3298.107.camel@localhost \
--to=johnstul@us.ibm.com \
--cc=dwalker@fifo99.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=schwidefsky@de.ibm.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