답변:
다음 getconf
명령을 통해 시스템 구성을 쿼리하여 시스템의 기본 페이지 크기를 찾을 수 있습니다 .
$ getconf PAGE_SIZE
4096
또는
$ getconf PAGESIZE
4096
참고 : 위의 단위는 일반적으로 바이트 단위이므로 4096은 4096 바이트 또는 4kB와 같습니다.
이것은 리눅스 커널의 소스에 고정되어 있습니다 :
$ more /usr/src/kernels/3.13.9-100.fc19.x86_64/include/asm-generic/page.h
...
...
/* PAGE_SHIFT determines the page size */
#define PAGE_SHIFT 12
#ifdef __ASSEMBLY__
#define PAGE_SIZE (1 << PAGE_SHIFT)
#else
#define PAGE_SIZE (1UL << PAGE_SHIFT)
#endif
#define PAGE_MASK (~(PAGE_SIZE-1))
비트를 이동할 때 2의 이진수 곱셈을 수행합니다. 따라서 왼쪽 ( 1 << PAGE_SHIFT
) 으로 비트를 이동 하면 2 ^ 12 = 4096의 곱셈이 수행됩니다.
$ echo "2^12" | bc
4096
하드웨어 (특히 CPU의 일부인 MMU )에 따라 가능한 페이지 크기가 결정됩니다. 프로세서 레지스터 크기와는 관련이 없으며 주소 공간 크기와는 간접적 인 관계 만 있습니다 (MMU가 둘 다 결정 함).
거의 모든 아키텍처는 4kB 페이지 크기를 지원합니다. 일부 아키텍처는 더 큰 페이지를 지원하고 일부는 더 작은 페이지를 지원하지만 4kB는 매우 광범위한 기본값입니다.
리눅스는 두 가지 페이지 크기를 지원합니다 :
CONFIG_HUGETLB_PAGE
필요 CONFIG_HUGETLBFS
하며 대부분의 용도로 사용). 이것은 두 번째로 깊은 MMU 디스크립터 레벨 (Linux가 PMD라고 부르는 것)에 해당합니다 (또는 일반적으로 모든 아키텍처에 적용되는지는 모르겠습니다).페이지 크기는 메모리 사용량, 메모리 사용량 및 속도가 절충됩니다.
더 큰 페이지 크기의 이익은 대부분의 응용 프로그램에서 작지만 비용은 상당합니다. 이것이 대부분의 시스템이 보통 크기의 페이지 만 사용하는 이유입니다.
getconf
유틸리티 또는 C 함수를 사용 하여 시스템의 (일반) 페이지 크기를 쿼리 할 수 있습니다 sysconf
.
$ getconf PAGE_SIZE
4096
거대한 페이지를 사용 하려면 hugetlbfs
파일 시스템을 마운트하고 파일을 mmap
ping해야합니다.
페이지 크기는 대부분 프로세서 아키텍처에 따라 다릅니다. x86에서 보호 모드를 도입 한 386 프로세서의 시간부터 페이지 크기는 4 kB입니다.
x64 모드에서는 2MB 크기의 큰 페이지가있을 수도 있습니다. 그러나 그것들을 사용하는 것은 약간 복잡합니다.
Wikipedia 기사 에서 페이지 크기에 대한 자세한 정보를 찾을 수 있습니다.