From a87f5fdb3d1a23b9ad2475007c58c0969863293f Mon Sep 17 00:00:00 2001 From: Ray Ni Date: Wed, 7 Jun 2023 16:35:46 +0800 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. Signed-off-by: Ray Ni Cc: Eric Dong Cc: Rahul Kumar Cc: Gerd Hoffmann Reviewed-by: Jiaxin Wu Reviewed-by: Eric Dong --- 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 f6323f9230..6d5d2b2d63 100644 --- a/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.c +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.c @@ -38,16 +38,25 @@ InitializeMpPerf ( Migrate MP performance data to standardized performance database. @param NumberofCpus Number of processors in the platform. + @param BspIndex The 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 d9f0fb9bf6..591b212c06 100644 --- a/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.h +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/SmmMpPerf.h @@ -48,10 +48,12 @@ InitializeMpPerf ( Migrate MP performance data to standardized performance database. @param NumberofCpus Number of processors in the platform. + @param BspIndex The 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.