Message ID | 20231024075748.1675382-3-dapeng1.mi@linux.intel.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:ce89:0:b0:403:3b70:6f57 with SMTP id p9csp1780448vqx; Tue, 24 Oct 2023 00:51:55 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHx841iDq05oXweirvQiAKsJKzRoQCcilLDkyI2Y7fLTChUzV/NjN+eFFUDYIEVCvFABOYi X-Received: by 2002:aa7:9622:0:b0:68b:eb3d:8030 with SMTP id r2-20020aa79622000000b0068beb3d8030mr11966430pfg.1.1698133914894; Tue, 24 Oct 2023 00:51:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698133914; cv=none; d=google.com; s=arc-20160816; b=tPUgMO7boUZXA1V+Hjs9B23nd5JJ02yDh/1lgYsBmiMbSgqtLDaxEh1J356lZPP5At QyOPWa5gPwMFVOkJEd8hvMRB9qDmYxPl1HbN1mOLCPn6+czepdYoykgpQVDaBKgWZ40F c6wc4mYR75CtJ1tImRNGPBW/SGVb6Yvdnnn1uuMBzn4Htx2mrrd8t6nOb0QndsNDpcv8 mi1q3NvsBNXCZmuk4uDWP3nGGJmkV65Xd8v0HVFc/ozDVlqsVOJ7+1APBLdZlmw4MTUa 9tpAmQHVQUEzLWzWqiqmIywQyQnwCX/E6HejHQTqehSvSq4OcqrMGVV6BQm+iNfvEEYg HzFw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=TcwO5nm75xh6Wlbj3X2+N26Vm6pCG1Z8f4KHrMnKUzM=; fh=E3ilibYCxplRFz20OpOkjMj1lMKBPGRzcx1abGX98y8=; b=wdiXgbEVazmWc5dWhk5u16TIBGIFbv3uwEdatibJo8e/3285licSWvDHHbWULG0Ltx fHyShsCw7yDnCGQHpvkm1IoY/FDGcKgVO/3WGTFyJ764PHcyg47ULSSMPsUFpsOFZS0Y 1qSN0ixanlsydq0m362QRYP1JMCruK/S8r/xU0paDlKBU6LndKI2m9gGqHj1wyWOQ9vZ Q72TyLsTFfsCyH2uqppBWgLrP8DVSkPPh2DBgLJJ7Bf/sjvKwaZ2NSknV91jfDrObidf ETgPhR3nJxDJj13g4rW0j8ZMsQaEeW1bVviPrPJ8frOHaVIOH2wh5QzSEl2a0yBfvPzm 8HnA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=a8VMyX1m; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from howler.vger.email (howler.vger.email. [2620:137:e000::3:4]) by mx.google.com with ESMTPS id u186-20020a6385c3000000b0056a19c7c2e5si7625375pgd.361.2023.10.24.00.51.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Oct 2023 00:51:54 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) client-ip=2620:137:e000::3:4; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=a8VMyX1m; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id F1138806E4FD; Tue, 24 Oct 2023 00:51:51 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233815AbjJXHvL (ORCPT <rfc822;a1648639935@gmail.com> + 26 others); Tue, 24 Oct 2023 03:51:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35632 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233780AbjJXHvE (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Tue, 24 Oct 2023 03:51:04 -0400 Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.151]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9208210C1; Tue, 24 Oct 2023 00:51:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1698133861; x=1729669861; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=u6MzaXZPQ2+ms1NvX7VYQhNTuFQzAl/oK9iR7mXcQ0U=; b=a8VMyX1mIV1AQ4t1re4RhdyDbX+1wty1mjNGGFQ0LrJp1njK6tpilLvh Mnv1Hv7xGbSsHf2b1rrRpO69xDJFMmB4u3ZQ42oH9p2XA/kJw4/32oZDR x9cv8QapxGu1fSJAJNgRfpd6RODsy/jkvfFAersWEtBD2UY8LMr24gzaS j4OswjeImYaY9MScfYrDtMXaodClL1FXGby/z4mXn7Cw8iZgA4NQqASQX Y3yHaeMk3dt5aYr5ohLBxOOEni32KxK1p2P7u/HX05+zQ8eNhRvQO5lZE sb/tABgLSnVNHtzHJyjs1A8BcZz0daFiLUPHzLt5/zm5e8v2m4ITJGE1K A==; X-IronPort-AV: E=McAfee;i="6600,9927,10872"; a="367235196" X-IronPort-AV: E=Sophos;i="6.03,247,1694761200"; d="scan'208";a="367235196" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Oct 2023 00:51:01 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10872"; a="1089766271" X-IronPort-AV: E=Sophos;i="6.03,247,1694761200"; d="scan'208";a="1089766271" Received: from dmi-pnp-i7.sh.intel.com ([10.239.159.155]) by fmsmga005.fm.intel.com with ESMTP; 24 Oct 2023 00:50:58 -0700 From: Dapeng Mi <dapeng1.mi@linux.intel.com> To: Sean Christopherson <seanjc@google.com>, Paolo Bonzini <pbonzini@redhat.com> Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Zhenyu Wang <zhenyuw@linux.intel.com>, Zhang Xiong <xiong.y.zhang@intel.com>, Jim Mattson <jmattson@google.com>, Mingwei Zhang <mizhang@google.com>, Like Xu <like.xu.linux@gmail.com>, Dapeng Mi <dapeng1.mi@intel.com>, Dapeng Mi <dapeng1.mi@linux.intel.com> Subject: [kvm-unit-tests Patch 2/5] x86: pmu: Change the minimum value of llc_misses event to 0 Date: Tue, 24 Oct 2023 15:57:45 +0800 Message-Id: <20231024075748.1675382-3-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231024075748.1675382-1-dapeng1.mi@linux.intel.com> References: <20231024075748.1675382-1-dapeng1.mi@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on howler.vger.email Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (howler.vger.email [0.0.0.0]); Tue, 24 Oct 2023 00:51:52 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1780622468127019972 X-GMAIL-MSGID: 1780622468127019972 |
Series |
Fix PMU test failures on Sapphire Rapids
|
|
Commit Message
Mi, Dapeng
Oct. 24, 2023, 7:57 a.m. UTC
Along with the CPU HW's upgrade and optimization, the count of LLC
misses event for running loop() helper could be 0 just like seen on
Sapphire Rapids.
So modify the lower limit of possible count range for LLC misses
events to 0 to avoid LLC misses event test failure on Sapphire Rapids.
Signed-off-by: Dapeng Mi <dapeng1.mi@linux.intel.com>
---
x86/pmu.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Comments
On Tue, Oct 24, 2023 at 12:51 AM Dapeng Mi <dapeng1.mi@linux.intel.com> wrote: > > Along with the CPU HW's upgrade and optimization, the count of LLC > misses event for running loop() helper could be 0 just like seen on > Sapphire Rapids. > > So modify the lower limit of possible count range for LLC misses > events to 0 to avoid LLC misses event test failure on Sapphire Rapids. I'm not convinced that these tests are really indicative of whether or not the PMU is working properly. If 0 is allowed for llc misses, for instance, doesn't this sub-test pass even when the PMU is disabled? Surely, we can do better. > Signed-off-by: Dapeng Mi <dapeng1.mi@linux.intel.com> > --- > x86/pmu.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/x86/pmu.c b/x86/pmu.c > index 0def28695c70..7443fdab5c8a 100644 > --- a/x86/pmu.c > +++ b/x86/pmu.c > @@ -35,7 +35,7 @@ struct pmu_event { > {"instructions", 0x00c0, 10*N, 10.2*N}, > {"ref cycles", 0x013c, 1*N, 30*N}, > {"llc references", 0x4f2e, 1, 2*N}, > - {"llc misses", 0x412e, 1, 1*N}, > + {"llc misses", 0x412e, 0, 1*N}, > {"branches", 0x00c4, 1*N, 1.1*N}, > {"branch misses", 0x00c5, 0, 0.1*N}, > }, amd_gp_events[] = { > -- > 2.34.1 >
On 10/24/2023 9:03 PM, Jim Mattson wrote: > On Tue, Oct 24, 2023 at 12:51 AM Dapeng Mi <dapeng1.mi@linux.intel.com> wrote: >> Along with the CPU HW's upgrade and optimization, the count of LLC >> misses event for running loop() helper could be 0 just like seen on >> Sapphire Rapids. >> >> So modify the lower limit of possible count range for LLC misses >> events to 0 to avoid LLC misses event test failure on Sapphire Rapids. > I'm not convinced that these tests are really indicative of whether or > not the PMU is working properly. If 0 is allowed for llc misses, for > instance, doesn't this sub-test pass even when the PMU is disabled? > > Surely, we can do better. Considering the testing workload is just a simple adding loop, it's reasonable and possible that it gets a 0 result for LLC misses and branch misses events. Yeah, I agree the 0 count makes the results not so credible. If we want to avoid these 0 count values, we may have to complicate the workload, such as adding flush cache instructions, or something like that (I'm not sure if there are instructions which can force branch misses). How's your idea about this? > >> Signed-off-by: Dapeng Mi <dapeng1.mi@linux.intel.com> >> --- >> x86/pmu.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/x86/pmu.c b/x86/pmu.c >> index 0def28695c70..7443fdab5c8a 100644 >> --- a/x86/pmu.c >> +++ b/x86/pmu.c >> @@ -35,7 +35,7 @@ struct pmu_event { >> {"instructions", 0x00c0, 10*N, 10.2*N}, >> {"ref cycles", 0x013c, 1*N, 30*N}, >> {"llc references", 0x4f2e, 1, 2*N}, >> - {"llc misses", 0x412e, 1, 1*N}, >> + {"llc misses", 0x412e, 0, 1*N}, >> {"branches", 0x00c4, 1*N, 1.1*N}, >> {"branch misses", 0x00c5, 0, 0.1*N}, >> }, amd_gp_events[] = { >> -- >> 2.34.1 >>
On Wed, Oct 25, 2023 at 4:23 AM Mi, Dapeng <dapeng1.mi@linux.intel.com> wrote: > > > On 10/24/2023 9:03 PM, Jim Mattson wrote: > > On Tue, Oct 24, 2023 at 12:51 AM Dapeng Mi <dapeng1.mi@linux.intel.com> wrote: > >> Along with the CPU HW's upgrade and optimization, the count of LLC > >> misses event for running loop() helper could be 0 just like seen on > >> Sapphire Rapids. > >> > >> So modify the lower limit of possible count range for LLC misses > >> events to 0 to avoid LLC misses event test failure on Sapphire Rapids. > > I'm not convinced that these tests are really indicative of whether or > > not the PMU is working properly. If 0 is allowed for llc misses, for > > instance, doesn't this sub-test pass even when the PMU is disabled? > > > > Surely, we can do better. > > > Considering the testing workload is just a simple adding loop, it's > reasonable and possible that it gets a 0 result for LLC misses and > branch misses events. Yeah, I agree the 0 count makes the results not so > credible. If we want to avoid these 0 count values, we may have to > complicate the workload, such as adding flush cache instructions, or > something like that (I'm not sure if there are instructions which can > force branch misses). How's your idea about this? CLFLUSH is probably a good way to ensure cache misses. IBPB may be a good way to ensure branch mispredictions, or IBRS on parts without eIBRS. > > > > >> Signed-off-by: Dapeng Mi <dapeng1.mi@linux.intel.com> > >> --- > >> x86/pmu.c | 2 +- > >> 1 file changed, 1 insertion(+), 1 deletion(-) > >> > >> diff --git a/x86/pmu.c b/x86/pmu.c > >> index 0def28695c70..7443fdab5c8a 100644 > >> --- a/x86/pmu.c > >> +++ b/x86/pmu.c > >> @@ -35,7 +35,7 @@ struct pmu_event { > >> {"instructions", 0x00c0, 10*N, 10.2*N}, > >> {"ref cycles", 0x013c, 1*N, 30*N}, > >> {"llc references", 0x4f2e, 1, 2*N}, > >> - {"llc misses", 0x412e, 1, 1*N}, > >> + {"llc misses", 0x412e, 0, 1*N}, > >> {"branches", 0x00c4, 1*N, 1.1*N}, > >> {"branch misses", 0x00c5, 0, 0.1*N}, > >> }, amd_gp_events[] = { > >> -- > >> 2.34.1 > >>
On 10/25/2023 8:35 PM, Jim Mattson wrote: > On Wed, Oct 25, 2023 at 4:23 AM Mi, Dapeng <dapeng1.mi@linux.intel.com> wrote: >> >> On 10/24/2023 9:03 PM, Jim Mattson wrote: >>> On Tue, Oct 24, 2023 at 12:51 AM Dapeng Mi <dapeng1.mi@linux.intel.com> wrote: >>>> Along with the CPU HW's upgrade and optimization, the count of LLC >>>> misses event for running loop() helper could be 0 just like seen on >>>> Sapphire Rapids. >>>> >>>> So modify the lower limit of possible count range for LLC misses >>>> events to 0 to avoid LLC misses event test failure on Sapphire Rapids. >>> I'm not convinced that these tests are really indicative of whether or >>> not the PMU is working properly. If 0 is allowed for llc misses, for >>> instance, doesn't this sub-test pass even when the PMU is disabled? >>> >>> Surely, we can do better. >> >> Considering the testing workload is just a simple adding loop, it's >> reasonable and possible that it gets a 0 result for LLC misses and >> branch misses events. Yeah, I agree the 0 count makes the results not so >> credible. If we want to avoid these 0 count values, we may have to >> complicate the workload, such as adding flush cache instructions, or >> something like that (I'm not sure if there are instructions which can >> force branch misses). How's your idea about this? > CLFLUSH is probably a good way to ensure cache misses. IBPB may be a > good way to ensure branch mispredictions, or IBRS on parts without > eIBRS. Thanks Jim for the information. I'm not familiar with IBPB/IBRS instructions, but just a glance, it looks there two instructions are some kind of advanced instructions, Not all Intel CPUs support these instructions and not sure if AMD has similar instructions. It would be better if there are more generic instruction to trigger branch miss. Anyway I would look at the details and come back again. >>>> Signed-off-by: Dapeng Mi <dapeng1.mi@linux.intel.com> >>>> --- >>>> x86/pmu.c | 2 +- >>>> 1 file changed, 1 insertion(+), 1 deletion(-) >>>> >>>> diff --git a/x86/pmu.c b/x86/pmu.c >>>> index 0def28695c70..7443fdab5c8a 100644 >>>> --- a/x86/pmu.c >>>> +++ b/x86/pmu.c >>>> @@ -35,7 +35,7 @@ struct pmu_event { >>>> {"instructions", 0x00c0, 10*N, 10.2*N}, >>>> {"ref cycles", 0x013c, 1*N, 30*N}, >>>> {"llc references", 0x4f2e, 1, 2*N}, >>>> - {"llc misses", 0x412e, 1, 1*N}, >>>> + {"llc misses", 0x412e, 0, 1*N}, >>>> {"branches", 0x00c4, 1*N, 1.1*N}, >>>> {"branch misses", 0x00c5, 0, 0.1*N}, >>>> }, amd_gp_events[] = { >>>> -- >>>> 2.34.1 >>>>
On Wed, Oct 25, 2023 at 7:14 PM Mi, Dapeng <dapeng1.mi@linux.intel.com> wrote: > > > On 10/25/2023 8:35 PM, Jim Mattson wrote: > > On Wed, Oct 25, 2023 at 4:23 AM Mi, Dapeng <dapeng1.mi@linux.intel.com> wrote: > >> > >> On 10/24/2023 9:03 PM, Jim Mattson wrote: > >>> On Tue, Oct 24, 2023 at 12:51 AM Dapeng Mi <dapeng1.mi@linux.intel.com> wrote: > >>>> Along with the CPU HW's upgrade and optimization, the count of LLC > >>>> misses event for running loop() helper could be 0 just like seen on > >>>> Sapphire Rapids. > >>>> > >>>> So modify the lower limit of possible count range for LLC misses > >>>> events to 0 to avoid LLC misses event test failure on Sapphire Rapids. > >>> I'm not convinced that these tests are really indicative of whether or > >>> not the PMU is working properly. If 0 is allowed for llc misses, for > >>> instance, doesn't this sub-test pass even when the PMU is disabled? > >>> > >>> Surely, we can do better. > >> > >> Considering the testing workload is just a simple adding loop, it's > >> reasonable and possible that it gets a 0 result for LLC misses and > >> branch misses events. Yeah, I agree the 0 count makes the results not so > >> credible. If we want to avoid these 0 count values, we may have to > >> complicate the workload, such as adding flush cache instructions, or > >> something like that (I'm not sure if there are instructions which can > >> force branch misses). How's your idea about this? > > CLFLUSH is probably a good way to ensure cache misses. IBPB may be a > > good way to ensure branch mispredictions, or IBRS on parts without > > eIBRS. > > > Thanks Jim for the information. I'm not familiar with IBPB/IBRS > instructions, but just a glance, it looks there two instructions are > some kind of advanced instructions, Not all Intel CPUs support these > instructions and not sure if AMD has similar instructions. It would be > better if there are more generic instruction to trigger branch miss. > Anyway I would look at the details and come back again. IBPB and IBRS are not instructions. IBPB (indirect branch predictor barrier) is triggered by setting bit 0 of the IA32_PRED_CMD MSR. IBRS (indirect branch restricted speculation) is triggered by setting bit 0 of the IA32_SPEC_CTRL MSR. It is true that the desired behavior of IBRS (causing branch mispredictions) is only exhibited by certain older parts. However, IBPB is now universally available, as it is necessary to mitigate many speculative execution attacks. For Intel documentation, see https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/cpuid-enumeration-and-architectural-msrs.html. If you don't want to use these, you could train a branch to go one way prior to measurement, and then arrange for the branch under test go the other way. > >>>> Signed-off-by: Dapeng Mi <dapeng1.mi@linux.intel.com> > >>>> --- > >>>> x86/pmu.c | 2 +- > >>>> 1 file changed, 1 insertion(+), 1 deletion(-) > >>>> > >>>> diff --git a/x86/pmu.c b/x86/pmu.c > >>>> index 0def28695c70..7443fdab5c8a 100644 > >>>> --- a/x86/pmu.c > >>>> +++ b/x86/pmu.c > >>>> @@ -35,7 +35,7 @@ struct pmu_event { > >>>> {"instructions", 0x00c0, 10*N, 10.2*N}, > >>>> {"ref cycles", 0x013c, 1*N, 30*N}, > >>>> {"llc references", 0x4f2e, 1, 2*N}, > >>>> - {"llc misses", 0x412e, 1, 1*N}, > >>>> + {"llc misses", 0x412e, 0, 1*N}, > >>>> {"branches", 0x00c4, 1*N, 1.1*N}, > >>>> {"branch misses", 0x00c5, 0, 0.1*N}, > >>>> }, amd_gp_events[] = { > >>>> -- > >>>> 2.34.1 > >>>>
On 10/26/2023 8:19 PM, Jim Mattson wrote: > On Wed, Oct 25, 2023 at 7:14 PM Mi, Dapeng <dapeng1.mi@linux.intel.com> wrote: >> >> On 10/25/2023 8:35 PM, Jim Mattson wrote: >>> On Wed, Oct 25, 2023 at 4:23 AM Mi, Dapeng <dapeng1.mi@linux.intel.com> wrote: >>>> On 10/24/2023 9:03 PM, Jim Mattson wrote: >>>>> On Tue, Oct 24, 2023 at 12:51 AM Dapeng Mi <dapeng1.mi@linux.intel.com> wrote: >>>>>> Along with the CPU HW's upgrade and optimization, the count of LLC >>>>>> misses event for running loop() helper could be 0 just like seen on >>>>>> Sapphire Rapids. >>>>>> >>>>>> So modify the lower limit of possible count range for LLC misses >>>>>> events to 0 to avoid LLC misses event test failure on Sapphire Rapids. >>>>> I'm not convinced that these tests are really indicative of whether or >>>>> not the PMU is working properly. If 0 is allowed for llc misses, for >>>>> instance, doesn't this sub-test pass even when the PMU is disabled? >>>>> >>>>> Surely, we can do better. >>>> Considering the testing workload is just a simple adding loop, it's >>>> reasonable and possible that it gets a 0 result for LLC misses and >>>> branch misses events. Yeah, I agree the 0 count makes the results not so >>>> credible. If we want to avoid these 0 count values, we may have to >>>> complicate the workload, such as adding flush cache instructions, or >>>> something like that (I'm not sure if there are instructions which can >>>> force branch misses). How's your idea about this? >>> CLFLUSH is probably a good way to ensure cache misses. IBPB may be a >>> good way to ensure branch mispredictions, or IBRS on parts without >>> eIBRS. >> >> Thanks Jim for the information. I'm not familiar with IBPB/IBRS >> instructions, but just a glance, it looks there two instructions are >> some kind of advanced instructions, Not all Intel CPUs support these >> instructions and not sure if AMD has similar instructions. It would be >> better if there are more generic instruction to trigger branch miss. >> Anyway I would look at the details and come back again. > IBPB and IBRS are not instructions. IBPB (indirect branch predictor > barrier) is triggered by setting bit 0 of the IA32_PRED_CMD MSR. IBRS > (indirect branch restricted speculation) is triggered by setting bit 0 > of the IA32_SPEC_CTRL MSR. It is true that the desired behavior of > IBRS (causing branch mispredictions) is only exhibited by certain > older parts. However, IBPB is now universally available, as it is > necessary to mitigate many speculative execution attacks. For Intel > documentation, see > https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/cpuid-enumeration-and-architectural-msrs.html. > > If you don't want to use these, you could train a branch to go one way > prior to measurement, and then arrange for the branch under test go > the other way. Thanks Jim. From my point of view, IBPB is still some kind of extended feature which may be not supported on some older platforms. Considering kvm-unit-tests could still be run on these old platforms, IBPB seems not the best choice. I'm thinking an alternative way is to use the 'rdrand' instruction to get a random value, and then call jmp instruction base on the random value results. That would definitely cause branch misses. This looks more generic. > >>>>>> Signed-off-by: Dapeng Mi <dapeng1.mi@linux.intel.com> >>>>>> --- >>>>>> x86/pmu.c | 2 +- >>>>>> 1 file changed, 1 insertion(+), 1 deletion(-) >>>>>> >>>>>> diff --git a/x86/pmu.c b/x86/pmu.c >>>>>> index 0def28695c70..7443fdab5c8a 100644 >>>>>> --- a/x86/pmu.c >>>>>> +++ b/x86/pmu.c >>>>>> @@ -35,7 +35,7 @@ struct pmu_event { >>>>>> {"instructions", 0x00c0, 10*N, 10.2*N}, >>>>>> {"ref cycles", 0x013c, 1*N, 30*N}, >>>>>> {"llc references", 0x4f2e, 1, 2*N}, >>>>>> - {"llc misses", 0x412e, 1, 1*N}, >>>>>> + {"llc misses", 0x412e, 0, 1*N}, >>>>>> {"branches", 0x00c4, 1*N, 1.1*N}, >>>>>> {"branch misses", 0x00c5, 0, 0.1*N}, >>>>>> }, amd_gp_events[] = { >>>>>> -- >>>>>> 2.34.1 >>>>>>
diff --git a/x86/pmu.c b/x86/pmu.c index 0def28695c70..7443fdab5c8a 100644 --- a/x86/pmu.c +++ b/x86/pmu.c @@ -35,7 +35,7 @@ struct pmu_event { {"instructions", 0x00c0, 10*N, 10.2*N}, {"ref cycles", 0x013c, 1*N, 30*N}, {"llc references", 0x4f2e, 1, 2*N}, - {"llc misses", 0x412e, 1, 1*N}, + {"llc misses", 0x412e, 0, 1*N}, {"branches", 0x00c4, 1*N, 1.1*N}, {"branch misses", 0x00c5, 0, 0.1*N}, }, amd_gp_events[] = {