|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v12] tolerate jitter in cpu_khz calculation to avoid TSC emulation
Am Mon, 11 Mar 2019 04:16:07 -0600
schrieb "Jan Beulich" <JBeulich@xxxxxxxx>:
> >>> On 08.03.19 at 20:20, <olaf@xxxxxxxxx> wrote:
> > To reiterate the second paragraph: if a domU uses TSC as primary clock
> > source, it is expected that it runs NTP to cover for the resulting
> > drift. Therefore this change does no need a knob to turn it on or off.
> Did you omit a 't' or a 'w' above? Judging from the patch I think you
> mean "not", but I don't see how this follows, especially with your
> subsequent reply validly stating that such a requirement did not
> exist with the XenoLinux kernels.
This does indeed mean 'does not need a knob'.
I do not see how the HVM domU clock can be without drift if it does not
sync with an external source. It seems xenlinux based PV drivers lack
a clocksource, so they would better run ntp. pvops provides a clocksource=xen,
but apparently with a low resolution.
> > +#define VTSC_NTP_PPM_TOLERANCE 500UL /* Amount of drift NTP will handle
> > */
> As per above, "will" is too strong here: I think this wants to be "can", and
> you want to add "if enabled in the guest".
I will reword this comment.
> > +#define VTSC_JITTER_RANGE_KHZ 200UL /* Assumed jitter in cpu_khz */
> I'm struggling to understand the comment: Surely not every single
> CPU surfaces a jitter of precisely 200kHz?
This is the observed range of frequencies on a large number of hosts.
The frequencies are expected to be exactly like "2.4GHz", but due to
inaccurate measurement the value of "cpu_khz" is higher or lower.
The value of "200" is simple the range of observed frequencies.
I will find a better name for this variable.
> > + * freq tolerated freq difference
> > + * ------- = -------------------------
> > + * Million Million + PPM
> > + */
> > + tmp = 1000 * 1000;
> > + tmp += VTSC_NTP_PPM_TOLERANCE;
> > + tmp *= cpu_khz;
> > + tmp /= 1000 * 1000;
> > +
> > + tmp -= cpu_khz;
> > +
> > + /*
> > + * Reduce the theoretical upper limit by the assumed measuring
> > inaccuracy.
> > + */
> > + if ( tmp >= VTSC_JITTER_RANGE_KHZ )
> > + tmp -= VTSC_JITTER_RANGE_KHZ;
> This could suggest the constant is meant to be an upper bound, but
> (as said in review of prior versions) subtracting introduce a non-
> linearity, _and_ it doesn't guarantee the result to be within the
> assumed bounds.
The upper bound is the PPM value. ntpd in Linux can handle up to 500.
What is unclear about this formula?
First PPM is converted into "khz", on a 2GHz system tmp will become 1000.
Then the inaccuracy has to be handled, Xen can not know if cpu_khz is correct.
As said above, the observed range was 200, so this will be subtracted.
> > + vtsc_tolerance_khz = tmp;
> > + printk("Tolerating vtsc jitter for domUs: %u kHz\n",
> > vtsc_tolerance_khz);
> Could you remind me again how Dom0 remains unaffected here?
> And if that's indeed the case, why would that be?
A dom0 does not move from one host to another.
And it better synchronizes with an external clock if domUs are supposed to be
migrated in the future.
Olaf
Attachment:
pgpcLSPBM8cy6.pgp _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |