Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp1238471ybh; Thu, 12 Mar 2020 20:25:15 -0700 (PDT) X-Google-Smtp-Source: ADFU+vuJ1N4tIdffIv2a0mOURkPgNSs4I1DehdjikBKfihhk58gAMLrlGUnT9bMD7ksPKZwo3WgF X-Received: by 2002:a9d:4b01:: with SMTP id q1mr8887352otf.168.1584069915294; Thu, 12 Mar 2020 20:25:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1584069915; cv=none; d=google.com; s=arc-20160816; b=IWe/rBaFU9o70pH9ovRLIBW7igSR8qdA3EgLyb5ZkUAHz9dKRpxCyL5g0AK51WmE18 QlBeaRCBQYYc0+DWgE6XhN3Ft95CI8k2HNbxaavgK8R94ssRczD4t1ECjZNNHfJeb71T egrfxpTk2U6qFHFwVZCUaK8zrt0gcDH7C3YKprL5Zjh/lJIrqFI6okVVQk3q6GhfePY8 5/K4wP0hXeSJ8/E7o+BEK6PqNEEwGMIxFDLXXqJr9lUy/XmtOapyxudkagb/BLyTaDl5 p0lZIcjUea9IJHXkKeiJQVERe5NoeaDJ3jORY18hDT3L1e+aSQents0uq3wmpLEYjot4 vd9g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-language :content-transfer-encoding:in-reply-to:mime-version:user-agent:date :message-id:organization:from:references:cc:to:subject:reply-to; bh=aQbk7YNzT16mmslbiSEixDN7kItjxGtAiP7BLHsIDc8=; b=TbUVYBzGmNOou3k+o0lT1ENA09zTIkCwV40Hkd/P1pwYAnAA+4NcXV6niwPd+JXDA1 HnDkt2zN1J1E0zkQ/Cwbz5Rq+tj9S2RZcQskHn/m/3nxhXmk0LU/Gxej1m3RSR+OLf// EyVjVcKcpG5bS0CN6h2Op54RLvsw1A8HY5QBWCHnobv3uTmYsgACVSysAVLuX/i+o1yF VIAToFf1S85y3x7d83YCcdsBhmko4oUE2MG+2lL+/sgsXyuQxSmdGUm1wH4MT6XhK3GU CYsYAhnFn++PcTbtqhAsur7zLS97OlPoOAqqaJmena3S4TLgGRwTTvomSSJuCi7a55Hu ZxCw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w65si3728927oif.134.2020.03.12.20.25.02; Thu, 12 Mar 2020 20:25:15 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726483AbgCMDXe (ORCPT + 99 others); Thu, 12 Mar 2020 23:23:34 -0400 Received: from mga06.intel.com ([134.134.136.31]:36154 "EHLO mga06.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726246AbgCMDXd (ORCPT ); Thu, 12 Mar 2020 23:23:33 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 12 Mar 2020 20:23:32 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,546,1574150400"; d="scan'208";a="232280339" Received: from likexu-mobl1.ccr.corp.intel.com (HELO [10.238.4.82]) ([10.238.4.82]) by orsmga007.jf.intel.com with ESMTP; 12 Mar 2020 20:23:29 -0700 Reply-To: like.xu@intel.com Subject: Re: [PATCH] KVM: VMX: Micro-optimize vmexit time when not exposing PMU To: Wanpeng Li , Vitaly Kuznetsov Cc: LKML , kvm , Paolo Bonzini , Sean Christopherson , Wanpeng Li , Jim Mattson , Joerg Roedel References: <1584007547-4802-1-git-send-email-wanpengli@tencent.com> <87r1xxrhb0.fsf@vitty.brq.redhat.com> From: "Xu, Like" Organization: Intel OTC Message-ID: <79141339-3506-1fe4-2e69-8430f4c202bd@intel.com> Date: Fri, 13 Mar 2020 11:23:28 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Wanpeng, On 2020/3/12 19:05, Wanpeng Li wrote: > On Thu, 12 Mar 2020 at 18:36, Vitaly Kuznetsov wrote: >> Wanpeng Li writes: >> >>> From: Wanpeng Li >>> >>> PMU is not exposed to guest by most of cloud providers since the bad performance >>> of PMU emulation and security concern. However, it calls perf_guest_switch_get_msrs() >>> and clear_atomic_switch_msr() unconditionally even if PMU is not exposed to the >>> guest before each vmentry. >>> >>> ~1.28% vmexit time reduced can be observed by kvm-unit-tests/vmexit.flat on my >>> SKX server. >>> >>> Before patch: >>> vmcall 1559 >>> >>> After patch: >>> vmcall 1539 >>> >>> Signed-off-by: Wanpeng Li >>> --- >>> arch/x86/kvm/vmx/vmx.c | 3 +++ >>> 1 file changed, 3 insertions(+) >>> >>> diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c >>> index 40b1e61..fd526c8 100644 >>> --- a/arch/x86/kvm/vmx/vmx.c >>> +++ b/arch/x86/kvm/vmx/vmx.c >>> @@ -6441,6 +6441,9 @@ static void atomic_switch_perf_msrs(struct vcpu_vmx *vmx) >>> int i, nr_msrs; >>> struct perf_guest_switch_msr *msrs; >>> >>> + if (!vcpu_to_pmu(&vmx->vcpu)->version) >>> + return; >>> + >>> msrs = perf_guest_get_msrs(&nr_msrs); >>> >>> if (!msrs) >> Personally, I'd prefer this to be expressed as >> >> diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c >> index 40b1e6138cd5..ace92076c90f 100644 >> --- a/arch/x86/kvm/vmx/vmx.c >> +++ b/arch/x86/kvm/vmx/vmx.c >> @@ -6567,7 +6567,9 @@ static void vmx_vcpu_run(struct kvm_vcpu *vcpu) >> >> pt_guest_enter(vmx); >> >> - atomic_switch_perf_msrs(vmx); >> + if (vcpu_to_pmu(&vmx->vcpu)->version) We may use 'vmx->vcpu.arch.pmu.version'. I would vote in favor of adding the "unlikely (vmx->vcpu.arch.pmu.version)" check to the atomic_switch_perf_msrs(), which follows pt_guest_enter(vmx). >> + atomic_switch_perf_msrs(vmx); >> + > I just hope the beautiful codes before, I testing this version before > sending out the patch, ~30 cycles can be saved which means that ~2% > vmexit time, will update in next version. Let's wait Paolo for other > opinions below. You may factor the cost of the "pmu-> version check' itself (~10 cycles) into your overall 'micro-optimize' revenue. Thanks, Like Xu > > Wanpeng > >> Also, (not knowing much about PMU), is >> "vcpu_to_pmu(&vmx->vcpu)->version" check correct? >> >> E.g. in intel_is_valid_msr() correct for Intel PMU or is it stated >> somewhere that it is generic rule? >> >> Also, speaking about cloud providers and the 'micro' nature of this >> optimization, would it rather make sense to introduce a static branch >> (the policy to disable vPMU is likely to be host wide, right)? >> >> -- >> Vitaly >>