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
next prev parent 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