Лише 3,2 ГБ оперативної пам’яті 4 Гб виявлено на 64-розрядному Debian


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

У мене на материнській платі G31M-S є 2 сумісні палички 2 Гб DDR2 . Він підтримує до 8 ГБ:

введіть тут опис зображення

Оскільки це сервер, я не дуже переймаюся графікою. Тому я встановив його на найнижчому.

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

введіть тут опис зображення

Однак 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

Переконайтесь, що перезавантаження пам’яті увімкнено у BIOS.
Девід Шварц

@DavidSchwartz Я спробував увімкнути це, і ядро ​​запанікувало завантаження. Я можу спробувати це з живим компакт-диском.
Джонатан Райнхарт

@DavidSchwartz Ви абсолютно праві. Якщо ввімкнути перезапис пам’яті, схоже, це зроблено. Без його ввімкнення, Memtest86 + повідомляє ~ 3300 МБ. Коли він увімкнено, він повідомляє 4086 Мб. Якщо ви зробите таку відповідь, я з радістю прийму.
Джонатан Райнхарт

Відповіді:


5

Вам необхідно включити Memory Remapping ON в BIOS. В іншому випадку вона не перезаписує пам'ять вище межі 4 ГБ, а деяка пам’ять буде прикрита апаратними відображеннями.


У цьому і була проблема. Якщо ввімкнути перезапис пам’яті, схоже, це зроблено. Без його ввімкнення, Memtest86 + повідомляє ~ 3300 МБ. Коли він увімкнено, він повідомляє 4086 Мб.
Джонатан Райнхарт

Перед тим, як активувати Memory Hole Remapping(AMIBIOS), POST повідомив б приблизно про 3,3 ГБ, тоді як DMI все ще перелічував би два модулі по 2 ГіБ кожен.
njsg

5

PCI також використовує частину адресного простору. І PCI-карти, і PCI-пристрої вбудовані в материнську плату (наприклад, чіпсет).

Зазвичай це означало, що з 4 ГБ доступно лише від 3 до 3 ½ ГБ, навіть якщо ви не використовували сучасний графічний процесор з великою кількістю вбудованої оперативної пам’яті.


Я досить ігнорував цей факт ... я маю на увазі 0,8 ГБ? Однак вгорі карта e820 є 0x100000000 == 1<<32, що цікаво. То чому БІОС не відображає решту ОЗУ вище 1 << 32? Це Celeron E3400 і /proc/cpuinfoкаже, що address sizes : 36 bits physical, 48 bits virtualце має бути добре для 64 Гб. ( (1<<36) / (1024*1024*1024) == 64)
Джонатан Райнхарт

Посібник для моєї старої материнської плати Tyan - це єдиний, який, здавалося, попереджає мене про те, що хоч він підтримує 4 Гб оперативної пам’яті, він ніколи не виставлятиме все це в ОС. Залежно від використовуваних карт розширення (звичайний старий PCI, 66 МГц, 64 біт), це може забезпечити близько 3,3 ГБ корисного простору. Я ніколи не перевіряв це, оперативна пам'ять 512 Мб - це все, що я міг собі дозволити. (Це було назад, коли ця подвійна материнська плата все ще мала на увазі використання двох фізичних процесорів. З того часу все може змінитися, і PCIe може не мати однакового обмеження. Але більшість материнських плат все ще мають PCI і PCIe).
Геннес

Дивіться мою редакцію. Я думаю, що проблема полягає в тому, що або BIOS відмовляється повідомляти про будь-яку пам'ять 1<<32, або це ядро ​​не знає, як це зрозуміти.
Джонатан Райнхарт

Чи вважали ви спільну пам'ять, яку використовує ваша внутрішня графіка? Якщо ви smemвстановили, спробуйте smem -R 4G -wзагальний огляд наявної / використаної пам'яті.
Іззі

1
@Hennes Ця відповідь мала б ідеальний сенс, якби це була 32-бітна система. Але не для 64-розрядних (з 36-бітною фізичною адресацією пам'яті).
Джонатан Райнхарт

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 Гб. І ось ~ 800 млн. Повідомлень про відсутність:

firmware/hardware            843592          0     843592

Так, і я не здивований цим. Питання в тому, чому BIOS не повідомляє, що вище 800 Мб оперативної пам’яті 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, повідомляє про помилки." ? EDIT: Ага, ні - на це було б лише 64 к , а не 800 млн ...
Іззі

Я можу перевірити, коли повернусь додому, але я припускаю, що це скаже те саме. Подивіться на карту E820 на 2 Гб. За спостереженням, це виглядає приблизно так само, за винятком того, що зарезервовані / ACPI діапазони нижче в просторі додатка (деякі з них).
Джонатан Райнхарт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.