당신은 읽어야 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 쿼크와 예약 된 메모리 영역이 나머지를 설명 할 것입니다. 자세한 내용은 모르겠습니다.)
MemTotal
in /proc/meminfo
은 사용 가능한 RAM 을 나타냅니다. 부팅 순서가 끝나면 커널은 init
더 이상 필요하지 않은 데이터를 비우 므로보고 된 값 /proc/meminfo
은 부팅 순서의 초기 부분에서 커널이 인쇄 하는 값 보다 약간 높을 수 있습니다.
( 해당 디스플레이 meminfo
에는 간접적으로 사용 totalram_pages
됩니다. x86_64의 경우 이는 NUMA가 아닌 커널의 경우 자체 arch/x86/mm/init_64.c
를 통해 계산됩니다 .)free_all_bootmem()
mm/bootmem.c