Port-xen archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: timekeeping regression?



At 2024年6月18日 16:36:27 -0700, "Greg A. Woods" <woods%planix.ca@localhost> wrote:
Subject: Re: timekeeping regression?
>
>
> [ 83329.4245423] xen raw systime + tsc delta went backwards: 82591317579681 > 82591299251748
> [ 83329.4245423] raw_systime_ns=82590641756625
> [ 83329.4245423] tsc_timestamp=233578790859082
> [ 83329.4245423] tsc=233580649104491
> [ 83329.4245423] tsc_to_system_mul=3039340271
> [ 83329.4245423] tsc_shift=-1
> [ 83329.4245423] delta_tsc=1858245409
> [ 83329.4245423] delta_ns=657495123
>
> ....
>
> I thought this might be because there's no way (that I know) to set the
> tsc_mode for dom0, but given that the tsc_to_system_mul shown in the
> debug printf is about what it should be to round down to 1GHz on this
> machine then it seems RDTSC must be being emulated.
I think I may have got that backwards. My sleep-deprived brain isn't
doing well with numbers of that magnitude.
The delta_tsc shown above is in fact a factor of 2.83 greater than
delta_ns, and the CPUs on this machine are running at 2.83 GHz.
So RDTSC for dom0 is NATIVE (NOT emulated)! Have I got that right now?
That would better explain why the dom0 vCPUs have to be pinned (at least
on older CPUs without TSC_INVARIANT).
It also explains why a dom0 is able to keep perfect time (when pinned),
even though it is using the same supposed "xen_system_time" timecounter
as a domU which (eventually) can't keep time, I think
"xen_system_time" in a dom0 is really just TSC time, but for domU it's
from the emulated RDTSC running at 1 GHz, and for dom0 it's real CPU
time! If I'm right then the setting of tc_frequency for xen_timecounter
was bit of a misdirection for me (but it shouldn't matter as the value
returned by xen_get_timecount() is always in matching units of
nanoseconds anyway). It was just confusing me terribly as I was
assuming dom0 was getting the same RDTSC emulation!
Maybe though dom0 shouldn't use "xen_system_time", but rather just
directly use TSC (or whatever other hardware clock might be better, as
without TSC_INVARIANT the TSC timecounter gets quality=-100). I think
that would simplify xen_clock.c and make kern.timecounter look show
what's really being used.
--
					Greg A. Woods <gwoods%acm.org@localhost>
Kelowna, BC +1 250 762-7675 RoboHack <woods%robohack.ca@localhost>
Planix, Inc. <woods%planix.com@localhost> Avoncote Farms <woods%avoncote.ca@localhost>

Attachment: pgpmmZbXoEthX.pgp
Description: OpenPGP Digital Signature



Home | Main Index | Thread Index | Old Index

AltStyle によって変換されたページ (->オリジナル) /