From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E164DC87FD3 for ; Wed, 6 Aug 2025 21:55:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Reply-To:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Type:Cc:To: From:Subject:Message-ID:References:Mime-Version:In-Reply-To:Date: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=FEfQdODxvc/WYDgKcBJNCqpRp5QcBVEYBtlnYDr8f+A=; b=DeELSDBLeJKfXWank7+xKivNaW 87S8veqM9I2I+VkUn+dJ1/YjCl6CfJuQwG1az+GkEoSyAkAJiwVYWAKBUk2IOha/5KCMYUyx+PFWj kLlPDbFavjCw15RQA4BFRy8XpPTs1myihDKPmB52sF//WYyD404B4AN1LRV1TNHREOeNtbTlSI9kg J8OsXqLoXH5YjjNqsen/H1LfH0WOGpPwisG4Jo5A+3nP6RA83zy2xHBfr1fBIDV+YBYFHbolIx/xm tWylXn04kX2nBnf1P+qRx0DLhVZWL4v+EtXF8Nzmp93DWHZVb4j4DPpbLX07itWlcGIVf4N9Z01zg GzkGRpcA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1ujm6D-0000000GeTw-1ZJy; Wed, 06 Aug 2025 21:55:05 +0000 Received: from mail-pg1-x549.google.com ([2607:f8b0:4864:20::549]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1ujkHh-0000000GHGj-0IRj for linux-arm-kernel@lists.infradead.org; Wed, 06 Aug 2025 19:58:50 +0000 Received: by mail-pg1-x549.google.com with SMTP id 41be03b00d2f7-b4253124e77so125594a12.2 for ; Wed, 06 Aug 2025 12:58:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1754510328; x=1755115128; darn=lists.infradead.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=FEfQdODxvc/WYDgKcBJNCqpRp5QcBVEYBtlnYDr8f+A=; b=eRuV09HOdk4SWWulYarCvwBR3let4rMrNc6jKyYxwtkjCAYyC3War6D3vuTaG/idoa zAPilGBfOSHaWxRB2L8OEBQT2Kru6yndgMgWn6aayFtUEjvuw2m/wMbUBOCfQ7j6oUKw bDpUMe6nQ+4ZSjtgQEbjiC+0n8C1+lSCy4zeirRl9fteiJC9lNlxEMOohmmBsAnAWAFs /ODjR6+s9Dbk8sCEXSFfZCDwo3/HDmI51FI7G8zzjeEORRqJG2IdQCv6jY+FlFdcvN7u kSQK36p/cY4rbbfmlcQpDwTOHFdpdnMyHHwoLR2VJi6om6hYryPTbwzPXuQtqqnZkqTo MGbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754510328; x=1755115128; 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=FEfQdODxvc/WYDgKcBJNCqpRp5QcBVEYBtlnYDr8f+A=; b=l8WFswJ2Qa1yp12IZ8TxEPSjf2aYA3wSbFMVjiXs1o8AvLoO/0YJ/z1hPY83ETn1IX j345Od48AbnYf2HOl9lG9ny46QZ/NPXCvGdOelxKcdX4SuX8gSYCorYZZi2SIzsLxlPi Wl+SvIiXH2qYE8F36nB9nyRYFAqdAKqTc31c9VXWFs/JrGSKna5nyeBlM3Nrsb6M7q1V SumfRRwOtidB5ebTaBIja05/Gsi+C0VL5VC+0Ro3kcm0fpp9Zy3kmusydtgzi1RBbFPN 53nbTUtaRfkGdkLo5YK7ze21N6XnzgLWGstDeB/HtrpDsI2cxuqi9nVbJdYBl/UJKO2/ ERHg== X-Gm-Message-State: AOJu0YyX1fHtLvmSaen4B7aNUR1QGYwEH1zgxOeHC0uLGytLmSkaiD3k g+b3jB7uqgTN4qEFhK+L1Smg491dbhFdPgVlSCjyrcOwFwz/NtLSBbDMjSMfoLF0v54+VsKY4Uh BL/QkMg== X-Google-Smtp-Source: AGHT+IHKT98t7sh+NJ88sddK4YezK7lHLHfrTfL2AYLv+RO+SAkhLkiCccC37Go9T+seI3ZwHUra06wFxFw= X-Received: from plbmp11.prod.google.com ([2002:a17:902:fd0b:b0:23f:fa41:1de3]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:3bcc:b0:234:c8ec:51b5 with SMTP id d9443c01a7336-242a0bffb31mr47813405ad.53.1754510327813; Wed, 06 Aug 2025 12:58:47 -0700 (PDT) Date: Wed, 6 Aug 2025 12:57:06 -0700 In-Reply-To: <20250806195706.1650976-1-seanjc@google.com> Mime-Version: 1.0 References: <20250806195706.1650976-1-seanjc@google.com> X-Mailer: git-send-email 2.50.1.565.gc32cd1483b-goog Message-ID: <20250806195706.1650976-45-seanjc@google.com> Subject: [PATCH v5 44/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, Kan Liang , Yongwei Ma , Mingwei Zhang , Xiong Zhang , Sandipan Das , Dapeng Mi Content-Type: text/plain; charset="UTF-8" X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250806_125849_101663_158AD99F X-CRM114-Status: GOOD ( 14.03 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Sean Christopherson Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org 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 => 3k cycles) on Intel Emerald Rapids, and a ~13% reduction (6.2k => 5.3k cycles) on AMD Turing. 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 ddab1630a978..0e5048ae86fa 100644 --- a/arch/x86/kvm/pmu.c +++ b/arch/x86/kvm/pmu.c @@ -1299,13 +1299,15 @@ static void kvm_pmu_load_guest_pmcs(struct kvm_vcpu *vcpu) for (i = 0; i < pmu->nr_arch_gp_counters; i++) { pmc = &pmu->gp_counters[i]; - wrmsrl(gp_counter_msr(i), pmc->counter); + if (pmc->counter != rdpmc(i)) + wrmsrl(gp_counter_msr(i), pmc->counter); wrmsrl(gp_eventsel_msr(i), pmc->eventsel_hw); } for (i = 0; i < pmu->nr_arch_fixed_counters; i++) { pmc = &pmu->fixed_counters[i]; - wrmsrl(fixed_counter_msr(i), pmc->counter); + if (pmc->counter != rdpmc(INTEL_PMC_FIXED_RDPMC_BASE | i)) + wrmsrl(fixed_counter_msr(i), pmc->counter); } } -- 2.50.1.565.gc32cd1483b-goog