From: Nishanth Aravamudan <nacc@linux.vnet.ibm.com>
To: John Stultz <john.stultz@linaro.org>
Cc: Thomas Gleixner <tglx@linutronix.de>,
lkml <linux-kernel@vger.kernel.org>,
jstancek@redhat.com, Ingo Molnar <mingo@kernel.org>
Subject: Re: time / gtod seconds value out of sync?
Date: Thu, 19 Feb 2015 11:28:40 -0800 [thread overview]
Message-ID: <20150219192840.GA2872@linux.vnet.ibm.com> (raw)
In-Reply-To: <CALAqxLX7fBcHUpkJyZHy62v-9ynG3b7Uqnw1o--7CvJ9=LEtEQ@mail.gmail.com>
Hi John!
On 19.02.2015 [11:03:26 -0800], John Stultz wrote:
> Hey Nish! Long time!
yep :)
> On Thu, Feb 19, 2015 at 10:35 AM, Nishanth Aravamudan
> <nacc@linux.vnet.ibm.com> wrote:
> > Hi John,
> >
> > We're seeing an interesting issue with the openposix testcase
> > difftime/1-1, which basically calls gtod/time, sleeps, calls time/gtod,
>
> I'm not familiar with the test... Do you have a link?
Sorry about that:
http://sourceforge.net/projects/posixtest/files/posixtest/posixtestsuite-1.5.2/posixtestsuite-1.5.2.tar.gz/download
conformance/interfaces/difftime/1-1.c
It takes quite a few iterations in a loop, but it eventually fails with
mainline on both x86-64 and ppc64le.
> > then difftime and sees if they disagree. The issue occurs with either
> > vDSO implementations or direct syscalls.
> >
> > We are seeing failures on ppc64le and x86_64 (probably other places too,
> > just not tested yet), because (I'm pretty sure), the time() syscalls
> > granularity is not accounting for the nsecs value at all. Instead, it
> > just returns get_seconds().
>
>
> Right, so there is always a problem mixing calls of different
> granularity (similar issues crop up with gettimeofday() and filesystem
> timestamps), so the basis of the test worries me a little bit from the
> description, but I'd have to look at it to really get a sense.
Yep, that makes sense to me too -- the only concern I had was that the
point where time() is returning X seconds, a simultaneous (theoretical)
call to gtod() would return the correct X+1 seconds (presuming nsecs had
exceeded 1000000000).
> > In one case, I see, in sys_time():
> >
> > [ 313.001823] NACC: timekeeping_get_ns = 1000121642
> > [ 314.001889] NACC: timekeeping_get_ns = 188401
> >
> > gtod correctly accumulates those nsecs into the secs value:
> >
> > ts->tv_sec = tk->xtime_sec;
> > nsecs = timekeeping_get_ns(&tk->tkr);
> > ts->tv_nsec = 0;
> > timespec64_add_ns(ts, nsecs);
> >
> > but time() does:
> >
> > return tk->xtime_sec;
> >
> > It seems like overkill to do the full timekeeping_get_ns() in time(),
>
> Right, so looking into the git history,
> f20bf6125605acbbc7eb8c9420d7221c91aa83eb (time: introduce
> xtime_seconds) changed this specifically for performance reasons
> (cc'ed Ingo here, in case he remembers more context).
Ah I see. I can see the performance impact of calling into gtod being
high.
> The idea that time() would be ok as being HZ granular, and its been
> this way since 2.6.23. Thus you have a < HZ sized window where
> gettimeofday() will return the next second before time() gets updated
> by the tick.
Right.
> > but maybe it's also necessary to account for leap seconds? That is, we
> > need to ensure that accumulate_nsecs_to_secs() has been called before
> > return tk->xtime_sec?
>
> So leapseconds are also applied at tick time, so I don't think you'd
> see any different behavior with them.
Yep, ok.
> There was a thread on this quite awhile back and I if I recall I think
> the general consensus was to keep time() tick granular (so it aligns
> with filesystem timestamps) and gettimeofday() hardware granular.
> Though we also introduced the CLOCK_REALTIME_COARSE to match
> sub-second filesystem timestamps as well.
>
> So yea... I don't think we want to make a change here, but maybe I'm
> not understanding the underlying issue... so feel free to push back
> here. :)
Oh that's fine. I mostly wanted the subsystem experts to chime in on if
the the testcase was valid, etc.
Jan, do you have any other concerns?
Thanks,
Nish
next prev parent reply other threads:[~2015-02-19 19:29 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-19 18:35 time / gtod seconds value out of sync? Nishanth Aravamudan
2015-02-19 19:03 ` John Stultz
2015-02-19 19:16 ` Ingo Molnar
2015-02-19 19:28 ` Nishanth Aravamudan [this message]
2015-02-20 13:31 ` Jan Stancek
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=20150219192840.GA2872@linux.vnet.ibm.com \
--to=nacc@linux.vnet.ibm.com \
--cc=john.stultz@linaro.org \
--cc=jstancek@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--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