audk/ArmVirtPkg
Ard Biesheuvel 4b1dd5c457 ArmVirtPkg: clear PcdPerformanceLibraryPropertyMask PCD
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 mapping 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 number between 90 and 1020, depending on whether
contiguous hints are honoured by the hardware.

So let's remove PcdPerformanceLibraryPropertyMask until we find a reason
why we need it.

(*) 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 <ard.biesheuvel@linaro.org>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
2017-02-27 16:10:33 +00:00
..
FdtClientDxe ArmVirtPkg/FdtClientDxe: add methods to iterate over memory nodes 2016-09-15 15:39:29 +01:00
HighMemDxe ArmVirtPkg/HighMemDxe: move to FDT client protocol 2016-09-15 15:39:34 +01:00
Include ArmVirtPkg/FdtClientDxe: add methods to iterate over memory nodes 2016-09-15 15:39:29 +01:00
Library ArmVirtPkg/QemuFwCfgLib: implement QemuFwCfgSkipBytes() API 2017-01-31 00:14:41 +01:00
PrePi ArmVirtPkg/PrePi: remove mSystemMemoryEnd 2016-10-24 15:57:25 +01:00
VirtioFdtDxe ArmVirtPkg/VirtFdtDxe: remove Xenio handling and rename to VirtioFdtDxe 2016-04-13 17:26:07 +02:00
XenAcpiPlatformDxe ArmVirtPkg/FdtClientDxe: report address and size cell count directly 2016-09-15 15:31:24 +01:00
XenioFdtDxe ArmVirtPkg/FdtClientDxe: report address and size cell count directly 2016-09-15 15:31:24 +01:00
ArmVirt.dsc.inc ArmVirtPkg: clear PcdPerformanceLibraryPropertyMask PCD 2017-02-27 16:10:33 +00:00
ArmVirtPkg.dec ArmVirtPkg: remove PcdKludgeMapPciMmioAsCached 2016-09-01 22:56:04 +02:00
ArmVirtQemu.dsc ArmVirtPkg/ArmVirtQemu: Install BGRT ACPI table 2017-01-16 17:06:10 +00:00
ArmVirtQemu.fdf ArmVirtPkg: factor out Rules FDF section 2016-07-12 15:19:42 +02:00
ArmVirtQemuFvMain.fdf.inc ArmVirtPkg/ArmVirtQemu: Install BGRT ACPI table 2017-01-16 17:06:10 +00:00
ArmVirtQemuKernel.dsc ArmVirtPkg/ArmVirtQemu: Install BGRT ACPI table 2017-01-16 17:06:10 +00:00
ArmVirtQemuKernel.fdf ArmVirtPkg: factor out Rules FDF section 2016-07-12 15:19:42 +02:00
ArmVirtRules.fdf.inc ArmVirtPkg: Add Ramdisk support to ArmVirtPkg platforms 2016-08-22 09:05:17 +02:00
ArmVirtXen.dsc ArmVirtPkg: replace all ArmLib resolutions with ArmBaseLib 2016-09-08 10:02:32 +01:00
ArmVirtXen.fdf ArmVirtPkg: enable EBC interpreter for AArch64 2016-08-26 11:53:48 +01:00
Contributions.txt ArmVirtPkg: add "Contributions.txt" and "License.txt" 2015-06-08 22:00:36 +00:00
License.txt ArmVirtPkg: add "Contributions.txt" and "License.txt" 2015-06-08 22:00:36 +00:00
VarStore.fdf.inc ArmVirtPkg: add FDF definition for empty varstore 2016-06-23 16:07:38 +02:00