Windows reports memory D0000000-FDFFFFFF not available on Windows Server 2008

Gilt für: Windows Server 2008 StandardWindows Server 2008 EnterpriseWindows Server 2008 Service Pack 2

Summary


When Windows Server 2008 SP2 (x86 or x64) is installed on some Dell PowerEdge R710/R510 machines, Windows reports the memory range D0000000-FDFFFFFF as not available under PCI Bus properties in the resources tab in Device Manager.

This memory range is reserved by the BIOS. When the memory range is reserved by the BIOS, the Windows built-in memory arbiter will attempt to resolve the conflict, under some circumstances when it cannot resolve the memory conflict it will report the memory range as "not available" under PCI Bus properties in the resources tab in Device Manager.

This behavior is by design and can be safely ignored; Windows will use what memory resources are available for the PCI Bus and should not impact functionality. Typically when memory resources are reserved by the BIOS, Windows may not be able to allocate these memory resources for the PCI-Bus; the Windows built in memory arbiter will attempt to resolve the conflict when it can but if it cannot, the memory range may be reported as "not available" under the PCI-Bus resources tab in Device Manager.

More Information


This has only been reported under Intel Tylersburg based Dell PowerEdge R710/R510 servers.

In addition to the resource showing up as "not available" under the PCI Bus properties in the PCI bus resources tab, if you have a debugger attached or captured a memory dump you can use the arbiter debugger extension command "!arbiter 2" to dump the memory range conflict.

EXAMPLE:

0: kd> !arbiter 2

DEVNODE 89e5b080 (HTREE\ROOT\0)
  Memory Arbiter "RootMemory" at 817677a0
    Allocated ranges:
      0000000000000000 - 0000000000000fff       00000000 <Not on bus>
      00000000000a0000 - 00000000000bffff S     8a0a14c0  (pci)
      00000000d0000000 - 00000000fdffffff   
        00000000d0000000 - 00000000fdffffff SC    8a0a14c0  (pci) <--------------Conflict
        00000000e0000000 - 00000000efffffff  CB   00000000 <Not on bus>
      00000000fed00000 - 00000000fed003ff   B   8a0a1308
      00000000fed40000 - 00000000fed44fff S     8a0a14c0  (pci)
      00000000fed90000 - 00000000fed91fff   B   8a0a6f08
      0000002000000000 - ffffffffffffffff       00000000 <Not on bus>
    Possible allocation:
      < none >

To confirm this memory range is reserved by the BIOS, you can boot into the UEFI shell (in UEFI mode) using a USB key and run the UEFI shell "memmap" command.

EXAMPLE:(note the memory range overlapping the conflict range):


Type       Start            End               # Pages          Attributes
...........
reserved   00000000CF369000-00000000CF37EFFF  0000000000000016 0000000000000001
ACPI_recl  00000000CF37F000-00000000CF3BDFFF  000000000000003F 0000000000000008
reserved   00000000CF3BE000-00000000CFFFFFFF  0000000000000C42 0000000000000001 <----
reserved   00000000E0000000-00000000EFFFFFFF  0000000000010000 0000000000000001 <----
reserved   00000000FE000000-00000000FFFFFFFF  0000000000002000 0000000000000001 <----
available  0000000100000000-000000042FFFFFFF  0000000000330000 000000000000000F


Steps to run memmap command from UEFI Shell:

1) Enabled to BOOT from UEFI instead of BIOS
2) On a Fat formatted USB key copy bootx64.efi, shell_full.efi, shell.efi to the root of the USB key
3) Boot into UEFI Boot manager and add a boot option pointing to bootx64.efi
4) Boot selecting the new UEFI boot option
5) At the Shell> command run “memmap –b > fs0:\memmap.txt” this will dump the memory map from the firmware to a memmap.txt file on the root of the usb key.

Reference: http://lhcb-comp.web.cern.ch/lhcb-comp/daq/SR870BH2-dell3250.pdf"

Steps to determine if MMCFG conflicts with PCI range from the registry:

To determine if MMCFG conflicts with a PCI range, the physical address of MMCFG can be found by looking at the following value in the registry:

 HKLM\SYSTEM\CurrentControlSet\Control\Arbiters\ReservedResources\MmConfigRange

- Double click the value and you will see at least one “Memory” value listed, select the value and click “display” to show the reserved range in conflict(or double click again).

For example, on the Windows Server 2008 x64 installation scenario with UEFI BIOS enabled, this would show memory address range 00000000e0000000 to 00000000efffffff listed which corresponds to memmap output which overlaps the conflict memory range 00000000D0000000 - 00000000FDFFFFFF.