Mam serwer CentOS 5.10 ( 32-bitowy ) działający na VMWare. Przydzielono 4 GB pamięci RAM.
Jeśli uruchomię dmidecode -t 17 | grep Size | grep MB
, zobaczę:
Size: 4096 MB
Jednak kiedy biegnę free
, widzę:
total used free shared buffers cached
Mem: 3107140 1239244 1867896 0 332 400464
-/+ buffers/cache: 838448 2268692
Swap: 2096472 0 2096472
Dlaczego istnieje rozbieżność między całkowitą ilością free
raportów pamięci a danymi dmidecode
wyjściowymi?
Jądro, które uruchamiam to:
2.6.18-371.4.1.el5 #1 SMP Thu Jan 30 06:09:24 EST 2014 i686 i686 i386 GNU/Linux
Wprawdzie jądro nie działa, PAE
ale pomyślałem, że jest to konieczne tylko w przypadku pamięci przekraczającej 4 GB.
Wiem, że brakuje mi czegoś prostego - czy ktoś mógłby wyjaśnić?
Dodatkowe uwagi / spostrzeżenia
Zdecydowanie wygląda na to, że moje jądro rezerwuje sporo pamięci na inne rzeczy. Oto co widzę w /var/log/dmesg
:
Linux version 2.6.18-371.4.1.el5 ([email protected]) (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
pokaże pamięć używaną przez urządzenia, dla których Linux ma sterownik. Mapa pamięci e820 (na samym początkudmesg
świeżo uruchomionego jądra) pokaże ci, co myśli twój BIOS / EFI, które regiony są zarezerwowane. Dopasowywanie ich do siebie jest AFAIK ręcznym zadaniem bez wsparcia narzędziowego.Dane wyjściowe
free
polecenia nie liczą zarezerwowanej pamięci jądra i kilku innych małych bitów. Zobaczysz tę rozbieżność nawet w 64-bitowym jądrze, a nawet z <2 GB pamięci RAM.źródło
free
, a maszyna o pojemności 4 GB - 3948 MB.Linia krytyczna z twojej fizycznej mapy RAM jest następująca:
Ta linia pokazuje, że 1 GB (0x40000000 bajtów, szesnastkowo) fizycznej pamięci RAM systemu jest mapowany przez BIOS powyżej limitu 4 GB, co czyni go niedostępnym dla systemu 32-bitowego bez PAE.
źródło