From nobody Tue Dec 16 14:06:46 2025 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C9BC7301037 for ; Sat, 6 Dec 2025 00:18:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764980317; cv=none; b=PRt923AETypcLzaFvLfZ9pjtXYMxYBc3OyJfP64bhW4WEkatiod95l42KyHTs22FOADlkxkcYLlIabyy/vdZmDlPR0EabNvJLU25se67pLXZ2ij+x3RhVLJipDwK6FUbNXU8J+GCWd/PcVRbM1jraAcfgzFeAipJFWqB93B+hGU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764980317; c=relaxed/simple; bh=bVIn0sl64UFZr8WJm9qTaFNmU6IY7pnSUpqJCc//7XM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=A8nVVY+fD7WgcMM3M37rwCa6TOxz1oXIRl04gWPbfL+fBlU1Q8Qnd5tKhmXnY7RkWFrJGSyQwFaJUvPuWu+k89SKiQ26tL4LQ8g4V174zMGDDV8uDVi/KDLj1yCK4UuIEwEjVCHJV0WScjtqEGxO2+mL3Kqc7THGZqUfYaTiqwE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=fail (0-bit key) header.d=google.com header.i=@google.com header.b=RoABzGP+ reason="key not found in DNS"; arc=none smtp.client-ip=209.85.216.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=fail reason="key not found in DNS" (0-bit key) header.d=google.com header.i=@google.com header.b="RoABzGP+" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-340ad9349b3so4794208a91.1 for ; Fri, 05 Dec 2025 16:18:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764980315; x=1765585115; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=YVw2IrEv6dj1lN2Egcfs+/+7XHiKcsFRJtntJAtFFMc=; b=RoABzGP+UBpFV9s0OwCFx+9KD0W8YqoEdZ19ykGLLvCGhum4htOXC7WShw581iwNVk +5N9h64+y23pIHG7j244zid9DVpNOAjJoTFbphQTaMmsF1PBPjx7kUuIxa+0VmQpENfj w5CX0WQgY5FumteWOFchGWs6uGuJ0pQmzpecXfqMaMlNmq9hgMNphiH3MK8fxc2Xajlo GnFlAv14CnLjBy20nyZg2ndwMZWYTg/b9JSvWNQHhfS5sO7IBlJHXJGSgXUWUjL8wysr igSDPgQ+W5V7Va4lkVsrXwaNPedaTi3NSvC2yG8yJRA5YfxwG4SS+/mUh8XPQ7k8Tj4e 7woA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764980315; x=1765585115; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=YVw2IrEv6dj1lN2Egcfs+/+7XHiKcsFRJtntJAtFFMc=; b=rfZ8J1t/fqAk3UWcwOcpcQU6QA8h//jRDOVjJG00USsqWqgNG9cuiKxdDhNVa5tM13 ja88eQGlva3BCsWBa+zzZDU1Z7zs02piEloqd+9Dwsy3Ll9cpNYPIo0FZN5UiQfWQfhV k932MvMipvFpKT0LGGpESDBJieEhIFlr2fJCMfAcp/hnliaZKjV6anvjbB2dET8MX3R5 g9Opd2O5idXO8Vub0zPJU0xq+RAErQ99OyYirix/+RG1K25/wr8R/ujwFwWJqgPLuTNS l7QA0pqSPZBBt9yXcP+YOD0+6uaBJpOE0oKNbSPNFn20TDGwGTC1RjTjfUfVk5/7ci2+ FYNw== X-Forwarded-Encrypted: i=1; AJvYcCWCZ4sEENNq/4rVtuyZRjvL9dhdUjdUu08pYmwFz2OVRTcmbxe3ZEzrj1U1mY+r6Dfk0pbcwHUOAeeQavY=@vger.kernel.org X-Gm-Message-State: AOJu0YyQSgkEZmfNZUgwini9qFLhj8G1WwMeE8cS2BuHv7wXo+kWxxjP VMOiFMZXLf4+dNIjt31tgnan21aigqpBXZ/5pr+cmmx97QDuXLXpOB4jxqt77Y/M/RA98TyrA3s D94QltQ== X-Google-Smtp-Source: AGHT+IH5qbAxlC2vbzunodq4KUrEtCHMXaoxZK4q8nETSOlwObwaBJfEq5OV6dsDt0Oyzwdbj6cNRcmYmOA= X-Received: from pjbfs2.prod.google.com ([2002:a17:90a:f282:b0:334:1843:ee45]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3ec7:b0:349:9d63:8511 with SMTP id 98e67ed59e1d1-349a25e3b79mr670940a91.25.1764980315199; Fri, 05 Dec 2025 16:18:35 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 5 Dec 2025 16:17:10 -0800 In-Reply-To: <20251206001720.468579-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20251206001720.468579-1-seanjc@google.com> X-Mailer: git-send-email 2.52.0.223.gf5cc29aaa4-goog Message-ID: <20251206001720.468579-35-seanjc@google.com> Subject: [PATCH v6 34/44] KVM: x86/pmu: Elide WRMSRs when loading guest PMCs if values already match From: Sean Christopherson To: Marc Zyngier , Oliver Upton , Tianrui Zhao , Bibo Mao , Huacai Chen , Anup Patel , Paul Walmsley , Palmer Dabbelt , Albert Ou , Xin Li , "H. Peter Anvin" , Andy Lutomirski , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Sean Christopherson , Paolo Bonzini Cc: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, kvm@vger.kernel.org, loongarch@lists.linux.dev, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Mingwei Zhang , Xudong Hao , Sandipan Das , Dapeng Mi , Xiong Zhang , Manali Shukla , Jim Mattson Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When loading a mediated PMU state, elide the WRMSRs to load PMCs with the guest's value if the value in hardware already matches the guest's value. For the relatively common case where neither the guest nor the host is actively using the PMU, i.e. when all/many counters are '0', eliding the WRMSRs reduces the latency of handling VM-Exit by a measurable amount (WRMSR is significantly more expensive than RDPMC). As measured by KVM-Unit-Tests' CPUID VM-Exit testcase, this provides a a ~25% reduction in latency (4k =3D> 3k cycles) on Intel Emerald Rapids, and a ~13% reduction (6.2k =3D> 5.3k cycles) on AMD Turin. Cc: Manali Shukla Tested-by: Xudong Hao Signed-off-by: Sean Christopherson --- arch/x86/kvm/pmu.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/pmu.c b/arch/x86/kvm/pmu.c index cb07d9b62bee..fdf1df3100eb 100644 --- a/arch/x86/kvm/pmu.c +++ b/arch/x86/kvm/pmu.c @@ -1314,13 +1314,15 @@ static void kvm_pmu_load_guest_pmcs(struct kvm_vcpu= *vcpu) for (i =3D 0; i < pmu->nr_arch_gp_counters; i++) { pmc =3D &pmu->gp_counters[i]; =20 - wrmsrl(gp_counter_msr(i), pmc->counter); + if (pmc->counter !=3D rdpmc(i)) + wrmsrl(gp_counter_msr(i), pmc->counter); wrmsrl(gp_eventsel_msr(i), pmc->eventsel_hw); } for (i =3D 0; i < pmu->nr_arch_fixed_counters; i++) { pmc =3D &pmu->fixed_counters[i]; =20 - wrmsrl(fixed_counter_msr(i), pmc->counter); + if (pmc->counter !=3D rdpmc(INTEL_PMC_FIXED_RDPMC_BASE | i)) + wrmsrl(fixed_counter_msr(i), pmc->counter); } } =20 --=20 2.52.0.223.gf5cc29aaa4-goog