Почему “свободное” управляет, и “dmidecode” показывают различные значения для RAM?

У меня есть CentOS 5.10 (32-разрядная) работа сервера VMware. Это выделило 4 ГБ RAM.

Если я работаю dmidecode -t 17 | grep Size | grep MB Ясно:

Size: 4096 MB

Все же, когда я работаю free, Я вижу:

             total       used       free     shared    buffers     cached
Mem:       3107140    1239244    1867896          0        332     400464
-/+ buffers/cache:     838448    2268692
Swap:      2096472          0    2096472

Почему там несоответствие между общим объемом памяти free отчеты и dmidecode вывод?

Ядро, которое я выполняю:

2.6.18-371.4.1.el5 #1 SMP Thu Jan 30 06:09:24 EST 2014 i686 i686 i386 GNU/Linux

По общему признанию ядро не работает PAE но я думал, что это было только необходимо для памяти чрезмерные 4 ГБ.

Я знаю, что пропускаю что-то простое - кто-то может уточнить?

Дополнительные Примечания/Наблюдения

Определенно похоже, что мое ядро резервирует набор памяти для другого материала. Вот то, в чем я вижу /var/log/dmesg:

Linux version 2.6.18-371.4.1.el5 (mockbuild@builder17.centos.org) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-54)) #1 SMP Thu Jan 30 06:09:24 EST 2014
BIOS-provided physical RAM map:
 BIOS-e820: 0000000000010000 - 000000000009f800 (usable)
 BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
 BIOS-e820: 00000000000ca000 - 00000000000cc000 (reserved)
 BIOS-e820: 00000000000dc000 - 0000000000100000 (reserved)
 BIOS-e820: 0000000000100000 - 00000000bfef0000 (usable)
 BIOS-e820: 00000000bfef0000 - 00000000bfeff000 (ACPI data)
 BIOS-e820: 00000000bfeff000 - 00000000bff00000 (ACPI NVS)
 BIOS-e820: 00000000bff00000 - 00000000c0000000 (usable)
 BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved)
 BIOS-e820: 00000000fec00000 - 00000000fec10000 (reserved)
 BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
 BIOS-e820: 00000000fffe0000 - 0000000100000000 (reserved)
 BIOS-e820: 0000000100000000 - 0000000140000000 (usable)
Warning only 4GB will be used.
Use a PAE enabled kernel.
3200MB HIGHMEM available.
896MB LOWMEM available.
found SMP MP-table at 000f6bf0
Memory for crash kernel (0x0 to 0x0) notwithin permissible range
9
задан 29 October 2014 в 20:05
3 ответа

С 32-битным ядром у вас есть только 4 ГБ доступного адресного пространства . Часть этого адресного пространства должна использоваться (виртуальным или физическим) оборудованием в системе, например видеокартами, сетевыми интерфейсами и т. Д., Для своих собственных целей. Это использование обычно составляет от 256 МБ до 1 ГБ в зависимости от того, сколько адресного пространства требуется конкретному оборудованию.

Поскольку это адресное пространство используется оборудованием, соответствующая оперативная память обычно недоступна для 32-разрядной системы.

У вас есть пара вариантов:

  1. Предпочтительный вариант - запуск 64-битной операционной системы. Это значительно расширяет адресное пространство, поэтому остается достаточно места для всей оперативной памяти и оборудования. Он также нарушает 32-разрядное ограничение 2 ГБ / 3 ГБ для приложений, сохраняя при этом возможность запускать 32-разрядные программы. В общем, любая система с объемом оперативной памяти на 2 ГБ больше, чтобы избежать этих проблем, должна работать под управлением 64-разрядной ОС.
  2. Другой вариант - запустить 32-разрядное ядро ​​с включенным PAE. Это откроет ОЗУ, но каждый процесс по-прежнему будет ограничен адресным пространством 2 ГБ / 3 ГБ, в зависимости от особенностей сборки ядра. Поскольку 64-разрядные ОС отлично работают с 32-разрядными приложениями, это не имеет преимуществ и имеет множество недостатков (например, отсутствие пути обновления).
18
ответ дан 2 December 2019 в 22:20

Критическая строка из вашей физической карты RAM:

 BIOS-e820: 0000000100000000 - 0000000140000000 (usable)

Эта строка показывает, что 1 ГБ (0x40000000 байт, шестнадцатеричный) физической RAM вашей системы отображается BIOS над Ограничение в 4 ГБ делает его недоступным для 32-разрядной системы без PAE.

3
ответ дан 2 December 2019 в 22:20

Вывод команды free не учитывает зарезервированную память ядра и несколько других небольших битов. Вы увидите это несоответствие даже в 64-битном ядре и даже с <2 ГБ ОЗУ.

5
ответ дан 2 December 2019 в 22:20

Теги

Похожие вопросы