From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Boris Ostrovsky <boris.ostrovsky@oracle.com>,
xen-devel@lists.xen.org, Ian Jackson <ian.jackson@eu.citrix.com>,
Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
Ian Campbell <ian.campbell@citrix.com>,
Wei Liu <wei.liu2@citrix.com>, Keir Fraser <keir@xen.org>,
Jan Beulich <jbeulich@suse.com>,
Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>,
Aravind Gopalakrishnan <Aravind.Gopalakrishnan@amd.com>,
Jun Nakajima <jun.nakajima@intel.com>,
Kevin Tian <kevin.tian@intel.com>
Subject: Re: [PATCH 12/13] vmx: Add a call-back to apply TSC scaling ratio to hardware
Date: Tue, 29 Sep 2015 11:25:56 +0100 [thread overview]
Message-ID: <560A6734.6090300@citrix.com> (raw)
In-Reply-To: <20150929100218.GB3789@hzzhang-OptiPlex-9020.sh.intel.com>
On 29/09/15 11:02, Haozhong Zhang wrote:
> On Tue, Sep 29, 2015 at 10:33:14AM +0100, Andrew Cooper wrote:
>> On 29/09/15 02:07, Haozhong Zhang wrote:
>>> On Mon, Sep 28, 2015 at 12:02:08PM -0400, Boris Ostrovsky wrote:
>>>> On 09/28/2015 03:13 AM, Haozhong Zhang wrote:
>>>>> This patch adds a new call-back setup_tsc_scaling in struct
>>>>> hvm_function_table to apply the TSC scaling ratio to hardware. For VMX,
>>>>> it writes the TSC scaling ratio to VMCS field TSC_MULTIPLIER.
>>>>>
>>>>> Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
>>>>> ---
>>>>> xen/arch/x86/hvm/hvm.c | 1 +
>>>>> xen/arch/x86/hvm/svm/svm.c | 5 +++++
>>>>> xen/arch/x86/hvm/vmx/vmx.c | 8 ++++++++
>>>>> xen/include/asm-x86/hvm/hvm.h | 3 +++
>>>>> 4 files changed, 17 insertions(+)
>>>>>
>>>>> diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
>>>>> index 3522d20..2d8a148 100644
>>>>> --- a/xen/arch/x86/hvm/hvm.c
>>>>> +++ b/xen/arch/x86/hvm/hvm.c
>>>>> @@ -376,6 +376,7 @@ void hvm_setup_tsc_scaling(struct vcpu *v)
>>>>> }
>>>>> v->arch.tsc_scaling_ratio = ratio;
>>>>> + hvm_funcs.setup_tsc_scaling(v);
>>>>> }
>>>>> void hvm_set_guest_tsc_fixed(struct vcpu *v, u64 guest_tsc, u64 at_tsc)
>>>>> diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c
>>>>> index 73bc863..d890c1f 100644
>>>>> --- a/xen/arch/x86/hvm/svm/svm.c
>>>>> +++ b/xen/arch/x86/hvm/svm/svm.c
>>>>> @@ -2236,6 +2236,10 @@ static void svm_invlpg_intercept(unsigned long vaddr)
>>>>> svm_asid_g_invlpg(curr, vaddr);
>>>>> }
>>>>> +static void svm_setup_tsc_scaling(struct vcpu *v)
>>>>> +{
>>>>> +}
>>>>> +
>>>> Should this be wrmsrl(MSR_AMD64_TSC_RATIO, v->arch.tsc_scaling_ratio) ?
>>>>
>>>> -boris
>>>>
>>> MSR_AMD64_TSC_RATIO is set in svm_ctxt_switch_to() before entering guest.
>>>
>>> For VMX, the ratio is set to a VMCS field TSC_MULTIPLIER and it's not
>>> necessary to set it every time entering guest. Therefore, I introduce
>>> the call-back setup_tsc_scaling() to do this. For SVM, as the ratio is
>>> set every time entering guest, I leave the SVM version of setup_tsc_scaling()
>>> empty.
>> VT-x has a per-VMCS scale, while SVM has a per-core MSR to adjust the
>> scale. These do require different modification algorithms.
>>
> Yes, this is what I mean.
>
>> However, if there is any chance that any part of the system can update
>> the ratio while an SVM VCPU is in context (which appears to be the
>> case), then MSR_AMD64_TSC_RATIO needs updating synchronously, or it will
>> be deferred until the next full context switch which could be an
>> arbitrary time into the future. This appears to be a latent bug in the
>> SVM side.
>>
> In my patch, tsc ratio is set only when
> 1. a domain is created (by arch_domain_create()),
> 2. a vcpu's state is reset (by hvm_vcpu_reset_state()),
> 3. a vcpu's context is restored (by hvm_load_cpu_ctxt()), or
> 4. through the hypercall XEN_DOMCTL_settscinfo.
>
> (Correct me if I'm wrong below)
>
> For the first 3 cases, vcpu is definitely not in context, so it's safe
> to set tsc ratio without any latent bug. For the last case,
> arch_do_domctl() pauses the domain before updating tsc ratio, so it's
> also safe.
That logic appears to be correct, which would suggest that there isn't
actually a latent bug.
In such a case, we would typically make the hvm_funcs pointer optional,
and omit an empty stub on the SVM side.
~Andrew
next prev parent reply other threads:[~2015-09-29 10:25 UTC|newest]
Thread overview: 117+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-28 7:13 [PATCH 00/13] Add VMX TSC scaling support Haozhong Zhang
2015-09-28 7:13 ` [PATCH 01/13] x86/time.c: Use system time to calculate elapsed_nsec in tsc_get_info() Haozhong Zhang
2015-10-09 6:51 ` Jan Beulich
2015-10-09 13:41 ` Boris Ostrovsky
2015-10-09 14:00 ` Haozhong Zhang
2015-10-09 15:11 ` Jan Beulich
2015-10-09 16:09 ` Boris Ostrovsky
2015-10-09 16:19 ` Jan Beulich
2015-10-09 16:31 ` Boris Ostrovsky
2015-10-09 16:51 ` Haozhong Zhang
2015-10-09 18:59 ` Boris Ostrovsky
2015-10-09 14:39 ` Jan Beulich
2015-10-09 15:37 ` Boris Ostrovsky
2015-10-09 16:39 ` Haozhong Zhang
2015-10-09 16:44 ` Boris Ostrovsky
2015-10-09 14:35 ` Haozhong Zhang
2015-10-09 14:43 ` Jan Beulich
2015-10-09 15:56 ` Boris Ostrovsky
2015-10-14 2:45 ` Haozhong Zhang
2015-10-14 9:40 ` Jan Beulich
2015-10-14 10:00 ` Haozhong Zhang
2015-10-14 10:20 ` Jan Beulich
2015-10-14 10:24 ` Haozhong Zhang
2015-09-28 7:13 ` [PATCH 02/13] x86/time.c: Get the correct guest TSC rate " Haozhong Zhang
2015-09-28 7:13 ` [PATCH 03/13] x86/hvm: Collect information of TSC scaling ratio Haozhong Zhang
2015-10-22 12:53 ` Jan Beulich
2015-10-22 14:40 ` Haozhong Zhang
2015-10-22 14:51 ` Jan Beulich
2015-10-22 15:57 ` Haozhong Zhang
2015-09-28 7:13 ` [PATCH 04/13] x86/hvm: Setup " Haozhong Zhang
2015-10-22 13:13 ` Jan Beulich
2015-10-22 15:55 ` Haozhong Zhang
2015-10-22 16:05 ` Jan Beulich
2015-10-22 16:39 ` Haozhong Zhang
2015-10-23 7:44 ` Haozhong Zhang
2015-10-23 7:59 ` Jan Beulich
2015-10-23 8:18 ` Haozhong Zhang
2015-10-23 8:31 ` Jan Beulich
2015-10-23 8:40 ` Haozhong Zhang
2015-10-23 9:18 ` Jan Beulich
2015-09-28 7:13 ` [PATCH 05/13] x86/hvm: Replace architecture TSC scaling by a common function Haozhong Zhang
2015-10-22 13:52 ` Jan Beulich
2015-10-23 0:49 ` Haozhong Zhang
2015-09-28 7:13 ` [PATCH 06/13] x86/hvm: Scale host TSC when setting/getting guest TSC Haozhong Zhang
2015-10-22 14:17 ` Jan Beulich
2015-10-22 15:44 ` Boris Ostrovsky
2015-10-22 16:23 ` Haozhong Zhang
2015-10-27 20:16 ` Aravind Gopalakrishnan
2015-10-28 1:51 ` Haozhong Zhang
2015-11-09 7:43 ` Haozhong Zhang
2015-11-12 13:50 ` George Dunlap
2015-10-22 16:03 ` Haozhong Zhang
2015-10-27 1:54 ` Haozhong Zhang
2015-10-27 8:15 ` Jan Beulich
2015-10-27 8:25 ` Haozhong Zhang
2015-10-27 8:44 ` Haozhong Zhang
2015-10-27 13:10 ` Boris Ostrovsky
2015-10-27 13:55 ` Boris Ostrovsky
2015-10-27 16:13 ` haozhong.zhang
2015-10-27 16:13 ` haozhong.zhang
2015-09-28 7:13 ` [PATCH 07/13] x86/hvm: Move saving/loading vcpu's TSC to common code Haozhong Zhang
2015-10-22 14:54 ` Jan Beulich
2015-09-28 7:13 ` [PATCH 08/13] x86/hvm: Detect TSC scaling through hvm_funcs in tsc_set_info() Haozhong Zhang
2015-10-22 15:01 ` Jan Beulich
2015-09-28 7:13 ` [PATCH 09/13] x86/time.c: Scale host TSC in pvclock properly Haozhong Zhang
2015-09-28 16:36 ` Boris Ostrovsky
2015-09-29 0:19 ` Haozhong Zhang
2015-10-22 15:50 ` Boris Ostrovsky
2015-10-22 16:44 ` Haozhong Zhang
2015-10-22 19:15 ` Boris Ostrovsky
2015-09-28 7:13 ` [PATCH 10/13] vmx: Detect and initialize VMX RDTSC(P) scaling Haozhong Zhang
2015-10-27 13:19 ` Jan Beulich
2015-10-27 16:17 ` Haozhong Zhang
2015-09-28 7:13 ` [PATCH 11/13] vmx: Use scaled host TSC to calculate TSC offset Haozhong Zhang
2015-10-22 15:55 ` Boris Ostrovsky
2015-10-22 17:12 ` Haozhong Zhang
2015-10-22 19:19 ` Boris Ostrovsky
2015-10-23 0:52 ` Haozhong Zhang
2015-10-27 13:29 ` Jan Beulich
2015-10-27 16:21 ` Haozhong Zhang
2015-09-28 7:13 ` [PATCH 12/13] vmx: Add a call-back to apply TSC scaling ratio to hardware Haozhong Zhang
2015-09-28 16:02 ` Boris Ostrovsky
2015-09-29 1:07 ` Haozhong Zhang
2015-09-29 9:33 ` Andrew Cooper
2015-09-29 10:02 ` Haozhong Zhang
2015-09-29 10:25 ` Andrew Cooper [this message]
2015-09-29 13:59 ` Haozhong Zhang
2015-10-27 13:33 ` Jan Beulich
2015-10-28 2:41 ` Haozhong Zhang
2015-09-28 7:13 ` [PATCH 13/13] tools/libxl: Add 'vtsc_khz' option to set guest TSC rate Haozhong Zhang
2015-09-28 11:47 ` Julien Grall
2015-09-28 12:11 ` Haozhong Zhang
2015-09-28 14:19 ` Wei Liu
2015-09-29 0:40 ` Haozhong Zhang
2015-09-29 9:20 ` Wei Liu
2015-09-29 9:50 ` Haozhong Zhang
2015-09-29 10:24 ` Julien Grall
2015-09-29 10:07 ` Ian Campbell
2015-09-29 10:33 ` Wei Liu
2015-09-29 12:57 ` Haozhong Zhang
2015-09-29 10:04 ` Ian Campbell
2015-09-29 10:13 ` Haozhong Zhang
2015-09-29 10:24 ` Andrew Cooper
2015-09-29 10:28 ` Ian Campbell
2015-09-29 10:31 ` Andrew Cooper
2015-09-29 13:53 ` Haozhong Zhang
2015-09-29 13:56 ` Andrew Cooper
2015-09-29 14:01 ` Haozhong Zhang
2015-09-29 14:37 ` Ian Campbell
2015-09-29 15:16 ` Haozhong Zhang
2015-09-28 10:51 ` [PATCH 00/13] Add VMX TSC scaling support Andrew Cooper
2015-09-28 13:48 ` Boris Ostrovsky
2015-11-22 17:54 ` Haozhong Zhang
2015-11-23 15:37 ` Boris Ostrovsky
2015-11-24 13:05 ` Haozhong Zhang
2015-11-24 14:19 ` Boris Ostrovsky
2015-11-24 14:25 ` Haozhong Zhang
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=560A6734.6090300@citrix.com \
--to=andrew.cooper3@citrix.com \
--cc=Aravind.Gopalakrishnan@amd.com \
--cc=boris.ostrovsky@oracle.com \
--cc=ian.campbell@citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=jbeulich@suse.com \
--cc=jun.nakajima@intel.com \
--cc=keir@xen.org \
--cc=kevin.tian@intel.com \
--cc=stefano.stabellini@eu.citrix.com \
--cc=suravee.suthikulpanit@amd.com \
--cc=wei.liu2@citrix.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).