Ottieni la dimensione della pagina

Questa pagina elenca i diversi modi per ottenere la dimensione della pagina del kernel utilizzata nel dispositivo. Per connetterti al dispositivo, puoi utilizzare adb .

$ adb shell

Utilizza il comando getconf

Utilizzare il comando getconf per ottenere la dimensione della pagina, mostrata come segue:

$ getconf PAGE_SIZE
4096

Utilizzare lo pseudo file /proc/<pid>/smaps

Il campo KernelPageSize nello pseudo file /proc/<pid>/smaps mostra la dimensione della pagina, mostrata come segue:

$ grep KernelPageSize /proc/1/smaps
KernelPageSize:        4 kB

Utilizza il flag del linker LD_SHOW_AUXV=1

Utilizzare il flag LD_SHOW_AUXV per stampare il vettore ausiliario del programma che sta per essere eseguito. Il campo AT_PAGESZ contiene la dimensione della pagina, mostrata come segue:

$ 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

Utilizzare lo pseudo file /proc/config.gz

Controllare la configurazione del kernel per la dimensione della pagina nello pseudo file /proc/config.gz . Le possibili configurazioni per la dimensione della pagina sono:

  • CONFIG_ARM64_4K_PAGES=y : il kernel utilizza pagine da 4096 byte.
  • CONFIG_ARM64_16K_PAGES=y : il kernel utilizza pagine da 16384 byte.
  • CONFIG_ARM64_64K_PAGES=y : il kernel utilizza pagine da 65536 byte.
$ zcat /proc/config.gz | grep "CONFIG_ARM64_[164K]*_PAGES=y"
CONFIG_ARM64_16K_PAGES=y

Usa il vettore ausiliario

Quando un programma viene eseguito, il kernel alloca e inizializza il vettore ausiliario con informazioni, come la dimensione della pagina, utilizzate dal linker dinamico. Il vettore ausiliario può essere letto dallo pseudo file /proc/<pid>/auxv . La dimensione della pagina dal vettore ausiliario del processo 1 può essere mostrata come segue:

$ od -N8 -j56 -td8 -An /proc/1/auxv
4096

Dove:

  • od scarica i file in formato esadecimale, decimale o altri formati.
  • -N8 -j56 scarica gli 8 byte a partire dall'offset 56 nel file, corrispondente a AT_PAGESZ .
  • -td8 formatta il valore come intero decimale a 8 byte.
  • -An fa sì che venga mostrato solo il valore, non il suo indirizzo.