From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) (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 29F588213A for ; Fri, 24 Feb 2017 15:17:39 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx16.intmail.prod.int.phx2.redhat.com [10.5.11.28]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7992EC04B93B; Fri, 24 Feb 2017 23:17:39 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-116-15.phx2.redhat.com [10.3.116.15]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2DB9F15842; Fri, 24 Feb 2017 23:17:37 +0000 (UTC) To: Ard Biesheuvel , edk2-devel@ml01.01.org, leif.lindholm@linaro.org References: <1487960215-14052-1-git-send-email-ard.biesheuvel@linaro.org> From: Laszlo Ersek Message-ID: <7c091253-af00-176d-c796-d6120d4fc2a9@redhat.com> Date: Sat, 25 Feb 2017 00:17:35 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.1 MIME-Version: 1.0 In-Reply-To: <1487960215-14052-1-git-send-email-ard.biesheuvel@linaro.org> X-Scanned-By: MIMEDefang 2.74 on 10.5.11.28 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Fri, 24 Feb 2017 23:17:39 +0000 (UTC) Subject: Re: [PATCH] ArmVirtPkg: clear PcdPerformanceLibraryPropertyMask PCD X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Feb 2017 23:17:39 -0000 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit On 02/24/17 19:16, Ard Biesheuvel wrote: > The only observeable effect of having PcdPerformanceLibraryPropertyMask > set to 1 is that a EfiReservedMemory region of 4 pages is allocated right > below the 4 GB mark. This region is out of bounds for the OS, which means > it is not even allowed to map it, to avoid speculative loads from it. > > On Linux, this may prevent the kernel from using a 1 GB block mappings for > this region, and instead it has to carve up the block as follows: > > 0xffffffff80000000-0xffffffffbe000000 992M PMD CON BLK > 0xffffffffbe000000-0xffffffffbfe00000 30M PMD BLK > 0xffffffffbfe00000-0xffffffffbfff0000 1984K PTE CON > 0xffffffffbfff0000-0xffffffffbfffc000 48K PTE > > where it would otherwise use a single 1 GB mapping (*), i.e., > > 0xffffffff80000000-0xffffffffc0000000 1G PGD > > To clarify, the latter is a single 8 byte entry in the top level page > table, whereas in the former case, we have two additional levels of > paging, requiring two extra 4 KB pages (on a 4 KB pagesize kernel). > > The real cost, however, is the TLB footprint, which goes up from a > single entry to a value between 90 and 1020, depending on whether > contiguous hints are honoured by the hardware. > > So let's set PcdPerformanceLibraryPropertyMask to zero until we find > a reason why we shouldn't. > > (*) provided that no other allocations were deliberately located right > below the 4 GB mark, and that we are running with more than 3 GB of > memory, in which case most allocations will be over 4 GB, given EDK2's > default top-down allocation policy. > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Ard Biesheuvel > --- > ArmVirtPkg/ArmVirt.dsc.inc | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/ArmVirtPkg/ArmVirt.dsc.inc b/ArmVirtPkg/ArmVirt.dsc.inc > index 61d4a6642eb7..ca0a4d31a03d 100644 > --- a/ArmVirtPkg/ArmVirt.dsc.inc > +++ b/ArmVirtPkg/ArmVirt.dsc.inc > @@ -295,7 +295,7 @@ [PcdsFixedAtBuild.common] > gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|1000000 > gEfiMdePkgTokenSpaceGuid.PcdSpinLockTimeout|10000000 > gEfiMdePkgTokenSpaceGuid.PcdDebugClearMemoryValue|0xAF > - gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask|1 > + gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask|0 > gEfiMdePkgTokenSpaceGuid.PcdPostCodePropertyMask|0 > gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize|320 > > The value 1 dates back to ancient commit 6f5872b1f401 ("ArmPlatformPkg/ArmVirtualizationPkg: Add ArmVirtualizationQemu platform", 2014-09-18). The default is zero in "MdePkg/MdePkg.dec": ## The mask is used to control PerformanceLib behavior.

# BIT0 - Enable Performance Measurement.
# @Prompt Performance Measurement Property. # @Expression 0x80000002 | (gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask & 0xFE) == 0 gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask|0|UINT8|0x00000009 Shouldn't we just remove the line? Thanks Laszlo