public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Andrew Fish <afish@apple.com>
To: prabin ca <prabinca4u@gmail.com>
Cc: edk2-devel <edk2-devel@lists.01.org>, Laszlo Ersek <lersek@redhat.com>
Subject: Re: PerformancePkg on multiple platform -
Date: Fri, 03 Aug 2018 11:38:29 -0700	[thread overview]
Message-ID: <0A491E19-F3A7-46BF-A4BA-9D54B2D1432E@apple.com> (raw)
In-Reply-To: <1deaed58-5098-aa30-b401-f415a034957d@redhat.com>

Prabin,

There is a PCD setting to configure performance collection. 

PCDs are defined in the .DEC file and it looks like the default is zero and that means disabled. 
MdePkg/MdePkg.dec
...
  ## The mask is used to control PerformanceLib behavior.<BR><BR>
  #  BIT0 - Enable Performance Measurement.<BR>
  # @Prompt Performance Measurement Property.
  # @Expression  0x80000002 | (gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask & 0xFE) == 0
  gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask|0|UINT8|0x00000009

If you search the code you will see some platforms enabling performance measurement in their DSC files. 

/Volumes/Case/UDK2018(vUDK2018)>git grep gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask -- *.dsc
BeagleBoardPkg/BeagleBoardPkg.dsc:272:  gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask|1
EmbeddedPkg/EmbeddedPkg.dsc:175:  gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask|0
QuarkPlatformPkg/Quark.dsc:373:  gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask|0x1
QuarkPlatformPkg/Quark.dsc:376:  gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask|0x00
QuarkPlatformPkg/QuarkMin.dsc:334:  gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask|0x1
QuarkPlatformPkg/QuarkMin.dsc:337:  gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask|0x00
Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc:682:  gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask|0x1
Vlv2TbltDevicePkg/PlatformPkgIA32.dsc:682:  gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask|0x1
Vlv2TbltDevicePkg/PlatformPkgX64.dsc:682:  gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask|0x1

So I'd check that 1st. If that does not work I recommend adding -report-file=build.log to your build command. You can look at the given driver/app you care about and see what the PCD settings are and which instance of the PerformanceLib got linked. 

Thanks,

Andrew Fish

> On Aug 3, 2018, at 11:17 AM, Laszlo Ersek <lersek@redhat.com> wrote:
> 
> Hi Prabin,
> 
> On 08/03/18 09:29, prabin ca wrote:
>> Hi Team,
>> 
>> I’m new to uefi and edk. Currently I’m trying to get performance of my dxe driver using PerformancePkg of EDK source code.
>> 
>> I’m using perf_start and perf_end T respected check points, it’s hot build and tested well in 2/3 platform. It’s giving proper response.
>> 
>> But when I’m Checking with multiple platform, in some of platforms it’s not working and got hang in uefi she’ll itself.
>> 
>> Please help me to resolve asap, it will be really helpful.
> 
> I can only give you some hints, because thus far I have also failed to
> figure out how performance measurements should be enabled for a platform
> from scratch.
> 
> Earlier I thought that an interested platform should include modules
> from PerformancePkg. I got some good results that way; however:
> 
> - it wouldn't work for AARCH64, and so I filed
>  <https://bugzilla.tianocore.org/show_bug.cgi?id=679>
> 
> - ultimately PerformancePkg was removed in commit 922c1e94e4bb
>  completely. (And for that reason I now closed TianoCore#679 as
>  WONTFIX.)
> 
> Commit 922c1e94e4bb doesn't really give pointers for enabling
> performance measurements in a platform -- it refers the user to the DP
> shell command instead of the standalone DP application, but that's only
> for displaying the stats, not for recording them.
> 
> One document where I found information is the Intel whitepaper
> 
>  A Tour Beyond BIOS
>  Implementing Profiling in with EDK II
> 
> (just google it). "Part III – Performance Profile" is relevant.
> 
> The first section of that talks about enabling ACPI FPDT (ACPI Firmware
> Performance Data Table) support in edk2, for exposing firmware
> performance data to the OS. Again, that's not about *recording* the stats.
> 
> The second section of the same chapter seems to describe how stats can
> be recorded however. AIUI, the DXE Core can provide the PERFORMANCE[_EX]
> protocols, if the DxeCorePerformanceLib instance is linked into it by
> the platform DSC file. In turn DXE modules can send measurements to the
> protocol via the PerformanceLib APIs / DxePerformanceLib instance.
> 
> In fact, the relevant library INF files have good documentation, we just
> have to know what to look at.
> 
> Recording stats in the PEI phase, via HOBs:
> - MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf
> 
> Recording stats in the DXE phase (protocol provider and consumer):
> - MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.inf
> - MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
> 
> Recording stats in SMM (protocol provider and consumer):
> - MdeModulePkg/Library/SmmCorePerformanceLib/SmmCorePerformanceLib.inf
> - MdeModulePkg/Library/SmmPerformanceLib/SmmPerformanceLib.inf
> 
> Fetching the collected stats (for display or otherwise):
> - MdeModulePkg/Library/DxeSmmPerformanceLib/DxeSmmPerformanceLib.inf
> 
> "Do nothing" library instance for all module types:
> - MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
> 
> 
> Now obviously this doesn't explain why it works for you on some
> platforms and why it doesn't on others. You haven't shared much
> information about the platforms in question. I can make one guess: if
> the performance protocol provided by the platform's DXE Core
> (DxeCorePerformanceLib) is incompatible with the DxePerformanceLib
> instance that is linked into your DXE driver, then communication between
> them will likely fail.
> 
> To my understanding, the performance protocol is not standard (PI or
> UEFI), so it's likely best if you build your DXE driver together with
> the DXE Core, on all platforms that you want to check. It's probably
> unsafe to link a DXE driver against DxePerformanceLib (rather than
> BasePerformanceLibNull) and run it on a random platform.
> 
> Hopefully this helps a little.
> Laszlo
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel



  reply	other threads:[~2018-08-03 18:38 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-03  7:29 PerformancePkg on multiple platform prabin ca
2018-08-03 18:17 ` Laszlo Ersek
2018-08-03 18:38   ` Andrew Fish [this message]
2018-08-04  5:19     ` PerformancePkg on multiple platform - prabin ca
2018-08-04 10:11       ` Bi, Dandan
2018-08-04 10:29         ` prabin ca
2018-08-06 14:51         ` prabin ca
2018-08-04  5:17   ` PerformancePkg on multiple platform prabin ca

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0A491E19-F3A7-46BF-A4BA-9D54B2D1432E@apple.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox