Programmer question: How to find out the memory interleaving in use?

QuixoticOne

Golden Member
Nov 4, 2005
1,855
0
0
I'm wondering if there's an easy way to tell HOW your memory is really
interleaved and a physical 64 bit address maps to a specific DIMM and DIMM
ROW/COLUMN address --
OS call, library utility, simple FAQ for each chipset, or whatever.

I don't mean MMU mapping of VIRTUAL addresses to physical addresses, I literally
mean which memory cell in which DIMM has byte number X PHYSICAL 64 bit address.

Specifically on modern chipsets like Nforce4, P35 Bearlake, perhaps others.

I'm sure I could read the chipset documentation and get some priviledged code to
actually read the memory controller registers of the chipset and see that the settings
are, but I assume that it's a common enough need that there may be
FAQs / libraries / OS calls / BIOS calls / whatever to help do this.

On a dual BANK (2 banks of 64 bits wide per DIMM) it'd have to alternate
between banks every so often though if that's always every QWORD (even/odd)
or what I don't recall.

I'd assume each byte within a group of 8 for a 64 bit wide DIMM is just in order
0, 1, 2, 3, 4, 5, 6 7.

On dual channel memory controllers with 2 DIMMs installed it'd have to alternate
between channels, but how it'd choose the BANK and CHANNEL ordering IDK.

If you had four dual bank DIMMs installed in a dual channel chipset then it'd
have to interleave somehow over 4 DIMMs and 2 banks per DIMM.

Anyway that's the kind of detail I'm looking for.

Thanks in advance!