Ist es möglich, den physischen Adressbereich eines DIMM zu finden?

17

Ich stelle fest, dass SMBios Type 20 hier helfen würde, aber es ist ab Version 2.5 (05.09.2006), S. 25, L796 und S. 131 optional , wohingegen die Typen 16, 17 und 19 obligatorisch sind, aber nicht ganz Hilfe.

Physisches Speicherarray (Typ 16)

Es gibt eine dieser Strukturen für das gesamte System, die erklärt, was auf dieser Platine möglich ist.

Handle 0x1000, DMI type 16, 23 bytes
Physical Memory Array
    Location: System Board Or Motherboard
    Use: System Memory
    Error Correction Type: Multi-bit ECC
    Maximum Capacity: 768 GB
    Error Information Handle: Not Provided
    Number Of Devices: 24

Speichergerät (Typ 17)

Es gibt einen Datensatz pro Dimm, der die auf der Platine installierten physischen Dimms angibt.

Handle 0x1100, DMI type 17, 34 bytes
Memory Device
    Array Handle: 0x1000
    Error Information Handle: Not Provided
    Total Width: 72 bits
    Data Width: 64 bits
    Size: 2048 MB
    Form Factor: DIMM
    Set: 1
    Locator: DIMM_A1 
    Bank Locator: Not Specified
    Type: DDR3
    Type Detail: Synchronous Registered (Buffered)
    Speed: 1600 MHz
    Manufacturer: XXXX
    Serial Number: XXXX
    Asset Tag: XXXX
    Part Number: XXXX 
    Rank: 1
    Configured Clock Speed: 1333 MHz

Zugeordnete Speicherarrayadresse (Typ 19)

Es können mehrere dieser Datensätze vorhanden sein, und jeder Datensatz listet einen Bereich von physischen Adressen auf.

Hier ist die Ausgabe mit zwei 2 GB Sticks:

Handle 0x1300, DMI type 19, 31 bytes
Memory Array Mapped Address
    Starting Address: 0x00000000000
    Ending Address: 0x000CFFFFFFF
    Range Size: 3328 MB
    Physical Array Handle: 0x1000
    Partition Width: 2

Handle 0x1301, DMI type 19, 31 bytes
Memory Array Mapped Address
    Starting Address: 0x00100000000
    Ending Address: 0x0012FFFFFFF
    Range Size: 768 MB
    Physical Array Handle: 0x1000
    Partition Width: 2

Und hier ist die Ausgabe mit 4 Sticks; 2 * 2GB und 2 * 4GB:

Handle 0x1300, DMI type 19, 31 bytes
Memory Array Mapped Address
    Starting Address: 0x00000000000
    Ending Address: 0x000CFFFFFFF
    Range Size: 3328 MB
    Physical Array Handle: 0x1000
    Partition Width: 2

Handle 0x1301, DMI type 19, 31 bytes
Memory Array Mapped Address
    Starting Address: 0x00100000000
    Ending Address: 0x0032FFFFFFF
    Range Size: 8960 MB
    Physical Array Handle: 0x1000
    Partition Width: 2

Beachten Sie, dass in der obigen ersten Beispielausgabe zwei 2-GB-DIMMs vorhanden waren, jedoch zwei Bereiche von 3,3 GB und 0,7 GB. Mit 4 Dimms wird das System auch den Adressbereich des Speicherarrays in zwei Blöcke zusammenfassen, da er genau das Gleiche darstellt wie die e820-Karte, dh die gültigen physikalischen Adressbereiche des Speichers.

1 bis viele Typ 20-Datensätze sind an genau ein Typ 17-Speichergerät gebunden, sodass der gesamte physikalische Bereich bekannt sein kann:

Beispiel

$ sudo dmidecode -t 20
# dmidecode 2.12
SMBIOS 2.6 present.

Handle 0x002F, DMI type 20, 19 bytes
Memory Device Mapped Address
    Starting Address: 0x00000000000
    Ending Address: 0x000FFFFFFFF
    Range Size: 4 GB
    Physical Device Handle: 0x002B
    Memory Array Mapped Address Handle: 0x002E
    Partition Row Position: 1

Handle 0x0030, DMI type 20, 19 bytes
Memory Device Mapped Address
    Starting Address: 0x00100000000
    Ending Address: 0x001FFFFFFFF
    Range Size: 4 GB
    Physical Device Handle: 0x002C
    Memory Array Mapped Address Handle: 0x002E
    Partition Row Position: 1

Es scheint möglich zu sein, von der Adresse zum DIMM zu EDAC - Error Detection & Correction - Zwecken zu wechseln , aber nicht vom DIMM zum gesamten Bereich.

Betrachtet man den Quellcode von mcelog , verwendet es auch Typ 20 für seine Dekodierung.

Alun
quelle
Können Sie Ihr Q näher erläutern? Ich folge nicht wirklich dem, was du fragst. Weitere Details oder Beispiele wären ein großes Plus. 2 Werkzeuge , dass ich w / sind dmidecodeund lshw, aber ich glaube , Sie suchen mehr als das, was diese zur Verfügung stellen?
SLM
@slm: lshwVerwendet dmidecodeals Codebasis und dmidecode -t 20gibt gewünschte Informationen. Wie bereits erwähnt, ist in Version 2.5 von SMBIOS die Struktur mit dieser Information "Memory Device Mapped Address" (Speicheradresse), auch als Typ 20 oder Speicherort der Bank bekannt, optional. Q ist also, wenn es eine andere Möglichkeit gibt, die gleichen Informationen abzurufen. - Verknüpfung zwischen type 17dem Locator- Wert und dem physischen Adressbereich (optional bereitgestellt von Type 20).
Runium
@Sukminder - danke. Diese Informationen sollten wahrscheinlich nur in das Q aufgenommen werden. Da Sie einen Griff haben, würde es Ihnen etwas ausmachen?
SLM
@Sukminder - Ich habe eine Beispielausgabe hinzugefügt. Können dmidecode -t 20Sie den Locator-Wert von Typ 17 im Vergleich zu der physikalischen Adresse von Typ 20 erläutern?
SLM
Ich gehe davon aus, dass Sie nicht für eine 3-Buchstaben-Regierungsbehörde arbeiten oder deren Finanzierungsniveau haben. Und wenn Sie dort sind, dann fragen Sie hier nicht weiter. Bei einem modernen PC / Server / MAC werden physische Speicherbereiche oftmals dann virtuellen Bereichen zugeordnet und werden dann möglicherweise vom Betriebssystem neu zugeordnet. Möglicherweise können Sie dies nicht herausfinden. Selbst dann könnte es in den 640k + Extended Memory der DOS-Tage abgebildet werden. Wenn Sie ein 32-Bit-Betriebssystem verwenden, erhalten Sie wahrscheinlich eine andere Antwort als bei einem 64-Bit-Betriebssystem. Was ist dein Endziel?
MikeP

Antworten:

1

Wenn Sie mehrere DIMMS haben, konfiguriert das BIOS diese möglicherweise in einem Interleave. Ein 2G-DIMM ist also möglicherweise physisch 0G-> 4G, Bytes 0-7 und überspringt 8-15. (dh 64 Bit niedrig) Das andere 2G-DIMM ist physisch 0G-> 4G, Bytes 8-15, überspringt 0-7. (64 Bit hoch). Beachten Sie, dass ich denke, dass das Interleave tatsächlich größer ist als das, weil ich denke, dass, wenn Sie QDR-Speicher haben, das System 1 Adresse ausführen kann, 8x 64-Bit-Datenzyklen, so dass das Interleaving durch Einheiten von 64-Bytes besser wäre.

Die physischen Vorkehrungen für 0,7G und 3,3G haben damit zu tun, dass einige der unteren 4G für PCI-Geräte, VGA-Puffer, klassischen <1M 8086-Mist usw. offen bleiben müssen. Dies erfolgt über die North Bridge. Sie haben also eine Karte wie: 0-> 640K, 1M-> 3,3G, 0,7G für BIOS, PCI usw. bis zu 4G. Und dann 4G-> 4,7G für RAM.

mcr
quelle
0

Die Brute Force-Lösung scheint zu sein

  1. Speicherbereich der aktuellen Konfiguration protokollieren
  2. Schalten Sie das betreffende DIMM und alle darüber befindlichen DIMMs aus
  3. Neustart, überprüfen Sie die neue Konfiguration.
K7AAY
quelle
2
Ich bin mir nicht sicher, ob das hilft. Wenn Sie also 6 2-GB-DIMMs haben und ein Paar entfernen, wird Ihre Top-Range wahrscheinlich nur um 4 GB schrumpfen, aber das sagt Ihnen nicht, wo sie sich im vorherigen Fall befanden, aber ich werde es testen Dies und Update.
Alun
".. und alle DIMMs darüber", z. B. wenn sich das betreffende DIMM in Steckplatz 2 befindet, entfernen Sie auch das DIMM in Steckplätzen 3 ... n
K7AAY
-1

Alles ist heutzutage virtuell.

In der Hardware gibt es eine sogenannte MMU, die bereits Adressen für das Betriebssystem in reale physikalische Adressen übersetzt. Es kann auch die Last zwischen den DIMMs verteilen und andere Teile der Hardware dem Adressraum zuordnen. Was auf Betriebssystemebene als physischer Adressraum bezeichnet wird, ist bereits eine über den TLB übersetzte Ansicht.

/programming/36639607/how-exactly-do-kernel-virtual-addresses-get-translated-to-physical-ram ist eine nette Erklärung.

Thomas
quelle
1
Er sagte, er wolle den physischen Adressbereich.
Dirkt
1
Intel hat dem 80286 eine MMU hinzugefügt und diese war auf dem i386 voll funktionsfähig ... das war vor über 30 Jahren ... so viel zum Thema "Heutzutage ist alles virtuell" :) Der Speicher wurde so gut wie immer virtualisiert.
Eric