NOMBRE¶
alloc_hugepages, free_hugepages - asigna o libera páginas de gran
tamaño
SINOPSIS¶
void *alloc_hugepages(int key, void *addr, size_t
len, int prot, int flag);
int free_hugepages(void *addr);
DESCRIPCIÓN¶
Las llamadas al sistema
alloc_hugepages y
free_hugepages fueron
introducidas en Linux 2.5.36 y eliminadas de nuevo en la versión 2.5.54.
Existían sólo para arquitecturas i386 e ia64 (cuando se encontraba
la opción CONFIG_HUGETLB_PAGE). En Linux 2.4.20 existen los números
de las llamadas al sistemas, pero las llamadas devuelven ENOSYS.
En la arquitectura i386 el hardware de gestión de la memoria maneja
páginas ordinarias (4 KiB) y páginas grandes (2 o 4 MiB). De manera
similar, la arquitectura ia64 maneja páginas grandes de distintos
tamaños. Estas llamadas al sistema sirven para ubicar páginas de
gran tamaño en la memoria del proceso o para liberarlas. Las páginas
grandes están fijas en memoria, y no son intercambiadas (swapped).
El parámetro
key es un identificador. Cuando es cero las
páginas son privadas, y no son heredadas por los hijos. Cuando es
positivo las páginas son compartidas con otras aplicaciones usando el
mismo identificador
key, y heredadas por los procesos hijo.
El parámetro
addr de
free_hugepages() indica qué
página está siendo liberada - es el valor devuelto por una llamada a
alloc_hugepages(). (La memoria es realmente liberada por primera vez
cuando todos los usuarios la han liberado.) El parámetro
addr de
alloc_hugepages() es una sugerencia, que el núcleo puede o no
puede tomar. Las direcciones deben estar debidamente alineadas.
El parámetro
len es la longitud del segmento requerido. Debe ser un
múltiplo del tamaño de la página grande.
El parámetro
prot especifica la protección de memoria del
segmento. Puede ser PROT_READ, PROT_WRITE, PROT_EXEC.
El parámetro
flag es ignorado, a menos que
key sea positivo.
En tal caso, si
flag es IPC_CREAT, se crea un nuevo segmento de
página grande cuando no existe ninguno con el identificador dado. Si esta
opción no está activa, se devuelve ENOENT cuando no existe tal
segmento.
VALOR DEVUELTO¶
En caso de éxito,
alloc_hugepages devuelve la dirección virtual
asignada, y
free_hugepages devuelve cero. En caso de error, se devuelve
-1, y se modifica
errno con el valor apropiado.
ERRORES¶
- ENOSYS
- La llamada al sistema no está soportada por este
núcleo.
Esta llamadas existían sólo en Linux 2.5.36 - 2.5.54. Estas llamadas
son específicas de Linux para procesadores Intel, y no deberían ser
usadas en programas portables. De hecho, los números de las llamadas al
sistema están marcados para ser reutilizados, por lo que los programas
que las usen pueden comportarse de manera aleatoria con núcleos futuros.
FICHEROS¶
/proc/sys/vm/nr_hugepages Número de páginas hugetlb
configuradas. Puede ser leído y escrito.
/proc/meminfo Proporciona información del número de
páginas hugetlb configuradas y de su tamaño en las tres variables
HugePages_Total, HugePages_Free, Hugepagesize.
OBSERVACIONES¶
Estas llamadas al sistema ya no existen. En la actualidad puede usarse el
sistema de ficheros hugetlbfs en su lugar. La memoria contenida en las
páginas grandes (si la CPU las soporta) se obtiene ubicando ficheros en
este sistema de ficheros virtual con mmap.
El número máximo de páginas grandes puede especificarse usando el
parámetro
hugepages= en el arranque.