[wplug] questions and clarification regarding RAM upper limits

Bryan J. Smith thebs413 at yahoo.com
Thu Aug 23 10:58:48 EDT 2007


Bill Moran <wmoran at potentialtech.com> wrote:
> On i386 arch, the maximum addressable memory is 4G,
> _unless_ you use PAE, which uses some tom-foolery to allow'
> i386 to address a full 2^64 of
> memory, albeit with some serious performance hits.  

Correct, it's 36-bit / 64GiB when Processor Address Extensions (PAE)
are enabled on any i686 "Pro" (non-consumer Intel) or any AMD
"Athlon" architecture.

SIDE NOTE:  AMD Athlon, even 32-bit, actually uses 40-bit EV6, and is
capable -- at the platform, register and even on-CPU AGPgart level --
of 40-bit / 1TiB addressing.

> The _theoretical_ limit for amd64 arch is 2^64, which I believe
> is 16T.

Actually, AMD x86-64 (Intel IA-32e) "Long Mode" is 48-bit / 256TiB,
using 52-bit / 4PiB registers, not 64-bit and there is no specified
64-bit mode at all (only a reservation).  This is a heavily
under-proliferated fact.  The 48-bit limitation is for maximum i486
TLB (and later) compatibility -- i.e., so 32-bit i486/686 binaries
can run on a "Long Mode" kernel.

To get around the limitations of "Long Mode," most everyone is likely
to use virtualization at the core (which is another discussion ;). 
No one has even laid out how such greater than 48-bit addressing
would work either.

> However, I don't think any CPUs/motherboards are actually able to
> do that at this time.
> AFAIK, the most you can get out of any CPU actually
> in production is 2^40.

As implemented, AMD64 and EM64T (the platform implementations of
x86-64 and IA-32e, respectively) are 40-bit / 1TiB.  This is a legacy
limitation of the Digital EV6 architecture, of which the x86-64
platform-level implementation is based on (long story).

Even though AMD uses HyperTransport, and Intel has its AGTL+ logic,
EV6 is still at the heart of the addressing and other logic. 
HyperTransport actually virtualizes most physical lines over is
"general" system interconnect, Intel is actually leverages its
previous AGTL+/PCI "peripheral" interconnect capabilities (many of
which are actually and still limited to 36-bit / 64GiB).

> The spec allows 2^64,

Actually, it does not (read the x86-64 Programming Manuals very
carefully ;).  There is no "specification" to support it yet, only a
"mode reservation."  There is really no "design" to address anything
beyond 48-bit / 256TiB, using the current 52-bit / 4PiB virtual
addressing /register modes.

> but the chip makers are saving some $$$ by not putting all
> those registers in, on the assumption that nobody out there
> will need a full 2^64 of memory for many years.

And any such mode would _break_ i486 TLB compatibility, so 32-bit
applications/libraries couldn't even run on such a kernel.  ;)

> Of course, if any of this information is wrong, I'll be happy to be
> corrected.

Actually, you're the first person I've met that got virtually
everything right.  Touche!


-- 
Bryan J. Smith   Professional, Technical Annoyance
b.j.smith at ieee.org    http://thebs413.blogspot.com
--------------------------------------------------
     Fission Power:  An Inconvenient Solution


More information about the wplug mailing list