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.