Можно ли найти диапазон физических адресов DIMM?

17

Отмечу, что здесь поможет SMBios Type 20, но он не является обязательным для версии 2.5 (2006-09-05), стр. 25, L796 и стр. 131 , тогда как типы 16, 17 и 19 являются обязательными, но не совсем Помогите.

Массив физической памяти (тип 16)

Существует одна из этих структур для всей системы, объясняющая, что возможно на этой плате.

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

Устройство памяти (тип 17)

На каждый Dimm есть одна запись, которая говорит вам о физических Dimms, установленных на плате.

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

Адрес, сопоставленный массиву памяти (тип 19)

Таких записей может быть несколько, и каждая запись перечисляет диапазон физических адресов.

Вот вывод с двумя блоками по 2 ГБ:

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

А вот и выход с 4 палками; 2 * 2 ГБ и 2 * 4 ГБ:

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

Обратите внимание, что в первом примере выходных данных было два модуля DIMM по 2 ГБ, но два диапазона: 3,3 ГБ и 0,7 ГБ. С помощью 4 диммов система также объединит область адресов, отображаемых в массиве памяти, на две порции, поскольку она просто представляет собой карту e820, то есть допустимые диапазоны физических адресов памяти.

От 1 до многих записей типа 20 связаны только с одним устройством памяти типа 17, что означает, что весь физический диапазон может быть известен:

пример

$ 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

Кажется возможным перейти от адреса к DIMM для EDAC - Обнаружение и исправление ошибок , но не от DIMM до всего диапазона.

Глядя на исходный код mcelog , он также использует тип 20 для своего декодирования.

Alun
источник
Можете ли вы объяснить свой вопрос дальше? Я не совсем понимаю, что вы спрашиваете. Больше деталей или примеров было бы огромным плюсом. 2 инструмента, которые я бы начал, dmidecodeи lshw, но я думаю, что вы ищете больше, чем то, что они предоставляют?
SLM
@slm: lshwиспользует в dmidecodeкачестве базы кода и dmidecode -t 20дает требуемую информацию. Но, как уже отмечалось, в версии 2.5 SMBIOS структура держит эту информацию «Memory Device Подключенные Адрес» ака Тип 20 или банк расположение не является обязательным - таким образом , Q, если есть другой способ получить ту же информацию. - Связь между type 17«S Локатором стоимостью и физическим диапазоном адресов (как при необходимости обеспечивается Type 20).
Runium
@Sukminder - спасибо. Эта информация, вероятно, должна быть просто включена в вопрос. Так как у вас есть ручка, вы не возражаете?
Slm
@Sukminder - я добавил пример dmidecode -t 20вывода, можете ли вы объяснить значение локатора типа 17 по сравнению с физическим адресом, тип 20?
SLM
Я предполагаю, что вы не работаете в правительственном агентстве из трех букв или не имеете уровня финансирования. И, если вы там, то вы не спрашиваете здесь. В современных ПК / серверах / MAC диапазоны физической памяти часто сопоставляются с виртуальными диапазонами, а затем ОС может быть повторно сопоставлена ​​ОС, возможно, вы не сможете выяснить это. Даже тогда, это могло бы отобразить это в 640 КБ + Расширенная Память дней DOS. Использование 32-битной ОС, скорее всего, даст вам ответ, отличный от 64-битной ОС. Какова ваша конечная цель?
MikeP

Ответы:

1

Если у вас есть несколько модулей DIMMS, BIOS может настроить их на чередование. Таким образом, у вас может быть один 2G DIMM, физический 0G-> 4G, байты 0-7, пропуск 8-15. (т.е. младшие 64 бита) Другой модуль 2G DIMM - это физический 0G-> 4G, байты 8-15, пропуск 0-7. (старшие 64 бита). Обратите внимание, что я думаю, что чередование на самом деле больше, чем это, потому что я думаю, что если у вас есть память QDR, то система может выполнять 1 адрес, 8x 64-битных циклов данных, так что чередование по блокам по 64 байта было бы лучше.

Физическое устройство 0,7G и 3,3G, которое вы видите, связано с необходимостью держать некоторые нижние 4G открытыми для устройств PCI, VGA-буферов, классического дерьма <1M 8086 и т. Д. Это делается северным мостом. Таким образом, у вас есть карта типа: 0-> 640K, 1M-> 3.3G, 0,7G для BIOS, PCI и т. Д. До 4G. А потом 4G-> 4.7G для оперативной памяти.

MCR
источник
0

Решение грубой силы, кажется,

  1. войти в диапазон памяти текущей конфигурации
  2. отключите питание, удалите соответствующий модуль DIMM и все модули DIMM над ним
  3. перезагрузите компьютер, просмотрите новую конфигурацию.
K7AAY
источник
2
Не уверен, что это помогает ... т.е. если у вас было 6 модулей DIMM по 2 ГБ, и вы удалили пару, ваш верхний диапазон, скорее всего, просто уменьшится на 4 ГБ, но это не говорит вам, где они были в предыдущем случае, но я протестирую это и обновить.
Alun
«... и все модули DIMM над ним», например, если рассматриваемый модуль DIMM находится в слоте 2, также удалите модуль DIMM в слотах 3 ... n
K7AAY
0

на какой ОС вы работаете? Если Linux, то как abount этой команды?

grep -i 'System RAM' /proc/iomem    

первый столбец - это физический адрес;

ссылки: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Reference_Guide/s2-proc-iomem.html /superuser/480451/what-kind-of -Память-адрес-является-The-оны-показали-на-PROC-ioports-и-PROC-iomem

Лан Лин
источник
-1

В наше время все виртуально.

В оборудовании есть нечто, называемое MMU, которое уже переводит адреса для ОС в реальные физические адреса. Это также может распределить нагрузку между модулями DIMM и отобразить другие части оборудования в адресное пространство. То, что называется физическим адресным пространством на уровне операционной системы, уже является представлением в переводе TLB .

/programming/36639607/how-exactly-do-kernel-virtual-addresses-get-translated-to-physical-ram - хорошее объяснение.

Томас
источник
1
Он сказал, что хочет диапазон физических адресов.
Диркт
1
Intel добавила MMU к 80286, и она была полностью функциональной на i386 ... это было более 30 лет назад ... так много для "в наше время все виртуально" :) память почти всегда была виртуализирована.
Эрик