From: "George Spelvin" <linux@horizon.com>
To: linux@horizon.com, mathieu.desnoyers@efficios.com
Cc: john.stultz@linaro.org, linux-kernel@vger.kernel.org,
peterz@infradead.org, tglx@linutronix.de
Subject: Re: [PATCH 4/4] timekeeping: Use printk_deferred when holding timekeeping seqlock
Date: 13 May 2014 12:18:13 -0400 [thread overview]
Message-ID: <20140513161813.15106.qmail@ns.horizon.com> (raw)
In-Reply-To: <822806193.15621.1399988364196.JavaMail.zimbra@efficios.com>
>> I was trying to tackle the "hard problem" of making *all* time reads
>> non-blocking, with monotonicity guarantees. There has to be *some* bound
>> on blocking times (in particular, time between reading hardware tiemrs
>> and translating them to real time), but they can be reasonably long.
> What I gathered from my past discussion with John on this topic is that
> virtualization blows away pretty much any assumption we can make on
> "update should be reasonably short". A virtualized CPU can be preempted
> for a rather long time (AFAIU not possible to bound).
Well, there are two kinds of time reads:
1) "What is the current time now?" This is easy, because if we stall
it's okay to return any time in the appropriate window.
2) "Some time in the past I read the hardware clock with value c.
What is the time in seconds corresponding to that?"
I'll call number 2 "time conversion". This can be handled as long as the
time between reading the clock and doing the conversion is reasonable.
Otherwise, it'll fail, with "I don't remember that part of the piecewise
clock/time conversion function."
Now, obviously number 1 can be implemented by reading the hardware clock
and converting it. As you point out, virtualization makes it impossible
to guarantee any reasonable bound on the time between the two steps.
But in case 1, we can easily handle failure by retrying the read. (Or,
equivalently, returning the earliest time which we know how to convert.)
All we can guarantee in case 1 is that we return the timestamp of some
instant between call and return. If that time is made very long by
the hypervisor descheduling us, it reduces the required precision.
So it's possible to allow arbirearily long delays in time writes, in
current-time reads, but conversion has a risk of failure.
I don't think it's possible to do better, so that's kind of the limit.
>> I think I have an idea that could work, but given the hairiness of
>> the timeeeping code, implementing it would be a major project.
>
> Indeed, timekeeping is not for the faint of heart. ;-)
But at least it's interesting, with problems other than undocumented bugs
in hardware.
next prev parent reply other threads:[~2014-05-13 16:18 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-06 21:33 George Spelvin
2014-05-12 16:21 ` [rough draft PATCH] avoid stalls on the " George Spelvin
2014-05-12 18:23 ` John Stultz
2014-05-12 17:49 ` [PATCH 4/4] timekeeping: Use printk_deferred when holding " John Stultz
2014-05-13 2:44 ` George Spelvin
2014-05-13 3:39 ` John Stultz
2014-05-13 5:13 ` George Spelvin
2014-05-13 12:07 ` Mathieu Desnoyers
2014-05-13 13:29 ` George Spelvin
2014-05-13 13:39 ` Mathieu Desnoyers
2014-05-13 16:18 ` George Spelvin [this message]
2014-05-13 2:45 ` [PATCH 1/2] timekeeping: Use unsigned int for seqlock sequence George Spelvin
2014-05-13 11:49 ` Mathieu Desnoyers
2014-05-13 2:48 ` [PATCH 2/2] timekeeping: Mark struct timekeeper * passed to notifiers as const George Spelvin
-- strict thread matches above, loose matches on Subject: below --
2014-05-05 20:47 [PATCH 0/4] Convert timekeeping core to use printk_deferred (v3) John Stultz
2014-05-05 20:47 ` [PATCH 4/4] timekeeping: Use printk_deferred when holding timekeeping seqlock John Stultz
2014-05-02 22:09 [PATCH 0/4] Convert timekeeping core to use printk_deferred (v2) John Stultz
2014-05-02 22:09 ` [PATCH 4/4] timekeeping: Use printk_deferred when holding timekeeping seqlock John Stultz
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=20140513161813.15106.qmail@ns.horizon.com \
--to=linux@horizon.com \
--cc=john.stultz@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=peterz@infradead.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
all inboxes | Powered by JetHome®