Saber o tamanho da página

Esta página lista as diferentes maneiras de obter o tamanho da página do kernel usado no dispositivo. Para se conectar ao dispositivo, use adb.

$ adb shell

Usar código de programação

Em C++, prefira getpagesize(2):

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

Em Java, é possível usar a configuração do sistema:

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

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

Use o comando getconf.

Use o comando getconf para ver o tamanho da página, mostrado da seguinte maneira:

$ getconf PAGE_SIZE
4096

Usar o pseudoarquivo /proc/<pid>/smaps

O campo KernelPageSize no pseudoarquivo /proc/<pid>/smaps mostra a página tamanho, mostrado da seguinte forma:

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

Usar a sinalização do vinculador LD_SHOW_AUXV=1

Usar a flag LD_SHOW_AUXV para mostrar o vetor auxiliar do programa que está prestes a ser executado. O campo AT_PAGESZ contém o tamanho da página, mostrado da seguinte forma:

$ 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

Usar o pseudoarquivo /proc/config.gz

Verifique a configuração do kernel para o tamanho da página no pseudoarquivo /proc/config.gz: As configurações possíveis para o tamanho da página são:

  • CONFIG_ARM64_4K_PAGES=y: o kernel usa páginas de 4.096 bytes.
  • CONFIG_ARM64_16K_PAGES=y: o kernel usa páginas de 16.384 bytes.
  • CONFIG_ARM64_64K_PAGES=y: o kernel usa páginas de 65.536 bytes.
$ zcat /proc/config.gz | grep "CONFIG_ARM64_[164K]*_PAGES=y"
CONFIG_ARM64_16K_PAGES=y

Usar o vetor auxiliar

Quando um programa é executado, o kernel aloca e inicializa os componentes vetor com informações, como o tamanho da página, que são usadas pelo grupo dinâmico vinculador. O vetor auxiliar pode ser lido no pseudoarquivo. /proc/<pid>/auxv: O tamanho da página do vetor auxiliar do processo 1 pode ser mostrado da seguinte forma:

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

Em que:

  • O od despeja arquivos em formatos hexadecimais, decimais ou outros formatos.
  • -N8 -j56 despeja os 8 bytes começando no deslocamento 56 no arquivo, que corresponde a AT_PAGESZ.
  • -td8 formata o valor como um número inteiro decimal de 8 bytes.
  • -An faz com que apenas o valor seja mostrado, não o endereço.