Re: [edk2-devel] [PATCH] UefiCpuPkg/SmmCpu: Add PcdSmmApPerfLogEnable control AP perf-logging
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
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
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] -=-=-=-=-=-=-=-=-=-=-=-