All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joao Martins <joao.m.martins@oracle.com>
To: Jan Beulich <JBeulich@suse.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
	Keir Fraser <keir@xen.org>,
	xen-devel@lists.xen.org
Subject: Re: [PATCH 2/5] x86/time: implement tsc as clocksource
Date: Wed, 23 Mar 2016 12:05:12 +0000	[thread overview]
Message-ID: <56F28678.5080004@oracle.com> (raw)
In-Reply-To: <56F2539D02000078000DF78F@prv-mh.provo.novell.com>



On 03/23/2016 07:28 AM, Jan Beulich wrote:
>>>> On 22.03.16 at 21:40, <joao.m.martins@oracle.com> wrote:
>> On 03/22/2016 04:02 PM, Jan Beulich wrote:
>>>>>> On 22.03.16 at 16:51, <joao.m.martins@oracle.com> wrote:
>>>> On 03/22/2016 12:46 PM, Jan Beulich wrote:
>>>>>>>> On 22.03.16 at 13:41, <joao.m.martins@oracle.com> wrote:
>>>>>>>
>>>>>> I found out one issue in the tsc clocksource initialization path with respect to
>>>>>> the reliability check. This check is running when initializing platform timer,
>>>>>> but not all CPUS are up at that point (init_xen_time()) which means that the
>>>>>> check will always succeed. So for clocksource=tsc I need to defer initialization
>>>>>> to a later point (on verify_tsc_reliability()) and if successful switch to that
>>>>>> clocksource. Unless you disagree, v2 would have this and just requires one
>>>>>> additional preparatory change prior to this patch.
>>>>>
>>>>> Hmm, that's suspicious when thinking about CPU hotplug: What
>>>>> do you intend to do when a CPU comes online later, failing the
>>>>> check?
>>>> Good point, but I am not sure whether that would happen. The initcall
>>>> verify_tsc_reliability seems to be called only for the boot processor. Or are
>>>> you saying that it's case that initcalls are called too when hotplugging cpus
>>>> later on? If that's the case then my suggestion wouldn't work as you point out -
>>>> or rather without having runtime switching support as you point out below.
>>>
>>> Looks like I didn't express myself clearly enough: "failing the check"
>>> wasn't meant to imply the failure would actually occur, but rather
>>> that failure would occur if the check was run on that CPU. IOW the
>>> case of a CPU getting hotplugged which doesn't satisfy the needs
>>> for selecting TSC as the clock source.
>> Ah, I see. I believe this wouldn't be an issue with the current rendezvous
>> mechanism (std_rendezvous), as the delta is computed between local_tsc_stamp
>> taken in that (hotplugged) CPU in the calibration and the rdtsc() in the 
>> guest
>> same CPU, even though having CPU0 TSC (master) as system_time.
>>
>> However it can be a problem with PVCLOCK_TSC_STABLE_BIT as the hotplugged CPU
>> could have its TSC drifted, and since setting this flag relies on
>> synchronization of TSCs we would need to clear the flag enterily.
> 
> Except that we can't, after guests already got started, validly clear
> that flag afaics.
Correct.

> The only option I see here would be to never set
> this flag if CPU hotplug is possible - by looking at the hot pluggable
> CPU count and, if non-zero, perhaps allowing a command line
> override to indicate no hotplug is intended (it may well be that such
> is already implicitly available).
OK, will add this then to allow the flag only if the conditions above are met.
Thanks for the pointer!

>>>>> So far we don't do runtime switching of the clock source,
>>>>> and I'm not sure that's a good idea to do when there are running
>>>>> guests.
>>>> Totally agree, but I would be proposing to be at initialization phase where
>>>> there wouldn't be guests running. We would start with HPET, then only switch 
>>>> to
>>>> TSC if that check has passed (and would happen once).
>>>>
>>>> Simpler alternative would be to call init_xen_time after all CPUs are 
>>>> brought up
>>>> (and would also keep this patch as is), but I am not sure about the
>>>> repercussions of that.
>>>
>>> I don't see how either would help with the hotplug case.
>> This was in response to what I thought you meant with your earlier question
>> (which I misunderstood). But my question is still valid I believe. The 
>> reason
>> for choosing between my suggested approaches is that tsc_check_reliability()
>> requires all CPUs up so that the check is correctly performed.
> 
> Sure - it seems quite obvious that all boot time available CPUs
> should be checked.
Cool, so I will go with moving init_xen_time right after all CPUs are up but
before initcalls are invoked.

Joao

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

  reply	other threads:[~2016-03-23 12:05 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-17 16:12 [PATCH 0/5] x86/time: PVCLOCK_TSC_STABLE_BIT support Joao Martins
2016-03-17 16:12 ` [PATCH 1/5] public/xen.h: add flags field to vcpu_time_info Joao Martins
2016-03-18 20:12   ` Andrew Cooper
2016-03-21 11:42     ` Joao Martins
2016-03-21 11:43       ` Andrew Cooper
2016-03-21 11:51         ` Joao Martins
2016-03-21 15:10   ` Jan Beulich
2016-03-21 15:27     ` Andrew Cooper
2016-03-21 15:40       ` Joao Martins
2016-03-17 16:12 ` [PATCH 2/5] x86/time: implement tsc as clocksource Joao Martins
2016-03-18 20:21   ` Andrew Cooper
2016-03-21 11:43     ` Joao Martins
2016-03-22 12:41     ` Joao Martins
2016-03-22 12:46       ` Jan Beulich
2016-03-22 15:51         ` Joao Martins
2016-03-22 16:02           ` Jan Beulich
2016-03-22 20:40             ` Joao Martins
2016-03-23  7:28               ` Jan Beulich
2016-03-23 12:05                 ` Joao Martins [this message]
2016-03-23 14:05                   ` Jan Beulich
2016-03-17 16:12 ` [PATCH 3/5] x86/time: streamline platform time init on plt_init() Joao Martins
2016-03-18 20:32   ` Andrew Cooper
2016-03-21 11:45     ` Joao Martins
2016-03-17 16:12 ` [PATCH 4/5] x86/time: refactor read_platform_stime() Joao Martins
2016-03-18 20:34   ` Andrew Cooper
2016-03-21 11:45     ` Joao Martins
2016-03-21 13:08       ` Andrew Cooper
2016-03-17 16:12 ` [PATCH 5/5] x86/time: implement PVCLOCK_TSC_STABLE_BIT Joao Martins
2016-03-18 20:58   ` Andrew Cooper
2016-03-21 11:50     ` Joao Martins

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=56F28678.5080004@oracle.com \
    --to=joao.m.martins@oracle.com \
    --cc=JBeulich@suse.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=keir@xen.org \
    --cc=xen-devel@lists.xen.org \
    /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.