One quick quenstion about PXA sched_clock resolution?
Nicolas Pitre
nicolas.pitre at linaro.org
Mon Nov 8 09:42:56 EST 2010
On Mon, 8 Nov 2010, Uwe Kleine-König wrote:
> [added Nico to Cc:]
>
> On Mon, Nov 08, 2010 at 04:56:37PM +0800, rocky wrote:
> > Hi
> >
> > I'am working on an ARM linux porting project, which need to implement sched_clock of our own.
> > have a glance at PXA sched_clock timplementation, puzzled about the following notes.
> >
> >
> > /*
> > * This is PXA's sched_clock implementation. This has a resolution
> > * of at least 308 ns and a maximum value of 208 days.
> > *
> > * The return value is guaranteed to be monotonic in that range as
> > * long as there is always less than 582 seconds between successive
> > * calls to sched_clock() which should always be the case in practice.
> > */
> >
> >
> >
> >
> > PXA series chips have system clock in 3250000/3249600/3686400 HZ.
> > I do the math like this:
> >
> > ####Where does 308 ns come from?
> >
> >
> > ns of one clcok cycle:
> > 307.69 (10^9/3250000);
> > 307.73 (10^9/3249600);
> > 271.26 (10^9/3686400 )
> > this is the highest resolution mentioned in above notes;
> Seems correct. I think "at least" above means 308 ns or better (i.e.
> shorter).
> >
> >
> > ####Where does 582 seconds come from?
> >
> > 660.76(0x80000000/3250000);
> > 660.84(0x80000000/3249600);
> > 582.54(0x80000000/3686400 );
> Seems correct, too.
>
> > Question is how does 208 days pop out?
> > Can anyone give me some hints?
> > thanks
> I didn't check it, but I guess after 208 days sched_clock overflows.
Yes. And the maximum range is bounded by OSCR2NS_SCALE_FACTOR limiting
the returned ns value to 64 - OSCR2NS_SCALE_FACTOR = 54 bits. Hence:
2^54 / 10^9 / 60 / 60 / 24 = 208 days
This means that, once every 208 days, you may experience a slight hickup
in process scheduling which no one is likely to notice.
Nicolas
More information about the linux-arm-kernel
mailing list