VMWare 에서 CentOS 5.10 ( 32 비트 ) 서버를 실행하고 있습니다. 4GB의 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
않지만 4GB를 초과하는 메모리에만 필요하다고 생각했습니다 .
간단한 것을 놓치고 있다는 것을 알고 있습니다. 누군가가 자세히 설명해 주시겠습니까?
추가 사항 / 관찰
내 커널이 다른 것들을 위해 많은 메모리를 예약하고있는 것처럼 보입니다. 다음은 내가 보는 것입니다 /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
답변
32 비트 커널의 경우 4GB의 사용 가능한 주소 공간 만 있습니다 . 이 주소 공간 중 일부는 비디오 카드, NIC 등과 같은 시스템의 (가상 또는 물리적) 하드웨어에서 자체 목적으로 사용해야합니다. 이 사용량은 특정 하드웨어에 필요한 주소 공간의 양에 따라 일반적으로 256MB-1GB입니다.
이 주소 공간은 하드웨어에서 사용되므로 해당 RAM은 일반적으로 32 비트 시스템에 액세스 할 수 없습니다.
몇 가지 옵션이 있습니다.
- 선호되는 옵션은 64 비트 운영 체제를 실행하는 것입니다. 이로 인해 주소 공간이 크게 확장되므로 모든 RAM 및 하드웨어를위한 충분한 공간이 있습니다. 또한 32 비트 프로그램을 실행하는 기능을 유지하면서 응용 프로그램의 2GB / 3GB 32 비트 제한을 해제합니다. 일반적으로 2GB 이상의 RAM이있는 시스템은 이러한 문제를 피하기 위해 64 비트 OS를 실행해야합니다.
- 다른 옵션은 PAE가 활성화 된 32 비트 커널을 실행하는 것입니다. 이렇게하면 RAM이 숨겨 지지만 커널 빌드의 특성에 따라 각 프로세스는 여전히 2GB / 3GB의 주소 공간으로 제한됩니다. 64 비트 OS는 32 비트 응용 프로그램을 완벽하게 실행하므로 업그레이드 경로 부족과 같은 장점과 단점이 없습니다.
답변
이 free
명령 의 출력은 예약 된 커널 메모리와 다른 작은 비트 수를 계산하지 않습니다. 이 차이는 64 비트 커널 및 <2GB RAM에서도 나타납니다.
답변
실제 RAM 맵의 중요한 라인은 다음과 같습니다.
BIOS-e820: 0000000100000000 - 0000000140000000 (usable)
이 줄은 시스템의 실제 RAM 중 1GB (0x40000000 바이트, 16 진수)가 4GB 제한을 초과하는 BIOS에 의해 매핑되어 PAE가없는 32 비트 시스템에서 액세스 할 수 없음을 나타냅니다.