PCI Memory Resource assignment ...

Hi.

I’m hoping someone from Microsoft can address this question but any help
would be appreciated.

I have an expansion card that has a PCI-to-PCI bridge, two dual-channel
Fibre Channel controllers, and a memory controller with 128 megs of memory,
expandable to 512 megs. Running Windows 2000 server on a machine with 4
processors and 8 gigs of memory. The PCI Base Address Register for the
memory region does have the pre-fetchable and 64 bit addressing capability
bits set. The /pae switch IS specified in boot.ini.

I was surprised to see that the OS did not assign this memory above the 4
gig boundary. In fact, even though I do not have the /pcilock switch set,
the OS did not reassign any of the resources that the system BIOS had set
up.

The result of this is that 128 megs of system memory are discarded. Now,
128 megs out of 8 gigs doesn’t seem like much but as I said, the card is
expandable to 512 megs, and a client may want to use more than one card, so
this problem could get big in a hurry.

  1. Is there a secret boot.ini switch or registry entry that can be used to
    cause the physical addresses assigned to these large memory blocks to be
    moved out of the range of the system memory?

  2. Is there something that our memory driver can use to achieve this?

  3. Do all of the Windows operating systems behave the same in this manner?

Thanks,

Jerry Masker
Director, System Software Development
ATTO Technology, Inc.

This is probably due to the motherboad hardware and not Windows.

Maxim Shatskih, Windows DDK MVP
StorageCraft Corporation
xxxxx@storagecraft.com
http://www.storagecraft.com

----- Original Message -----
From:
To: “Windows System Software Devs Interest List”
Sent: Thursday, August 12, 2004 9:42 PM
Subject: [ntdev] PCI Memory Resource assignment …

>
> Hi.
>
> I’m hoping someone from Microsoft can address this question but any help
> would be appreciated.
>
> I have an expansion card that has a PCI-to-PCI bridge, two dual-channel
> Fibre Channel controllers, and a memory controller with 128 megs of memory,
> expandable to 512 megs. Running Windows 2000 server on a machine with 4
> processors and 8 gigs of memory. The PCI Base Address Register for the
> memory region does have the pre-fetchable and 64 bit addressing capability
> bits set. The /pae switch IS specified in boot.ini.
>
> I was surprised to see that the OS did not assign this memory above the 4
> gig boundary. In fact, even though I do not have the /pcilock switch set,
> the OS did not reassign any of the resources that the system BIOS had set
> up.
>
> The result of this is that 128 megs of system memory are discarded. Now,
> 128 megs out of 8 gigs doesn’t seem like much but as I said, the card is
> expandable to 512 megs, and a client may want to use more than one card, so
> this problem could get big in a hurry.
>
> 1. Is there a secret boot.ini switch or registry entry that can be used to
> cause the physical addresses assigned to these large memory blocks to be
> moved out of the range of the system memory?
>
> 2. Is there something that our memory driver can use to achieve this?
>
> 3. Do all of the Windows operating systems behave the same in this manner?
>
> Thanks,
>
> Jerry Masker
> Director, System Software Development
> ATTO Technology, Inc.
>
>
>
> —
> Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256
>
> You are currently subscribed to ntdev as: xxxxx@storagecraft.com
> To unsubscribe send a blank email to xxxxx@lists.osr.com

It is up to the BIOS to configure the layout of physical address space in a
system. It needs to program the chipset to route particular address ranges
to the PCI bus, and others to RAM. It then reports this configuration to
Windows, and it doesn’t get changed on the fly. It’s only within these
bounds that Windows does resource allocation. Since many PCI devices only
have 32 bit BARs, the BIOS typically leaves a sizeable PCI hole below the
4GB line. This, combined with the fact that Windows will try to respect the
BIOS configuration of PCI devices whenever possible, explains why the BARs
are configured the way they are.

This is no reason for this to mean that the system memory is discarded,
though. The space lost in the PCI hole could be relocated to an address
above 8GB. This would still be addressable by the PAE kernel. If this
isn’t happening, it’s because the BIOS didn’t set up the memory map
correctly.

Dave Walker
Windows Kernel Platform Team

This posting is provided “AS IS” with no warranties, and confers no rights.

wrote in message news:xxxxx@ntdev…
>
> Hi.
>
> I’m hoping someone from Microsoft can address this question but any help
> would be appreciated.
>
> I have an expansion card that has a PCI-to-PCI bridge, two dual-channel
> Fibre Channel controllers, and a memory controller with 128 megs of
> memory,
> expandable to 512 megs. Running Windows 2000 server on a machine with 4
> processors and 8 gigs of memory. The PCI Base Address Register for the
> memory region does have the pre-fetchable and 64 bit addressing capability
> bits set. The /pae switch IS specified in boot.ini.
>
> I was surprised to see that the OS did not assign this memory above the 4
> gig boundary. In fact, even though I do not have the /pcilock switch set,
> the OS did not reassign any of the resources that the system BIOS had set
> up.
>
> The result of this is that 128 megs of system memory are discarded. Now,
> 128 megs out of 8 gigs doesn’t seem like much but as I said, the card is
> expandable to 512 megs, and a client may want to use more than one card,
> so
> this problem could get big in a hurry.
>
> 1. Is there a secret boot.ini switch or registry entry that can be used
> to
> cause the physical addresses assigned to these large memory blocks to be
> moved out of the range of the system memory?
>
> 2. Is there something that our memory driver can use to achieve this?
>
> 3. Do all of the Windows operating systems behave the same in this
> manner?
>
> Thanks,
>
> Jerry Masker
> Director, System Software Development
> ATTO Technology, Inc.
>
>
>

> This is no reason for this to mean that the system memory is

discarded,
though. The space lost in the PCI hole could be relocated to
an address
above 8GB. This would still be addressable by the PAE
kernel. If this
isn’t happening, it’s because the BIOS didn’t set up the memory map
correctly.

Dave Walker
Windows Kernel Platform Team

Or the chipset just can not remap/relocate portion(s) of RAM from the PCI
hole(s),
it can just hide it. The BIOS can’t do anything in the such case.

Dmitriy