Re: Detecting shift of CLOCK_REALTIME with clock_nanosleep (again)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



John Stultz wrote on 11/15/2012 02:53:56 PM:
> On 11/15/2012 11:28 AM, Scot Salmon wrote:
> > Thomas Gleixner wrote on 10/31/2012 03:08:45 PM:
> > > What you are concerned about is keeping the machines in sync on a
> > > common global timeline. Though your more fundamental requirement is
> > > that you get the wakeup on each machine in the given cycle time. The
> > > global synchronization mechanism just adjusts that local periodic
> > > schedule.
> > [...]
> > > What you really want is an atomic readout facility for 
> > > CLOCK_MONOTONIC and CLOCK_REALTIME. That allows you to align the 
> > > CLOCK_MONOTONIC based timer with the global CLOCK_REALTIME based 
> > > time line and in the event that the CLOCK_REALTIME clock was set 
> > > and jumped forward/backward you have full software control over 
> > > the aligning mechanism including the ability to do sanity checking.
> > This works for me.  We discussed it on IRC and agreed on "something
> > like clock_gettime2(id, id, *t1, *t2) with a sanity check on the ids,
> > that allows us other combinations than MONO/REAL as well".
> Yea, there's been a few times that folks have brought up the need, and 
> this sort of interface is probably the best way to go.

I spent a few days working on clock_gettime2 this week, and I've hit a 
snag.  I tried an implementation where I look up the two kclocks from 
their clockid and call kc1->clock_get() and kc2->clock_get() with the 
timekeeping data locked.  The problem is, if id1 and id2 are the obvious 
choices of MONO and REAL, their clock_get's end up calling 
timekeeping_get_ns which samples the clock source synchronously, so I 
get two discrete samples of the underlying clock even if I have locked 
out any changes to the timekeeping data.

This implementation does work for the _COARSE clockid variants, but it 
seems from some quick checks that those aren't going to be suitable for 
my needs (too coarse).

Since there's nothing I can do to keep the underlying hardware clock 
source from ticking, it seems like my options are pretty limited.  I 
can't do anything that will lead to two samples of the clock source. 
All I can think of is to sample it for the first clockid, then derive 
the value for the second from the first, for example by offsetting a 
CLOCK_MONOTONIC read with tk->offs_real and returning that as the 
synchronized value for CLOCK_REALTIME.  Which isn't incredibly horrible 
for those two, but making it general would get very ugly.

Any thoughts?

-Scot

--
To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux