Conoscere le dimensioni della pagina

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

$ adb shell

Usa il codice di programmazione

In C++, preferisci getpagesize(2):

# include <unistd.h>
...
... = getpagesize();

In Java, puoi utilizzare la configurazione di sistema:

import android.system.Os;
import android.system.OsConstants;

... = Os.sysconf(OsConstants._SC_PAGE_SIZE);

Usa il comando getconf

Usa il comando getconf per ottenere le dimensioni della pagina, come mostrato di seguito:

$ getconf PAGE_SIZE
4096

Usa lo pseudofile /proc/<pid>/smaps

Il campo KernelPageSize nello pseudo file /proc/<pid>/smaps mostra la pagina come mostrato di seguito:

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

Usa il flag del linker LD_SHOW_AUXV=1

Usa il flag LD_SHOW_AUXV per stampare il vettore ausiliario del programma che sta per essere eseguito. Il campo AT_PAGESZ contiene le dimensioni della pagina, come mostrato di seguito:

$ 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

Usa lo pseudofile /proc/config.gz

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

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

Utilizza il vettore ausiliario

Quando viene eseguito un programma, il kernel alloca e inizializza il vettore con informazioni, come le dimensioni della pagina, utilizzate dall'immagine dinamica Linker. Il vettore ausiliario può essere letto dallo pseudo file /proc/<pid>/auxv. La dimensione della pagina dal vettore ausiliario del processo 1 può essere come mostrato di seguito:

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

Dove:

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