public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
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


  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