From: Jeremy Fitzhardinge <jeremy@goop.org>
To: Jan Beulich <jbeulich@novell.com>
Cc: Ingo Molnar <mingo@elte.hu>, Thomas Gleixner <tglx@linutronix.de>,
Andrew Morton <akpm@linux-foundation.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
virtualization@lists.osdl.org,
Xen-devel <xen-devel@lists.xensource.com>,
Chris Wright <chrisw@sous-sol.org>, Andi Kleen <ak@suse.de>,
lkml <linux-kernel@vger.kernel.org>
Subject: Re: [Xen-devel] [patch 14/33] xen: xen time implementation
Date: Wed, 06 Jun 2007 03:05:22 -0700 [thread overview]
Message-ID: <466686E2.4040004@goop.org> (raw)
In-Reply-To: <46668EC6.76E4.0078.0@novell.com>
Jan Beulich wrote:
> Xen itself knows to deal with this (by using an error correction factor to
> slow down the local [TSC-based] clock), but for the kernel such a situation
> may be fatal: If clocksource->cycle_last was most recently set on a CPU
> with shadow->tsc_to_nsec_mul sufficiently different from that where
> getnstimeofday() is being used, timekeeping.c's __get_nsec_offset() will
> calculate a huge nanosecond value (due to cyc2ns() doing unsigned
> operations), worth abut 4000s. This value may then be used to set a
> timeout that was intended to be a few milliseconds, effectively yielding
> a hung app (and perhaps system).
>
Hm. I had a similar situation in the stolen time code, and I ended up
using signed values so I could clamp at zero. Though that might have
been another bug; either way, the clamp is still there.
I wonder if cyc2ns might not be better using signed operations? Or
perhaps better, the time code should endevour to do things on a
completely per-cpu basis (haven't really given this any thought).
> I'm sure the time keeping code can't deal with negative values returned
> from __get_nsec_offset() (timespec_add_ns() is an example, used in
> __get_realtime_clock_ts()), otherwise a potential solution might have
> been to set the clock source's multiplier and shift to one and zero
> respectively.
I don't quite follow you here, but wouldn't setting the multiplier/shift
to 1/0 preclude being able to warp the clocksource with ntp?
> But I think that a clock source can be expected to be
> monotonic anyway, which Xen's interpolation mechanism doesn't
> guarantee across multiple CPUs. (I'm actually beginning to think that
> this might also be the reason for certain test suites occasionally reporting
> timeouts to fire early.)
>
Does the kernel expect the tsc clocksource to be completely monotonic
across cpus? Any form of cpu-local clocksource is going to have this
problem; I wonder if clocksources can really only be useful if they're
always referring to a single system-wide time reference - seems like a
bit of a limitation.
> Unfortunately so far I haven't been able to think of a reasonable solution
> to this - a simplistic approach like making xen_clocksource_read() check
> the value it is about to return against the last value it returned doesn't
> seem to be a good idea (time might appear to have stopped over some
> period of time otherwise), nor does attempting to adjust the shadowed
> tsc_to_nsec_mul values (because the kernel can't know whether it should
> boost the lagging CPU or throttle the rushing one).
I once had some code in there to do that, implemented in very boneheaded
way with a spinlock to protect the "last time returned" variable. I
expect there's a better way to implement it.
J
next prev parent reply other threads:[~2007-06-06 10:05 UTC|newest]
Thread overview: 108+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-22 14:09 [patch 00/33] xen: Xen paravirt_ops implementation Jeremy Fitzhardinge
2007-05-22 14:09 ` Jeremy Fitzhardinge
2007-05-22 14:09 ` [patch 01/33] xen: paravirt: add an "mm" argument to alloc_pt Jeremy Fitzhardinge
2007-05-22 14:09 ` Jeremy Fitzhardinge
2007-05-22 14:09 ` [patch 02/33] xen: paravirt: add a hook for once the allocator is ready Jeremy Fitzhardinge
2007-05-22 14:09 ` Jeremy Fitzhardinge
2007-05-22 14:09 ` [patch 03/33] xen: paravirt: increase IRQ limit Jeremy Fitzhardinge
2007-05-22 14:09 ` Jeremy Fitzhardinge
2007-05-22 14:09 ` [patch 04/33] xen: paravirt: unstatic leave_mm Jeremy Fitzhardinge
2007-05-22 14:09 ` Jeremy Fitzhardinge
2007-05-22 14:09 ` [patch 05/33] xen: paravirt: unstatic smp_store_cpu_info Jeremy Fitzhardinge
2007-05-22 14:09 ` Jeremy Fitzhardinge
2007-05-22 14:09 ` [patch 06/33] xen: paravirt: make siblingmap functions visible Jeremy Fitzhardinge
2007-05-22 14:09 ` Jeremy Fitzhardinge
2007-05-22 14:09 ` [patch 07/33] xen: paravirt: export __supported_pte_mask Jeremy Fitzhardinge
2007-05-22 14:09 ` Jeremy Fitzhardinge
2007-05-22 14:09 ` [patch 08/33] xen: Allocate and free vmalloc areas Jeremy Fitzhardinge
2007-05-22 14:09 ` Jeremy Fitzhardinge
2007-05-22 14:09 ` [patch 09/33] xen: Add nosegneg capability to the vsyscall page notes Jeremy Fitzhardinge
2007-05-22 14:09 ` Jeremy Fitzhardinge
2007-05-22 14:09 ` [patch 10/33] xen: Add Xen interface header files Jeremy Fitzhardinge
2007-05-22 14:09 ` Jeremy Fitzhardinge
2007-05-22 14:09 ` [patch 11/33] xen: Core Xen implementation Jeremy Fitzhardinge
2007-05-22 14:09 ` Jeremy Fitzhardinge
2007-05-22 14:09 ` [patch 12/33] xen: Xen virtual mmu Jeremy Fitzhardinge
2007-05-22 14:09 ` Jeremy Fitzhardinge
2007-05-22 14:09 ` [patch 13/33] xen: xen event channels Jeremy Fitzhardinge
2007-05-22 14:09 ` Jeremy Fitzhardinge
2007-05-22 14:09 ` [patch 14/33] xen: xen time implementation Jeremy Fitzhardinge
2007-05-22 14:09 ` Jeremy Fitzhardinge
2007-06-06 8:39 ` Jan Beulich
2007-06-06 8:39 ` [Xen-devel] " Jan Beulich
2007-06-06 8:54 ` Keir Fraser
2007-06-06 8:54 ` Keir Fraser
2007-06-06 8:54 ` Keir Fraser
2007-06-06 9:30 ` Jan Beulich
2007-06-06 9:30 ` [Xen-devel] " Jan Beulich
2007-06-06 9:56 ` Keir Fraser
2007-06-06 9:56 ` Keir Fraser
2007-06-06 11:00 ` Jan Beulich
2007-06-06 11:00 ` [Xen-devel] " Jan Beulich
2007-06-06 11:52 ` Keir Fraser
2007-06-06 11:52 ` Keir Fraser
2007-06-06 11:58 ` Petersson, Mats
2007-06-06 12:21 ` Jan Beulich
2007-06-06 12:18 ` [Xen-devel] " Andi Kleen
2007-06-06 12:46 ` Jan Beulich
2007-06-06 12:46 ` [Xen-devel] " Jan Beulich
2007-06-06 12:53 ` Andi Kleen
2007-06-06 12:53 ` [Xen-devel] " Andi Kleen
2007-06-06 12:54 ` Keir Fraser
2007-06-06 12:54 ` Keir Fraser
2007-06-06 12:54 ` Keir Fraser
2007-06-06 12:54 ` [Xen-devel] " Keir Fraser
2007-06-06 11:52 ` Keir Fraser
2007-06-06 11:52 ` Keir Fraser
2007-06-06 9:56 ` Keir Fraser
2007-06-06 9:56 ` Keir Fraser
2007-06-06 8:54 ` Keir Fraser
2007-06-06 10:05 ` Jeremy Fitzhardinge [this message]
2007-06-06 10:20 ` Jan Beulich
2007-06-06 10:20 ` [Xen-devel] " Jan Beulich
2007-06-06 10:26 ` Andi Kleen
2007-06-06 10:26 ` [Xen-devel] " Andi Kleen
2007-06-06 14:15 ` Jeremy Fitzhardinge
2007-05-22 14:09 ` [patch 15/33] xen: xen configuration Jeremy Fitzhardinge
2007-05-22 14:09 ` Jeremy Fitzhardinge
2007-05-22 14:09 ` [patch 16/33] xen: xen: add pinned page flag Jeremy Fitzhardinge
2007-05-22 14:09 ` Jeremy Fitzhardinge
2007-05-22 14:09 ` [patch 17/33] xen: Complete pagetable pinning for Xen Jeremy Fitzhardinge
2007-05-22 14:09 ` Jeremy Fitzhardinge
2007-05-22 14:09 ` [patch 18/33] xen: xen: ignore RW mapping of RO pages in pagetable_init Jeremy Fitzhardinge
2007-05-22 14:09 ` Jeremy Fitzhardinge
2007-05-22 14:10 ` [patch 19/33] xen: Account for time stolen by Xen Jeremy Fitzhardinge
2007-05-22 14:10 ` Jeremy Fitzhardinge
2007-05-22 14:10 ` [patch 20/33] xen: Implement xen_sched_clock Jeremy Fitzhardinge
2007-05-22 14:10 ` Jeremy Fitzhardinge
2007-05-22 14:10 ` [patch 21/33] xen: Xen SMP guest support Jeremy Fitzhardinge
2007-05-22 14:10 ` Jeremy Fitzhardinge
2007-06-06 7:34 ` Jan Beulich
2007-06-06 7:34 ` [Xen-devel] " Jan Beulich
2007-06-06 8:33 ` Jeremy Fitzhardinge
2007-05-22 14:10 ` [patch 22/33] xen: Add support for preemption Jeremy Fitzhardinge
2007-05-22 14:10 ` Jeremy Fitzhardinge
2007-05-22 14:10 ` [patch 23/33] xen: xen: lazy-mmu operations Jeremy Fitzhardinge
2007-05-22 14:10 ` Jeremy Fitzhardinge
2007-05-22 14:10 ` [patch 24/33] xen: xen: hack to prevent bad segment register reload Jeremy Fitzhardinge
2007-05-22 14:10 ` Jeremy Fitzhardinge
2007-05-22 14:10 ` [patch 25/33] xen: Use the hvc console infrastructure for Xen console Jeremy Fitzhardinge
2007-05-22 14:10 ` Jeremy Fitzhardinge
2007-05-22 14:10 ` [patch 26/33] xen: Add Xen grant table support Jeremy Fitzhardinge
2007-05-22 14:10 ` Jeremy Fitzhardinge
2007-05-22 14:10 ` [patch 27/33] xen: Add the Xenbus sysfs and virtual device hotplug driver Jeremy Fitzhardinge
2007-05-22 14:10 ` Jeremy Fitzhardinge
2007-05-22 14:10 ` [patch 28/33] xen: Add Xen virtual block device driver Jeremy Fitzhardinge
2007-05-22 14:10 ` Jeremy Fitzhardinge
2007-05-22 14:10 ` [patch 29/33] xen: Add the Xen virtual network " Jeremy Fitzhardinge
2007-05-22 14:10 ` Jeremy Fitzhardinge
2007-05-22 14:10 ` [patch 30/33] xen: Xen machine operations Jeremy Fitzhardinge
2007-05-22 14:10 ` Jeremy Fitzhardinge
2007-05-22 14:10 ` [patch 31/33] xen: xen: handle external requests for shutdown, reboot and sysrq Jeremy Fitzhardinge
2007-05-22 14:10 ` Jeremy Fitzhardinge
2007-05-22 14:10 ` [patch 32/33] xen: Place vcpu_info structure into per-cpu memory, if possible Jeremy Fitzhardinge
2007-05-22 14:10 ` Jeremy Fitzhardinge
2007-05-22 14:10 ` [patch 33/33] xen: Attempt to patch inline versions of common operations Jeremy Fitzhardinge
2007-05-22 14:10 ` Jeremy Fitzhardinge
2007-05-22 14:57 ` [patch 00/33] xen: Xen paravirt_ops implementation Andi Kleen
2007-05-22 15:06 ` Jeremy Fitzhardinge
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=466686E2.4040004@goop.org \
--to=jeremy@goop.org \
--cc=ak@suse.de \
--cc=akpm@linux-foundation.org \
--cc=chrisw@sous-sol.org \
--cc=jbeulich@novell.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=virtualization@lists.osdl.org \
--cc=xen-devel@lists.xensource.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.