Я использую 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 ГБ:
Поскольку это сервер, меня не волнует графика. Так что я установил его на самый низкий уровень.
Internal Graphics Mode Select: Auto
Enabled, 1MB <--
Enabled, 8MB
DVMT Mode Select: Fixed Mode <--
Auto
DVMT/FIXED Memory: 128MB <--
256MV
Тем не менее, 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
источник
Ответы:
Вам нужно включить отображение памяти НА в биосе. В противном случае он не переназначит память выше границы 4 ГБ, а часть памяти будет закрыта аппаратными отображениями.
источник
Memory Hole Remapping
(AMIBIOS), POST будет сообщать приблизительно 3,3 ГБ, в то время как DMI будет по-прежнему перечислять два модуля по 2 ГБ каждый.PCI также использует часть адресного пространства. В материнскую плату встроены как карты PCI, так и устройства PCI (например, чипсет).
Обычно это означало, что из 4 ГБ было доступно только 3–3,5 ГБ, даже если вы не использовали современный графический процессор с большим количеством встроенной оперативной памяти.
источник
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
)1<<32
или это ядро не знает как это понять.smem
установлено, попробуйтеsmem -R 4G -w
для общего обзора доступной / используемой памяти.Ваш недостающий ОЗУ используется прошивкой:
Подводя итог:
Итак, вы видите, он составляет до 4 ГБ. И вот ~ 800M, о которых вы сообщаете, пропали без вести:
источник
0x100000000 (1<<32)
? Он ведет себя так, как будто это 32-битная система.smem -R 2G -w
скажем, с 2G в машине (особенно в отношении прошивки / аппаратного обеспечения, так как, кажется, это раздел, в котором «недостающие 800M» шли с 4G)? Было бы довольно забавно, если бы прошивка вдруг больше не нуждалась в этих 800М ...AMI BIOS detected: BIOS may corrupt low RAM, working around it.
- и замечание из Википедии (из вашей ссылки e820): «Иногда BIOS содержит ошибки и неправильно сообщает о зарезервированной памяти. Это может привести к тому, что программное обеспечение для тестирования памяти, такое как Memtest, сообщит об ошибках». ? РЕДАКТИРОВАТЬ: Ах, нет - это было бы просто приходится 64к не 800М ...