Je note que SMBios Type 20 aiderait ici, mais il est facultatif à partir de la version 2.5 (2006-09-05) pp. 25, L796 et pp. 131 , tandis que les types 16, 17 et 19 sont obligatoires, mais pas tout à fait Aidez-moi.
Réseau de mémoire physique (type 16)
Il existe une de ces structures pour l'ensemble du système, expliquant ce qui est possible sur cette carte.
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
Périphérique de mémoire (type 17)
Il y a un enregistrement par Dimm, qui vous indique les Dimms physiques installés sur la carte.
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
Adresse mappée de la baie de mémoire (type 19)
Il peut y avoir plusieurs de ces enregistrements, et chaque enregistrement répertorie une plage d'adresses physiques.
Voici la sortie avec deux sticks de 2 Go:
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
Et voici la sortie avec 4 sticks; 2 * 2 Go et 2 * 4 Go:
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
Notez que dans le premier exemple de sortie ci-dessus, il y avait deux modules DIMM de 2 Go, mais deux plages de 3,3 Go et 0,7 Go. Avec 4 Dimms, le système fusionnera également la région d'adresse mappée de la matrice de mémoire en deux blocs, car elle représente simplement la même que la carte e820, c'est-à-dire les plages d'adresses physiques de mémoire valides.
1 à plusieurs enregistrements de type 20 sont liés à exactement un périphérique de mémoire de type 17, ce qui signifie que toute la plage physique peut être connue:
Exemple
$ 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
Il semble possible de passer de l'adresse au module DIMM à des fins de détection et de correction d'EDAC , mais pas du module DIMM à l'ensemble de la plage.
En regardant le code source de mcelog , il utilise également le type 20 pour son décodage.
dmidecode
etlshw
, mais je pense que vous cherchez plus que ce qu'ils fournissent?lshw
utilisedmidecode
comme base de code etdmidecode -t 20
donne les informations souhaitées. Mais, comme indiqué, par la version 2.5 de SMBIOS, la structure contenant ces informations "Adresse mappée du périphérique de mémoire" alias Type 20 ou emplacement de la banque est facultative - ainsi Q est s'il existe un autre moyen de récupérer les mêmes informations. - Lien entretype 17
la valeur du localisateur et la plage d'adresses physiques (comme fourni en option parType 20
).dmidecode -t 20
sortie, pouvez-vous expliquer la valeur du localisateur du type 17 par rapport à l'adr. Physique, type 20?Réponses:
Lorsque vous avez plusieurs modules DIMM, le BIOS peut les configurer en un entrelacement. Donc, vous pourriez avoir un DIMM 2G étant 0G-> 4G physique, octets 0-7, sautant 8-15. (c.-à-d. faible 64 bits) L'autre DIMM 2G étant physique 0G-> 4G, octets 8-15, sautant 0-7. (64 bits élevé). Notez que je pense que l'entrelacement est en fait plus grand que cela, car je pense que si vous avez de la mémoire QDR, que le système peut faire 1 adresse, 8x cycles de données 64 bits, donc l'entrelacement par unités de 64 octets serait mieux.
Les dispositions physiques 0.7G et 3.3G que vous voyez ont à voir avec le besoin de garder une partie de la 4G inférieure ouverte pour les périphériques PCI, les tampons VGA, la merde classique <1M 8086, etc. Cela se fait par le pont nord. Vous avez donc une carte comme: 0-> 640K, 1M-> 3.3G, 0.7G pour le BIOS, PCI, etc. jusqu'à 4G. Et puis 4G-> 4.7G pour ram.
la source
La solution Brute Force semble être
la source
quel OS vous utilisez? Si Linux comment abount cette commande?
la première colonne est l'adresse physique;
références: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Reference_Guide/s2-proc-iomem.html /superuser/480451/what-kind-of -les-adresses-de-memoire-sont-celles-montrees-par-proc-ioports-et-proc-iomem
la source
Tout est aujourd'hui virtuel.
Il y a quelque chose appelé MMU dans le matériel qui traduit déjà les adresses du système d'exploitation en adresses physiques réelles. Il peut également répartir la charge entre les modules DIMM et mapper d'autres parties du matériel dans l'espace d'adressage. Ce que l'on appelle l'espace d'adressage physique au niveau du système d'exploitation est déjà via la vue traduite TLB .
/programming/36639607/how-exactly-do-kernel-virtual-addresses-get-translated-to-physical-ram est une belle explication.
la source