É possível encontrar o intervalo de endereço físico de um DIMM?

17

Eu notei que o SMBios Type 20 ajudaria aqui, mas é opcional a partir da versão 2.5 (2006-09-05) pp. 25, L796 e pp. 131 , enquanto os tipos 16, 17 e 19 são obrigatórios, mas não ajudam muito.

Matriz de memória física (tipo 16)

Existe uma dessas estruturas para todo o sistema, explicando o que é possível neste fórum.

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

Dispositivo de memória (tipo 17)

Existe um registro para cada Dimm, que informa os Dimms físicos instalados no quadro.

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

Endereço mapeado da matriz de memória (tipo 19)

Pode haver vários desses registros e cada registro lista um intervalo de endereços físicos.

Aqui está a saída com dois sticks de 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

E aqui está a saída com 4 paus; 2 * 2 GB e 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

Observe que no primeiro exemplo de saída acima, havia dois DIMMs de 2 GB, mas dois intervalos de 3,3 GB e 0,7 GB. Com 4 Dimms, o sistema também irá coalescer a região do endereço mapeado da matriz de memória em dois trechos, pois representa apenas o mesmo que o mapa e820, ou seja, os intervalos de endereços físicos de memória válidos.

1 para muitos registros Tipo 20 estão ligados a exatamente um dispositivo de memória tipo 17, o que significa que todo o intervalo físico pode ser conhecido:

Exemplo

$ 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

Parece possível ir do endereço para o DIMM para EDAC - Error Detection & Correção , mas não do DIMM para todo o intervalo.

Olhando para o código-fonte do mcelog , ele também está usando o tipo 20 para sua decodificação.

    
por Alun 06.01.2014 / 07:39

4 respostas

1

Quando você tem vários DIMMS, o BIOS pode configurá-los em algum intercalamento. Então você pode ter um 2G DIMM sendo físico 0G- > 4G, bytes 0-7, pulando 8-15. (isto é, bits de 64 bits) O outro 2G DIMM sendo físico 0G- > 4G, bytes 8-15, pulando 0-7. (alta-64 bits). Note que eu acho que o intercalador é realmente maior do que isso, porque eu acho que se você tiver memória QDR, o sistema pode fazer 1 endereço, 8x ciclos de dados de 64 bits, então a intercalação por unidades de 64 bytes seria melhor.

Os arranjos físicos 0.7G e 3.3G que você vê têm a ver com a necessidade de manter alguns dos menores 4G abertos para dispositivos PCI, buffers VGA, clássicos < 1M 8086 porcaria, etc. Isto é feito pela ponte norte . Então você tem um mapa como: 0- > 640 K, 1 M > 3,3 G, 0,7 G para BIOS, PCI, etc. até 4 G. E então 4G- > 4.7G para ram.

    
por 12.07.2016 / 16:58
0

A solução Brute Force parece ser

  1. registra o intervalo de memória da configuração atual
  2. desligue, remova o DIMM em questão e todos os DIMMs acima dele
  3. reinicialize, revise a nova configuração.
por 07.01.2014 / 02:08
-1

Tudo é hoje em dia virtual.

Existe algo chamado MMU no hardware que já traduz endereços para o sistema operacional em endereços físicos reais. Ele também pode distribuir a carga entre os DIMMs e mapear outras partes do hardware no espaço de endereço. O que é chamado de espaço de endereço físico no nível do sistema operacional já é via a visualização traduzida TLB .

link é um boa explicação.

    
por 09.10.2016 / 20:17
-1

qual sistema operacional você está executando? Se o Linux abota esse comando?

grep -i 'System RAM' /proc/iomem    

a primeira colônia é o endereço físico;

referências de

: link link

    
por 24.12.2017 / 05:34