У меня есть сервер CentOS 5.10 ( 32-разрядный ), работающий на VMWare. Выделено 4 ГБ оперативной памяти.
Если я бегу, 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
/proc/meminfo
?/proc/iomem
покажет вам память, используемую устройствами, для которых у Linux есть драйвер. Карта памяти e820 (в самом началеdmesg
только что загруженного ядра) покажет вам, что ваш BIOS / EFI думает, какие регионы зарезервированы. Сопоставить их друг с другом - это AFAIK ручное задание без поддержки инструмента.Вывод
free
команды не учитывает зарезервированную память ядра и несколько других маленьких битов. Вы увидите это несоответствие даже в 64-битном ядре и даже с <2 ГБ ОЗУ.источник
free
, а машина объемом 4 ГБ - 3948 МБ.Критическая строка из вашей физической карты памяти:
Эта строка показывает, что 1 ГБ (0x40000000 байт, шестнадцатеричный) физического ОЗУ вашей системы отображается BIOS выше предела 4 ГБ, что делает его недоступным для 32-разрядной системы без PAE.
источник