В 64-битном Debian обнаружено только 3,2 ГБ из 4 ГБ оперативной памяти

9

Я использую Debian Squeeze (x64):

# uname -srvmo
Linux 2.6.32-5-amd64 #1 SMP Mon Jan 16 16:22:28 UTC 2012 x86_64 GNU/Linux

У меня есть 2 совместимых 2 ГБ флешки DDR2 в моем Материнская плата G31M-S , Он поддерживает до 8 ГБ:

enter image description here

Поскольку это сервер, меня не волнует графика. Так что я установил его на самый низкий уровень.

Internal Graphics Mode Select: Auto
                               Enabled, 1MB   <--
                               Enabled, 8MB
DVMT Mode Select:              Fixed Mode     <--
                               Auto
    DVMT/FIXED Memory:         128MB          <--
                               256MV

enter image description here

Тем не менее, Linux обнаруживает только 3,19 ГБ памяти:

# cat /proc/meminfo
MemTotal:        3350712 kB
...

Глядя на Карта E820 :

[    0.000000] BIOS-provided physical RAM map:
[    0.000000]  BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
[    0.000000]  BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
[    0.000000]  BIOS-e820: 00000000000e6000 - 0000000000100000 (reserved)
[    0.000000]  BIOS-e820: 0000000000100000 - 00000000cfdb0000 (usable)
[    0.000000]  BIOS-e820: 00000000cfdb0000 - 00000000cfdc0000 (ACPI data)
[    0.000000]  BIOS-e820: 00000000cfdc0000 - 00000000cfdf0000 (ACPI NVS)
[    0.000000]  BIOS-e820: 00000000cfdf0000 - 00000000cfe00000 (reserved)
[    0.000000]  BIOS-e820: 00000000fed00000 - 00000000fed00400 (reserved)
[    0.000000]  BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
[    0.000000]  BIOS-e820: 00000000ff380000 - 0000000100000000 (reserved)
[    0.000000] DMI present.
[    0.000000] AMI BIOS detected: BIOS may corrupt low RAM, working around it.
[    0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved)

И немного по математике

>>> ((0x9F800 - 0x10000) + (0xCF6B0000 - 0x100000)) / 1024.0 / 1024.0 / 1024.0
3.240476608276367

Мы получаем примерно один и тот же ответ.

Что мне не хватает?


Я не совсем покупаю аргумент "адресного пространства PCI". Если вытащить одну из двух 2-ГБ флешек, на экране настройки появится 2048 МБ.

# cat /proc/meminfo
MemTotal:        2058432 kB

Это 1.96 ГБ.

Карта E820 снова:

[    0.000000] BIOS-provided physical RAM map:
[    0.000000]  BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
[    0.000000]  BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
[    0.000000]  BIOS-e820: 00000000000e6000 - 0000000000100000 (reserved)
[    0.000000]  BIOS-e820: 0000000000100000 - 000000007fdb0000 (usable)
[    0.000000]  BIOS-e820: 000000007fdb0000 - 000000007fdc0000 (ACPI data)
[    0.000000]  BIOS-e820: 000000007fdc0000 - 000000007fdf0000 (ACPI NVS)
[    0.000000]  BIOS-e820: 000000007fdf0000 - 000000007fe00000 (reserved)
[    0.000000]  BIOS-e820: 00000000fed00000 - 00000000fed00400 (reserved)
[    0.000000]  BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
[    0.000000]  BIOS-e820: 00000000ff380000 - 0000000100000000 (reserved)
[    0.000000] DMI present.
[    0.000000] AMI BIOS detected: BIOS may corrupt low RAM, working around it.
[    0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved)

И математика ...

>>> ((0x9F800 - 0x10000) + (0x7fdb0000 - 0x100000)) / 1024.0 / 1024.0 / 1024.0
1.9973125457763672

Итак, я получил 2 ГБ / 2 ГБ. /proc/cpuinfo показывает, что мой процессор поддерживает 36-битную физическую адресацию. 2 ^ 36 = 64 ГБ, что я не событие близко к.


# ./smem -R 4G -w
Area                           Used      Cache   Noncache
firmware/hardware            843592          0     843592
kernel image                      0          0          0
kernel dynamic memory        181116     134616      46500
userspace memory             287784      19736     268048
free memory                 2881812    2881812          0
Jonathon Reinhart
источник
Убедитесь, что переназначение памяти НА в биосе.
David Schwartz
@DavidSchwartz Я попытался включить это, и ядро ​​запаниковало при загрузке. Я могу попробовать это с живым CD, хотя.
Jonathon Reinhart
@DavidSchwartz Вы абсолютно правы. Включение переназначения памяти, кажется, добилось цели. Без включения Memtest86 + сообщает ~ 3300 МБ. С включенным он сообщает 4086 МБ. Если вы ответите так, я с радостью приму.
Jonathon Reinhart

Ответы:

5

Вам нужно включить отображение памяти НА в биосе. В противном случае он не переназначит память выше границы 4 ГБ, а часть памяти будет закрыта аппаратными отображениями.

David Schwartz
источник
Это была проблема. Включение переназначения памяти, кажется, добилось цели. Без включения Memtest86 + сообщает ~ 3300 МБ. С включенным он сообщает 4086 МБ.
Jonathon Reinhart
То же самое, прежде чем включить Memory Hole Remapping (AMIBIOS), POST будет сообщать приблизительно 3,3 ГБ, в то время как DMI будет по-прежнему перечислять два модуля по 2 ГБ каждый.
njsg
5

PCI также использует часть адресного пространства. В материнскую плату встроены как карты PCI, так и устройства PCI (например, чипсет).

Обычно это означало, что из 4 ГБ было доступно только 3–3,5 ГБ, даже если вы не использовали современный графический процессор с большим количеством встроенной оперативной памяти.

Hennes
источник
Я в значительной степени проигнорировал этот факт ... Я имею в виду 0,8 ГБ? Тем не менее, верхняя часть карты e820 0x100000000 == 1<<32, что интересно. Так почему же BIOS не отображает остальную часть ОЗУ выше 1 & lt; & lt; 32? Это Celeron E3400, и /proc/cpuinfo говорит address sizes : 36 bits physical, 48 bits virtual Это должно быть хорошо для 64 ГБ. ( (1<<36) / (1024*1024*1024) == 64 )
Jonathon Reinhart
Руководство для моей старой материнской платы Tyan - единственное, которое, казалось, предупредило меня о том, что, хотя оно поддерживает 4 ГБ ОЗУ, оно никогда не представит все это ОС. В зависимости от используемых плат расширения (обычный старый PCI, 66Mhz, 64bit), он может использовать около 3,3 ГБ свободного места. Я никогда не проверял это, 512 МБ ОЗУ было всем, что я мог себе позволить. (Это было тогда, когда на этой материнской плате с двумя ЦП все еще предполагалось использовать два физических ЦП. С тех пор ситуация могла измениться, и PCIe мог не иметь одинакового предела. Но большинство материнских плат по-прежнему имеют как PCI, так и PCIe).
Hennes
Смотрите мое редактирование. Я думаю, что проблема в том, что либо BIOS отказывается сообщать любую память о 1<<32или это ядро ​​не знает как это понять.
Jonathon Reinhart
Рассматривали ли вы разделяемую память, используемую вашей внутренней графикой? Если у вас есть smem установлено, попробуйте smem -R 4G -w для общего обзора доступной / используемой памяти.
Izzy
1
@Hennes Этот ответ имел бы смысл, если бы это была 32-битная система. Но не для 64-битных (с 36-битной адресацией физической памяти).
Jonathon Reinhart
2

Ваш недостающий ОЗУ используется прошивкой:

# ./smem -R 4G -w
Area                           Used      Cache   Noncache
firmware/hardware            843592          0     843592
kernel image                      0          0          0
kernel dynamic memory        181116     134616      46500
userspace memory             287784      19736     268048
free memory                 2881812    2881812          0

Подводя итог:

echo $((181116 + 287784 + 2881812 + 843592))
4194304

Итак, вы видите, он составляет до 4 ГБ. И вот ~ 800M, о которых вы сообщаете, пропали без вести:

firmware/hardware            843592          0     843592
Izzy
источник
Да, и я не удивлен этим. Вопрос в том, почему BIOS не сообщает, что 800 МБ ОЗУ выше 0x100000000 (1<<32) ? Он ведет себя так, как будто это 32-битная система.
Jonathon Reinhart
Да, я думаю, что этот ответ верен, но этот последний вопрос остается :-)
Jonathon Reinhart
Так что же smem -R 2G -w скажем, с 2G в машине (особенно в отношении прошивки / аппаратного обеспечения, так как, кажется, это раздел, в котором «недостающие 800M» шли с 4G)? Было бы довольно забавно, если бы прошивка вдруг больше не нуждалась в этих 800М ...
Izzy
Может ли это быть связано с AMI BIOS detected: BIOS may corrupt low RAM, working around it. - и замечание из Википедии (из вашей ссылки e820): «Иногда BIOS содержит ошибки и неправильно сообщает о зарезервированной памяти. Это может привести к тому, что программное обеспечение для тестирования памяти, такое как Memtest, сообщит об ошибках». ? РЕДАКТИРОВАТЬ: Ах, нет - это было бы просто приходится 64к не 800М ...
Izzy
Я могу проверить, когда вернусь домой, но я предполагаю, что это скажет то же самое. Посмотрите на карту E820 на 2 ГБ. По наблюдениям это выглядит примерно так же, за исключением того, что зарезервированные / ACPI диапазоны находятся ниже в пространстве адресов (некоторые из них).
Jonathon Reinhart