Halaman ini mencantumkan berbagai cara untuk mendapatkan ukuran halaman kernel yang digunakan di
perangkat. Untuk terhubung ke perangkat, Anda dapat menggunakan adb
.
$ adb shell
Menggunakan kode pemrograman
Di C++, pilih getpagesize(2)
:
# include <unistd.h>
...
... = getpagesize();
Di Java, Anda dapat menggunakan konfigurasi sistem:
import android.system.Os;
import android.system.OsConstants;
... = Os.sysconf(OsConstants._SC_PAGE_SIZE);
Menggunakan perintah getconf
Gunakan perintah getconf
untuk mendapatkan ukuran halaman, yang ditampilkan sebagai berikut:
$ getconf PAGE_SIZE
4096
Menggunakan file pseudo /proc//smaps
Kolom KernelPageSize
dalam file pseudo /proc/<pid>/smaps
menampilkan ukuran
halaman, yang ditampilkan sebagai berikut:
$ grep KernelPageSize /proc/1/smaps
KernelPageSize: 4 kB
Menggunakan flag penaut LD_SHOW_AUXV=1
Gunakan flag LD_SHOW_AUXV
untuk mencetak vektor tambahan program
yang akan dieksekusi. Kolom AT_PAGESZ
berisi ukuran halaman,
yang ditampilkan sebagai berikut:
$ 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
Menggunakan file pseudo /proc/config.gz
Periksa konfigurasi kernel untuk ukuran halaman dalam file pseudo
/proc/config.gz
. Konfigurasi yang mungkin untuk ukuran halaman adalah:
CONFIG_ARM64_4K_PAGES=y
: kernel menggunakan halaman 4096 byte.CONFIG_ARM64_16K_PAGES=y
: kernel menggunakan halaman 16.384 byte.CONFIG_ARM64_64K_PAGES=y
: kernel menggunakan halaman 65536 byte.
$ zcat /proc/config.gz | grep "CONFIG_ARM64_[164K]*_PAGES=y"
CONFIG_ARM64_16K_PAGES=y
Menggunakan vektor tambahan
Saat program dieksekusi, kernel mengalokasikan dan menginisialisasi vektor
bantuan dengan informasi, seperti ukuran halaman, yang digunakan oleh penaut
dinamis. Vektor tambahan dapat dibaca dari file pseudo
/proc/<pid>/auxv
. Ukuran halaman dari vektor tambahan proses 1 dapat
ditampilkan sebagai berikut:
$ od -N8 -j56 -td8 -An /proc/1/auxv
4096
Dalam hal ini:
od
membuang file dalam format heksadesimal, desimal, atau format lainnya.-N8 -j56
membuang 8 byte mulai dari offset 56 ke dalam file, yang sesuai denganAT_PAGESZ
.-td8
memformat nilai sebagai bilangan bulat 8 byte desimal.-An
hanya menyebabkan nilai ditampilkan, bukan alamatnya.
Membaca dari image kernel
Anda dapat membaca header image kernel untuk menentukan ukuran halaman. Hal ini berguna di bootloader, jika Anda perlu mengetahui jenis kernel yang sedang di-booting.
Ukuran halaman berada di byte ke-25 header kernel:
$ file Image
Image: Linux kernel ARM64 boot executable Image, little-endian, 16K pages
$ hexdump -C Image -n 48
00000000 4d 5a 40 fa ff 7f 7b 14 00 00 00 00 00 00 00 00 |MZ@...{.........|
00000010 00 00 64 02 00 00 00 00 0c 00 00 00 00 00 00 00 |..d.............|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000030
Dalam contoh ini, nilainya adalah 0x0C = 0000 1100b
. Bit 1 memiliki nilai 0
,
dan bit 2 memiliki nilai 1
. Dengan membaca dua bit ini, kita mendapatkan 10b
atau 2
dalam
desimal. Berdasarkan nilai bit ini, Anda dapat menentukan ukuran halaman kernel:
0
- Tidak ditentukan1
- 4 KB2
- 16 KB3
- 64 KB
Untuk informasi selengkapnya, lihat dokumentasi kernel Linux