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 <ray.ni@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Rahul Kumar <rahul1.kumar@intel.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Jiaxin Wu <jiaxin.wu@intel.com>
Reviewed-by: Eric Dong <eric.dong@intel.com>
This commit is contained in:
Ray Ni 2023-06-07 16:35:46 +08:00 committed by mergify[bot]
parent 2d3974a351
commit a87f5fdb3d
5 changed files with 21 additions and 3 deletions

View File

@ -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);
);
//

View File

@ -128,6 +128,7 @@
gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmProfileRingBuffer ## CONSUMES
gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmFeatureControlMsrLock ## CONSUMES
gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode ## CONSUMES
gUefiCpuPkgTokenSpaceGuid.PcdSmmApPerfLogEnable ## CONSUMES
[Pcd]
gUefiCpuPkgTokenSpaceGuid.PcdCpuMaxLogicalProcessorNumber ## SOMETIMES_CONSUMES

View File

@ -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]);

View File

@ -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
);
/**

View File

@ -175,6 +175,12 @@
# @Prompt Support SmmFeatureControl.
gUefiCpuPkgTokenSpaceGuid.PcdSmmFeatureControlEnable|TRUE|BOOLEAN|0x32132110
## Indicates if SMM perf logging in APs will be enabled.<BR><BR>
# TRUE - SMM perf logging in APs will be enabled.<BR>
# FALSE - SMM perf logging in APs will not be enabled.<BR>
# @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.