Re: [edk2-devel] [PATCH] UefiCpuPkg/SmmCpu: Add PcdSmmApPerfLogEnable control AP perf-logging

2023-06-08 Thread Dong, Eric
Looks good to me.

Thanks,
Eric

-Original Message-
From: Ni, Ray  
Sent: Wednesday, June 7, 2023 4:38 PM
To: devel@edk2.groups.io
Cc: Dong, Eric ; Kumar, Rahul R ; 
Gerd Hoffmann 
Subject: [PATCH] UefiCpuPkg/SmmCpu: Add PcdSmmApPerfLogEnable control AP 
perf-logging

When a platform has lots of CPU cores/threads, perf-logging on every
AP produces lots of records. When this multiplies with number of SMIs
during post, the records are even more.

So, this patch adds a new PCD PcdSmmApPerfLogEnable (default TRUE)
to allow platform to turn off perf-logging on APs.

Cc: Eric Dong 
Cc: Rahul Kumar 
Cc: Gerd Hoffmann 
---
 UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c|  2 +-
 UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf |  1 +
 UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.c| 11 ++-
 UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.h|  4 +++-
 UefiCpuPkg/UefiCpuPkg.dec|  6 ++
 5 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c 
b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
index bcd90f0671..8364b73242 100644
--- a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
+++ b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
@@ -784,7 +784,7 @@ BSPHandler (
   // Any SMM MP performance logging after this point will be migrated in next 
SMI.

   //

   PERF_CODE (

-MigrateMpPerf (gSmmCpuPrivate->SmmCoreEntryContext.NumberOfCpus);

+MigrateMpPerf (gSmmCpuPrivate->SmmCoreEntryContext.NumberOfCpus, CpuIndex);

 );

 

   //

diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf 
b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf
index 4864532c35..d864ae9101 100644
--- a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf
+++ b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf
@@ -128,6 +128,7 @@
   gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmProfileRingBuffer ## CONSUMES

   gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmFeatureControlMsrLock ## CONSUMES

   gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode ## CONSUMES

+  gUefiCpuPkgTokenSpaceGuid.PcdSmmApPerfLogEnable  ## CONSUMES

 

 [Pcd]

   gUefiCpuPkgTokenSpaceGuid.PcdCpuMaxLogicalProcessorNumber## 
SOMETIMES_CONSUMES

diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.c 
b/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.c
index c13556af46..92c67f31bf 100644
--- a/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.c
+++ b/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.c
@@ -39,16 +39,25 @@ InitializeMpPerf (
   Migrate MP performance data to standardized performance database.

 

   @param NumberofCpusNumber of processors in the platform.

+  @param BspIndexThe index of the BSP.

 **/

 VOID

 MigrateMpPerf (

-  UINTN  NumberofCpus

+  UINTN  NumberofCpus,

+  UINTN  BspIndex

   )

 {

   UINTN  CpuIndex;

   UINTN  MpProcecureId;

 

   for (CpuIndex = 0; CpuIndex < NumberofCpus; CpuIndex++) {

+if ((CpuIndex != BspIndex) && !FeaturePcdGet (PcdSmmApPerfLogEnable)) {

+  //

+  // Skip migrating AP performance data if AP perf-logging is disabled.

+  //

+  continue;

+}

+

 for (MpProcecureId = 0; MpProcecureId < SMM_MP_PERF_PROCEDURE_ID 
(SmmMpProcedureMax); MpProcecureId++) {

   if (mSmmMpProcedurePerformance[CpuIndex].Begin[MpProcecureId] != 0) {

 PERF_START (NULL, gSmmMpPerfProcedureName[MpProcecureId], NULL, 
mSmmMpProcedurePerformance[CpuIndex].Begin[MpProcecureId]);

diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.h 
b/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.h
index b148a99e86..5ad1734cc8 100644
--- a/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.h
+++ b/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.h
@@ -44,10 +44,12 @@ InitializeMpPerf (
   Migrate MP performance data to standardized performance database.

 

   @param NumberofCpusNumber of processors in the platform.

+  @param BspIndexThe index of the BSP.

 **/

 VOID

 MigrateMpPerf (

-  UINTN  NumberofCpus

+  UINTN  NumberofCpus,

+  UINTN  BspIndex

   );

 

 /**

diff --git a/UefiCpuPkg/UefiCpuPkg.dec b/UefiCpuPkg/UefiCpuPkg.dec
index d31c3b127c..5b0ac64e33 100644
--- a/UefiCpuPkg/UefiCpuPkg.dec
+++ b/UefiCpuPkg/UefiCpuPkg.dec
@@ -175,6 +175,12 @@
   # @Prompt Support SmmFeatureControl.

   gUefiCpuPkgTokenSpaceGuid.PcdSmmFeatureControlEnable|TRUE|BOOLEAN|0x32132110

 

+  ## Indicates if SMM perf logging in APs will be enabled.

+  #   TRUE  - SMM perf logging in APs will be enabled.

+  #   FALSE - SMM perf logging in APs will not be enabled.

+  # @Prompt Enable SMM perf logging in APs.

+  gUefiCpuPkgTokenSpaceGuid.PcdSmmApPerfLogEnable|TRUE|BOOLEAN|0x32132114

+

 [PcdsFixedAtBuild]

   ## List of exception vectors which need switching stack.

   #  This PCD will only take into effect if PcdCpuStackGuard is enabled.

-- 
2.39.1.windows.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#105965): https://edk2.groups.io/g/devel/message/105965
Mute This Topic: https://groups.io/mt/99380509/21656
Group Owner: devel+ow...@edk2.groups.io

Re: [edk2-devel] [PATCH] UefiCpuPkg/SmmCpu: Add PcdSmmApPerfLogEnable control AP perf-logging

2023-06-07 Thread Ni, Ray
This patch is based on patch series: 
https://edk2.groups.io/g/devel/message/105492.
I don't want to send a V3 for just including the additional patch.

> -Original Message-
> From: devel@edk2.groups.io  On Behalf Of Ni, Ray
> Sent: Wednesday, June 7, 2023 4:38 PM
> To: devel@edk2.groups.io
> Cc: Dong, Eric ; Kumar, Rahul R
> ; Gerd Hoffmann 
> Subject: [edk2-devel] [PATCH] UefiCpuPkg/SmmCpu: Add
> PcdSmmApPerfLogEnable control AP perf-logging
> 
> When a platform has lots of CPU cores/threads, perf-logging on every
> AP produces lots of records. When this multiplies with number of SMIs
> during post, the records are even more.
> 
> So, this patch adds a new PCD PcdSmmApPerfLogEnable (default TRUE)
> to allow platform to turn off perf-logging on APs.
> 
> Cc: Eric Dong 
> Cc: Rahul Kumar 
> Cc: Gerd Hoffmann 
> ---
>  UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c|  2 +-
>  UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf |  1 +
>  UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.c| 11 ++-
>  UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.h|  4 +++-
>  UefiCpuPkg/UefiCpuPkg.dec|  6 ++
>  5 files changed, 21 insertions(+), 3 deletions(-)
> 
> diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
> b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
> index bcd90f0671..8364b73242 100644
> --- a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
> +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
> @@ -784,7 +784,7 @@ BSPHandler (
>// Any SMM MP performance logging after this point will be migrated in next
> SMI.
> 
>//
> 
>PERF_CODE (
> 
> -MigrateMpPerf (gSmmCpuPrivate->SmmCoreEntryContext.NumberOfCpus);
> 
> +MigrateMpPerf (gSmmCpuPrivate->SmmCoreEntryContext.NumberOfCpus,
> CpuIndex);
> 
>  );
> 
> 
> 
>//
> 
> diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf
> b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf
> index 4864532c35..d864ae9101 100644
> --- a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf
> +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf
> @@ -128,6 +128,7 @@
>gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmProfileRingBuffer ##
> CONSUMES
> 
>gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmFeatureControlMsrLock ##
> CONSUMES
> 
>gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode ##
> CONSUMES
> 
> +  gUefiCpuPkgTokenSpaceGuid.PcdSmmApPerfLogEnable  ##
> CONSUMES
> 
> 
> 
>  [Pcd]
> 
>gUefiCpuPkgTokenSpaceGuid.PcdCpuMaxLogicalProcessorNumber##
> SOMETIMES_CONSUMES
> 
> diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.c
> b/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.c
> index c13556af46..92c67f31bf 100644
> --- a/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.c
> +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.c
> @@ -39,16 +39,25 @@ InitializeMpPerf (
>Migrate MP performance data to standardized performance database.
> 
> 
> 
>@param NumberofCpusNumber of processors in the platform.
> 
> +  @param BspIndexThe index of the BSP.
> 
>  **/
> 
>  VOID
> 
>  MigrateMpPerf (
> 
> -  UINTN  NumberofCpus
> 
> +  UINTN  NumberofCpus,
> 
> +  UINTN  BspIndex
> 
>)
> 
>  {
> 
>UINTN  CpuIndex;
> 
>UINTN  MpProcecureId;
> 
> 
> 
>for (CpuIndex = 0; CpuIndex < NumberofCpus; CpuIndex++) {
> 
> +if ((CpuIndex != BspIndex) && !FeaturePcdGet (PcdSmmApPerfLogEnable)) {
> 
> +  //
> 
> +  // Skip migrating AP performance data if AP perf-logging is disabled.
> 
> +  //
> 
> +  continue;
> 
> +}
> 
> +
> 
>  for (MpProcecureId = 0; MpProcecureId < SMM_MP_PERF_PROCEDURE_ID
> (SmmMpProcedureMax); MpProcecureId++) {
> 
>if (mSmmMpProcedurePerformance[CpuIndex].Begin[MpProcecureId] != 0) {
> 
>  PERF_START (NULL, gSmmMpPerfProcedureName[MpProcecureId], NULL,
> mSmmMpProcedurePerformance[CpuIndex].Begin[MpProcecureId]);
> 
> diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.h
> b/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.h
> index b148a99e86..5ad1734cc8 100644
> --- a/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.h
> +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.h
> @@ -44,10 +44,12 @@ InitializeMpPerf (
>Migrate MP performance data to standardized performance database.
> 
> 
> 
>@param NumberofCpusNumber of processors in the platform.
> 
> +  @param BspIndexThe index of the BSP.
> 
>  **/
> 
>  VOID
> 
>  MigrateMpPerf (
> 
> -  UINTN  NumberofCpus
> 
> +  UINTN  NumberofCpus,
> 
> +  UINTN  BspIndex
> 
>);
> 
> 
> 
>  /**
> 
> diff --git a/UefiCpuPkg/UefiCpuPkg.de

[edk2-devel] [PATCH] UefiCpuPkg/SmmCpu: Add PcdSmmApPerfLogEnable control AP perf-logging

2023-06-07 Thread Ni, Ray
When a platform has lots of CPU cores/threads, perf-logging on every
AP produces lots of records. When this multiplies with number of SMIs
during post, the records are even more.

So, this patch adds a new PCD PcdSmmApPerfLogEnable (default TRUE)
to allow platform to turn off perf-logging on APs.

Cc: Eric Dong 
Cc: Rahul Kumar 
Cc: Gerd Hoffmann 
---
 UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c|  2 +-
 UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf |  1 +
 UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.c| 11 ++-
 UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.h|  4 +++-
 UefiCpuPkg/UefiCpuPkg.dec|  6 ++
 5 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c 
b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
index bcd90f0671..8364b73242 100644
--- a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
+++ b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
@@ -784,7 +784,7 @@ BSPHandler (
   // Any SMM MP performance logging after this point will be migrated in next 
SMI.
   //
   PERF_CODE (
-MigrateMpPerf (gSmmCpuPrivate->SmmCoreEntryContext.NumberOfCpus);
+MigrateMpPerf (gSmmCpuPrivate->SmmCoreEntryContext.NumberOfCpus, CpuIndex);
 );
 
   //
diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf 
b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf
index 4864532c35..d864ae9101 100644
--- a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf
+++ b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf
@@ -128,6 +128,7 @@
   gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmProfileRingBuffer ## CONSUMES
   gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmFeatureControlMsrLock ## CONSUMES
   gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode ## CONSUMES
+  gUefiCpuPkgTokenSpaceGuid.PcdSmmApPerfLogEnable  ## CONSUMES
 
 [Pcd]
   gUefiCpuPkgTokenSpaceGuid.PcdCpuMaxLogicalProcessorNumber## 
SOMETIMES_CONSUMES
diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.c 
b/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.c
index c13556af46..92c67f31bf 100644
--- a/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.c
+++ b/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.c
@@ -39,16 +39,25 @@ InitializeMpPerf (
   Migrate MP performance data to standardized performance database.
 
   @param NumberofCpusNumber of processors in the platform.
+  @param BspIndexThe index of the BSP.
 **/
 VOID
 MigrateMpPerf (
-  UINTN  NumberofCpus
+  UINTN  NumberofCpus,
+  UINTN  BspIndex
   )
 {
   UINTN  CpuIndex;
   UINTN  MpProcecureId;
 
   for (CpuIndex = 0; CpuIndex < NumberofCpus; CpuIndex++) {
+if ((CpuIndex != BspIndex) && !FeaturePcdGet (PcdSmmApPerfLogEnable)) {
+  //
+  // Skip migrating AP performance data if AP perf-logging is disabled.
+  //
+  continue;
+}
+
 for (MpProcecureId = 0; MpProcecureId < SMM_MP_PERF_PROCEDURE_ID 
(SmmMpProcedureMax); MpProcecureId++) {
   if (mSmmMpProcedurePerformance[CpuIndex].Begin[MpProcecureId] != 0) {
 PERF_START (NULL, gSmmMpPerfProcedureName[MpProcecureId], NULL, 
mSmmMpProcedurePerformance[CpuIndex].Begin[MpProcecureId]);
diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.h 
b/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.h
index b148a99e86..5ad1734cc8 100644
--- a/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.h
+++ b/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.h
@@ -44,10 +44,12 @@ InitializeMpPerf (
   Migrate MP performance data to standardized performance database.
 
   @param NumberofCpusNumber of processors in the platform.
+  @param BspIndexThe index of the BSP.
 **/
 VOID
 MigrateMpPerf (
-  UINTN  NumberofCpus
+  UINTN  NumberofCpus,
+  UINTN  BspIndex
   );
 
 /**
diff --git a/UefiCpuPkg/UefiCpuPkg.dec b/UefiCpuPkg/UefiCpuPkg.dec
index d31c3b127c..5b0ac64e33 100644
--- a/UefiCpuPkg/UefiCpuPkg.dec
+++ b/UefiCpuPkg/UefiCpuPkg.dec
@@ -175,6 +175,12 @@
   # @Prompt Support SmmFeatureControl.
   gUefiCpuPkgTokenSpaceGuid.PcdSmmFeatureControlEnable|TRUE|BOOLEAN|0x32132110
 
+  ## Indicates if SMM perf logging in APs will be enabled.
+  #   TRUE  - SMM perf logging in APs will be enabled.
+  #   FALSE - SMM perf logging in APs will not be enabled.
+  # @Prompt Enable SMM perf logging in APs.
+  gUefiCpuPkgTokenSpaceGuid.PcdSmmApPerfLogEnable|TRUE|BOOLEAN|0x32132114
+
 [PcdsFixedAtBuild]
   ## List of exception vectors which need switching stack.
   #  This PCD will only take into effect if PcdCpuStackGuard is enabled.
-- 
2.39.1.windows.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#105852): https://edk2.groups.io/g/devel/message/105852
Mute This Topic: https://groups.io/mt/99380509/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: 
https://edk2.groups.io/g/devel/leave/9847357/21656/1706620634/xyzzy 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-