Czy można znaleźć zakres adresów fizycznych modułu DIMM?

17

Zwracam uwagę, że SMBios Type 20 pomógłby tutaj, ale jest opcjonalny od wersji 2.5 (2006-09-05) str. 25, L796 i str. 131 , podczas gdy typy 16, 17 i 19 są obowiązkowe, ale nie całkiem Wsparcie.

Tablica pamięci fizycznej (typ 16)

Istnieje jedna z tych struktur dla całego systemu, wyjaśniająca, co jest możliwe na tej płycie.

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

Urządzenie pamięci (typ 17)

Na każdy Dimm przypada jeden rekord, który informuje o fizycznych Dimmach zainstalowanych na płycie.

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

Odwzorowany adres tablicy pamięci (typ 19)

Może istnieć wiele takich rekordów, a każdy rekord zawiera zakres adresów fizycznych.

Oto dane wyjściowe z dwoma dyskami 2 GB:

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

A oto wynik z 4 pałeczkami; 2 * 2 GB i 2 * 4 GB:

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

Zauważ, że w pierwszym przykładzie wyjściowym powyżej były dwa moduły DIMM 2 GB, ale dwa zakresy 3,3 GB i 0,7 GB. Przy 4 Dimmach, system połączy również obszar adresu odwzorowanego w tablicy pamięci na dwie części, ponieważ reprezentuje on tylko to samo co mapa e820, tj. Prawidłowe zakresy adresów fizycznych pamięci.

Od 1 do wielu rekordów typu 20 jest powiązanych dokładnie z jednym urządzeniem pamięci typu 17, co oznacza, że ​​można poznać cały zakres fizyczny:

Przykład

$ 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

Wydaje się, że można przejść z adresu do DIMM dla EDAC - w celu wykrywania i korekcji błędów , ale nie z DIMM do całego zakresu.

Patrząc na kod źródłowy mceloga , do dekodowania używa również typu 20.

Alun
źródło
Czy możesz wyjaśnić swoje Q dalej? Naprawdę nie podążam za tym, o co prosisz. Więcej szczegółów lub przykładów stanowiłoby ogromny plus. 2 narzędzia, które chciałbym uruchomić w / are dmidecodei lshw, ale myślę, że szukasz czegoś więcej niż to, co oferują?
slm
@slm: lshwużywa dmidecodejako podstawy kodu i dmidecode -t 20daje potrzebne informacje. Ale, jak zauważono, w wersji 2.5 SMBIOS struktura przechowująca tę informację „Adres urządzenia zmapowanego w pamięci”, czyli Typ 20 lub lokalizację banku, jest opcjonalna - dlatego Q jest, jeśli istnieje inny sposób na uzyskanie tych samych informacji. - Związek między type 17„s Locator wartości i zakresu adresów fizycznych (jak ewentualnie zapewnia Type 20).
Runium
@Sukminder - dzięki. Te informacje powinny być prawdopodobnie włączone do Q. Skoro masz na to jakieś pojęcie, nie miałbyś nic przeciwko?
slm
@Sukminder - dodałem przykładowe dmidecode -t 20dane wyjściowe, czy możesz wyjaśnić wartość lokalizatora typu 17 w porównaniu do adresu fizycznego, typ 20?
slm
Zakładam, że nie pracujesz dla trzyliterowej agencji rządowej lub nie masz odpowiedniego poziomu finansowania. A jeśli tam jesteś, to nie pytasz tutaj. W przypadku nowoczesnych komputerów PC / serwerów / MAC zakresy pamięci fizycznej są często następnie mapowane na wirtualne zakresy, a następnie mogą zostać ponownie zmapowane przez system operacyjny, możesz nie być w stanie tego rozgryźć. Nawet wtedy może zamapować go w rozszerzonej pamięci DOS 640k +. Używanie 32-bitowego systemu operacyjnego prawdopodobnie da inną odpowiedź niż 64-bitowy system operacyjny. Jaki jest twój cel końcowy?
MikeP,

Odpowiedzi:

1

Gdy masz wiele modułów DIMMS, BIOS może je skonfigurować w jakiś sposób. Więc możesz mieć jeden 2G DIMM będący fizycznym 0G-> 4G, bajty 0-7, pomijanie 8-15. (tzn. małe 64 bity) Drugi moduł DIMM 2G to fizyczne 0G-> 4G, bajty 8-15, pomijane 0-7. (wysokie-64 bity). Zauważ, że myślę, że przeplot jest w rzeczywistości większy, ponieważ uważam, że jeśli masz pamięć QDR, system może wykonać 1 adres, 8x 64-bitowych cykli danych, więc lepiej byłoby przeplatać jednostki 64-bajtowe.

Układy fizyczne 0,7G i 3,3G, które widzisz, mają związek z potrzebą utrzymania niektórych niższych 4G otwartych dla urządzeń PCI, buforów VGA, klasycznych bzdur <1M 8086 itp. Odbywa się to przez most północny. Masz więc mapę typu: 0-> 640K, 1M-> 3,3G, 0,7G dla BIOS, PCI itp. Do 4G. A następnie 4G-> 4,7G dla pamięci RAM.

mcr
źródło
0

Wydaje się, że jest to Brute Force

  1. zaloguj zakres pamięci bieżącej konfiguracji
  2. wyłącz zasilanie, wyjmij wspomniany moduł DIMM i wszystkie moduły DIMM powyżej niego
  3. uruchom ponownie, sprawdź nową konfigurację.
K7AAY
źródło
2
Nie jestem pewien, czy to pomaga ... tj. Jeśli miałeś 6 modułów DIMM 2 GB i usunąłeś parę, twój górny zakres prawdopodobnie po prostu zmniejszy się o 4 GB, ale to nie mówi, gdzie były w poprzednim przypadku, ale przetestuję to i zaktualizuj.
Alun
„.. i wszystkie moduły DIMM powyżej niego”, np. jeśli dany moduł DIMM znajduje się w gnieździe 2, usuń również moduł DIMM z miejsc 3 ... n
K7AAY
-1

Wszystko jest obecnie wirtualne.

W sprzęcie jest coś o nazwie MMU, które już tłumaczy adresy systemu operacyjnego na rzeczywiste adresy fizyczne. Może także rozkładać obciążenie między moduły DIMM i mapować inne części sprzętu w przestrzeni adresowej. To, co nazywa się fizyczną przestrzenią adresową na poziomie systemu operacyjnego, jest już tłumaczone przez widok TLB .

/programming/36639607/how-exactly-do-kernel-virtual-addresses-get-translated-to-physical-ram to miłe wytłumaczenie.

Tomasz
źródło
1
Powiedział, że chce zakres adresów fizycznych .
dirkt
1
Intel dodał MMU do 80286 i był w pełni funkcjonalny na i386 ... to było ponad 30 lat temu ... tyle w przypadku "w dzisiejszych czasach wszystko jest wirtualne" :) pamięć prawie zawsze była zwirtualizowana.
Eric