이 페이지에는 기기에 사용된 커널 페이지 크기를 가져오는 다양한 방법이 나열되어 있습니다. 기기에 연결하려면 adb
를 사용하세요.
$ adb shell
getconf
명령어 사용
다음과 같이 getconf
명령어를 사용하여 페이지 크기를 가져옵니다.
$ getconf PAGE_SIZE
4096
/proc/<pid>/smaps
의사 파일 사용
다음과 같이 의사 파일 /proc/<pid>/smaps
의 KernelPageSize
필드에 페이지 크기가 표시됩니다.
$ cat /proc/1/smaps | grep KernelPageSize
KernelPageSize: 4 kB
LD_SHOW_AUXV=1
링커 플래그 사용
LD_SHOW_AUXV
플래그를 사용하여 실행되려고 하는 프로그램의 보조 벡터를 인쇄합니다. 다음과 같이 AT_PAGESZ
필드에 페이지 크기가 포함되어 있습니다.
$ LD_SHOW_AUXV=1 ls
AT_SYSINFO_EHDR 0x7250460000
AT_MINSIGSTKSZ 4720
AT_HWCAP 0b11111111111111111111111111111111
AT_PAGESZ 4096
AT_CLKTCK 100
AT_PHDR 0x5fda1e0040
AT_PHENT 56
AT_PHNUM 12
AT_BASE 0x72502f8000
AT_FLAGS 0
AT_ENTRY 0x5fda210000
AT_UID 0
AT_EUID 0
AT_GID 0
AT_EGID 0
AT_SECURE 0
AT_RANDOM 0x7fc59d66f8
AT_HWCAP2 0b100011001111111111
AT_EXECFN "/system/bin/ls"
AT_PLATFORM "aarch64"
data dev. init vendor
/proc/config.gz
의사 파일 사용
의사 파일 /proc/config.gz
의 커널 구성에서 페이지 크기를 확인합니다. 페이지 크기와 관련하여 가능한 구성은 다음과 같습니다.
CONFIG_ARM64_4K_PAGES=y
: 커널에서 4096 페이지 크기를 지원합니다.CONFIG_ARM64_16K_PAGES=y
: 커널에서 16384 페이지 크기를 지원합니다.CONFIG_ARM64_64K_PAGES=y
: 커널에서 65536 페이지 크기를 지원합니다.
$ zcat /proc/config.gz | grep "CONFIG_ARM64_[164K]*_PAGES=y"
CONFIG_ARM64_16K_PAGES=y
보조 벡터 사용
프로그램이 실행될 때 커널은 동적 링커에서 사용하는 페이지 크기 등의 정보와 함께 보조 벡터를 할당하고 초기화합니다. 보조 벡터는 의사 파일 /proc/<pid>/auxv
에 위치해 있으며 명렁어를 사용해 인쇄할 수 있습니다.
$ od -t d8 /proc/<pid>/auxv
조건:
- od 덤프 파일이 16진수, 10진수 또는 기타 형식으로 되어 있음
- -t가 형식 유형을 의미함
- d8이 형식이 10진수이며 정수 크기가 8바이트임을 나타냄
- <pid>가 프로세스 ID를 나타냄
명령어를 실행한 후 페이지 크기는 다음과 같이 0x68
오프셋에 있습니다.
$ od -t d8 /proc/1/auxv
0000000 33 548087410688
0000020 51 4720
0000040 16 4294967295
0000060 6 4096
0000100 17 100
0000120 3 367056650304
0000140 4 56
0000160 5 12
0000200 7 548085936128
0000220 8 0
0000240 9 367057567744
0000260 11 0
0000300 12 0
0000320 13 0
0000340 14 0
0000360 23 1
0000400 25 549659104168
0000420 26 144383
0000440 31 549659107303
0000460 15 549659104184
0000500 0 0
0000520