Cómo obtener el tamaño de la página

Esta página enumera las diferentes maneras de obtener el tamaño de la página de kernel que se usa en el dispositivo. Para conectarte al dispositivo, puedes usar adb.

$ adb shell

Usar código de programación

En C++, prefiere getpagesize(2):

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

En Java, puedes usar la configuración del sistema:

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

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

Usa el comando getconf

Usa el comando getconf para obtener el tamaño de la página, que se muestra a continuación:

$ getconf PAGE_SIZE
4096

Usa el seudoarchivo /proc/<pid>/smaps.

El campo KernelPageSize del seudoarchivo /proc/<pid>/smaps muestra la página. de tamaño, que se muestra de la siguiente manera:

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

Usa la marca del vinculador LD_SHOW_AUXV=1

Usa la marca LD_SHOW_AUXV para imprimir el vector auxiliar del programa. que está a punto de ejecutarse. El campo AT_PAGESZ contiene el tamaño de la página. como se muestra a continuación:

$ 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 el seudoarchivo /proc/config.gz.

Comprobar la configuración del kernel para el tamaño de la página en el seudoarchivo /proc/config.gz. Las configuraciones posibles para el tamaño de página son las siguientes:

  • CONFIG_ARM64_4K_PAGES=y: El kernel usa páginas de 4,096 bytes.
  • CONFIG_ARM64_16K_PAGES=y: El kernel usa páginas de 16,384 bytes.
  • CONFIG_ARM64_64K_PAGES=y: El kernel usa páginas de 65,536 bytes.
$ zcat /proc/config.gz | grep "CONFIG_ARM64_[164K]*_PAGES=y"
CONFIG_ARM64_16K_PAGES=y

Usar el vector auxiliar

Cuando se ejecuta un programa, el kernel asigna e inicializa la unidad auxiliar vector con información, como el tamaño de la página, que se usa en la vinculador. El vector auxiliar se puede leer desde el seudoarchivo. /proc/<pid>/auxv. El tamaño de la página del vector auxiliar del proceso 1 puede ser como se muestra a continuación:

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

donde:

  • od vuelca archivos en formatos hexadecimales, decimales o de otro tipo.
  • -N8 -j56 vuelca los 8 bytes, que comienzan en el desplazamiento 56, en el archivo. que corresponde a AT_PAGESZ.
  • -td8 formatea el valor como un número entero decimal de 8 bytes.
  • -An hace que se muestre solo el valor, no su dirección.