From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=66.187.233.73; helo=mx1.redhat.com; envelope-from=lersek@redhat.com; receiver=edk2-devel@lists.01.org Received: from mx1.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 985B02098EAC4 for ; Fri, 3 Aug 2018 11:17:12 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1F0817A7EF; Fri, 3 Aug 2018 18:17:11 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-120-198.rdu2.redhat.com [10.10.120.198]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8D02210FFE7F; Fri, 3 Aug 2018 18:17:10 +0000 (UTC) To: prabin ca References: <8E875131-258C-4F21-B104-EB36CE970701@gmail.com> From: Laszlo Ersek Cc: edk2-devel@lists.01.org Message-ID: <1deaed58-5098-aa30-b401-f415a034957d@redhat.com> Date: Fri, 3 Aug 2018 20:17:04 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: <8E875131-258C-4F21-B104-EB36CE970701@gmail.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.2]); Fri, 03 Aug 2018 18:17:11 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.2]); Fri, 03 Aug 2018 18:17:11 +0000 (UTC) for IP:'10.11.54.3' DOMAIN:'int-mx03.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'lersek@redhat.com' RCPT:'' Subject: Re: PerformancePkg on multiple platform X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.27 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 03 Aug 2018 18:17:12 -0000 Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit 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 - 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