Linux가 물리적으로 설치 한 것보다 많은 메모리를 표시하는 이유는 무엇입니까?


11

나는 스왑에 대해 알고 있습니다.이 질문은 그것에 관한 것이 아닙니다. dmesg에서 Linux (x86-64) 커널은 내가 가진 메모리 양에 대해 알려줍니다.

[    0.000000] Memory: 3890880k/4915200k available (6073k kernel code, 861160k absent, 163160k reserved, 5015k data, 1596k init)

cat /proc/meminfo 내가 가지고 있다고 말해

MemTotal:        3910472 kB

그리고 내 계산에 따르면 정확히 4 * 1024 * 1024 = 4194304k RAM이 있어야한다고 생각합니다. 어느 것 방법은 위의 dmesg를 줄에 두 번째 그림보다 작은!

이 모든 다른 수치는 무엇입니까?

그건 그렇고, uname -a출력 :

Linux pavilion 3.2.2-1.fc16.x86_64 #1 SMP Thu Jan 26 03:21:58 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

답변:


20

당신은 읽어야 dmesg으로 "메모리 AKB / BKB 가능"값 :

현재 사용할 수있는 A가 있으며 시스템에 가장 높은 페이지 프레임 수에 페이지 크기를 곱한 값은 B입니다.

이것은 arch/x86/mm/init_64.c:

printk(KERN_INFO "Memory: %luk/%luk available (%ldk kernel code, "
                 "%ldk absent, %ldk reserved, %ldk data, %ldk init)\n",
                 nr_free_pages() << (PAGE_SHIFT-10),
                 max_pfn << (PAGE_SHIFT-10),
                 codesize >> 10,
                 absent_pages << (PAGE_SHIFT-10),
                 reservedpages << (PAGE_SHIFT-10),
                 datasize >> 10,
                 initsize >> 10);

nr_free_pages()커널에 의해 관리되고 현재 사용되고 있지 않은 물리적 메모리의 양을 반환합니다. max_pfn가장 높은 페이지 프레임 번호입니다 ( PAGE_SHIFT시프트는이를 kb로 변환합니다). 가장 높은 페이지 프레임 수는 예상보다 훨씬 높을 수 있습니다. BIOS에서 수행 한 메모리 매핑에는 구멍이있을 수 있습니다.
이 구멍이 차지하는 양은 absent_pages변수 로 추적되며 로 표시됩니다 kB absent. "사용 가능"출력의 두 번째 숫자와 실제 설치된 RAM의 차이를 설명해야합니다.

당신은 grep으로 할 수 BIOS-e820있는 dmesg"참조"이 구멍에. 메모리 맵이 거기에 표시됩니다 ( dmesg부팅 후 출력 맨 오른쪽 ). 실제 사용 가능한 RAM이있는 실제 주소를 확인할 수 있어야합니다.
(다른 x86 쿼크와 예약 된 메모리 영역이 나머지를 설명 할 것입니다. 자세한 내용은 모르겠습니다.)

MemTotalin /proc/meminfo은 사용 가능한 RAM 을 나타냅니다. 부팅 순서가 끝나면 커널은 init더 이상 필요하지 않은 데이터를 비우 므로보고 된 값 /proc/meminfo은 부팅 순서의 초기 부분에서 커널이 인쇄 하는 값 보다 약간 높을 수 있습니다.

( 해당 디스플레이 meminfo에는 간접적으로 사용 totalram_pages됩니다. x86_64의 경우 이는 NUMA가 아닌 커널의 경우 자체 arch/x86/mm/init_64.c를 통해 계산됩니다 .)free_all_bootmem()mm/bootmem.c

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.