diff options
Diffstat (limited to 'man2/alloc_hugepages.2')
-rw-r--r-- | man2/alloc_hugepages.2 | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/man2/alloc_hugepages.2 b/man2/alloc_hugepages.2 new file mode 100644 index 000000000..57a6ae181 --- /dev/null +++ b/man2/alloc_hugepages.2 @@ -0,0 +1,131 @@ +.\" Hey Emacs! This file is -*- nroff -*- source. +.\" +.\" Copyright 2003 Andries E. Brouwer (aeb@cwi.nl) +.\" +.\" Permission is granted to make and distribute verbatim copies of this +.\" manual provided the copyright notice and this permission notice are +.\" preserved on all copies. +.\" +.\" Permission is granted to copy and distribute modified versions of this +.\" manual under the conditions for verbatim copying, provided that the +.\" entire resulting derived work is distributed under the terms of a +.\" permission notice identical to this one. +.\" +.\" Since the Linux kernel and libraries are constantly changing, this +.\" manual page may be incorrect or out-of-date. The author(s) assume no +.\" responsibility for errors or omissions, or for damages resulting from +.\" the use of the information contained herein. The author(s) may not +.\" have taken the same level of care in the production of this manual, +.\" which is licensed free of charge, as they might when working +.\" professionally. +.\" +.\" Formatted or processed versions of this manual, if unaccompanied by +.\" the source, must acknowledge the copyright and authors of this work. +.\" +.TH ALLOC_HUGEPAGES 2 2003-02-02 "Linux 2.5.36" "Linux Programmer's Manual" +.SH NAME +alloc_hugepages, free_hugepages \- allocate or free huge pages +.SH SYNOPSIS +.BI "void *alloc_hugepages(int " key ", void *" addr ", size_t " len ", int " prot ", int " flag ); +.\" asmlinkage unsigned long sys_alloc_hugepages(int key, unsigned long addr, +.\" unsigned long len, int prot, int flag); +.sp +.BI "int free_hugepages(void *" addr ); +.\" asmlinkage int sys_free_hugepages(unsigned long addr); +.SH DESCRIPTION +The system calls +.B alloc_hugepages +and +.B free_hugepages +were introduced in Linux 2.5.36 and removed again in 2.5.54. +They existed only on i386 and ia64 (when built with CONFIG_HUGETLB_PAGE). +In Linux 2.4.20 the syscall numbers exist, but the calls return ENOSYS. +.LP +On i386 the memory management hardware knows about ordinary pages (4 KiB) +and huge pages (2 or 4 MiB). Similarly ia64 knows about huge pages of +several sizes. These system calls serve to map huge pages into the +process' memory or to free them again. +Huge pages are locked into memory, and are not swapped. +.LP +The +.I key +parameter is an identifier. When zero the pages are private, and +not inherited by children. +When positive the pages are shared with other applications using the same +.IR key , +and inherited by child processes. +.LP +The +.I addr +parameter of +.B free_hugepages() +tells which page is being freed - it was the return value of a +call to +.BR alloc_hugepages() . +(The memory is first actually freed when all users have released it.) +The +.I addr +parameter of +.B alloc_hugepages() +is a hint, that the kernel may or may not follow. +Addresses must be properly aligned. +.LP +The +.I len +parameter is the length of the required segment. It must be +a multiple of the huge page size. +.LP +The +.I prot +parameter specifies the memory protection of the segment. +It is one of PROT_READ, PROT_WRITE, PROT_EXEC. +.LP +The +.I flag +parameter is ignored, unless +.I key +is positive. In that case, if +.I flag +is IPC_CREAT, then a new huge page segment is created when none +with the given key existed. If this flag is not set, then ENOENT +is returned when no segment with the given key exists. +.IR +.SH "RETURN VALUE" +On success, +.B alloc_hugepages +returns the allocated virtual address, and +.B free_hugepages +returns zero. On error, \-1 is returned, and +.I errno +is set appropriately. +.SH ERRORS +.TP +.B ENOSYS +The system call is not supported on this kernel. +.SH "CONFORMING TO" +These calls existed only in Linux 2.5.36 - 2.5.54. +These calls are specific to Linux on Intel processors, and should not be +used in programs intended to be portable. Indeed, the system call numbers +are marked for reuse, so programs using these may do something random +on a future kernel. +.SH FILES +.I /proc/sys/vm/nr_hugepages +Number of configured hugetlb pages. +This can be read and written. +.LP +.I /proc/meminfo +Gives info on the number of configured hugetlb pages and on their size +in the three variables HugePages_Total, HugePages_Free, Hugepagesize. +.SH NOTES +The system calls are gone. Now the hugetlbfs filesystem can be used instead. +Memory backed by huge pages (if the CPU supports them) is obtained by +mmap'ing files in this virtual filesystem. +.LP +The maximal number of huge pages can be specified using the +.B hugepages= +boot parameter. + +.\" requires CONFIG_HUGETLB_PAGE (under "Processor type and features") +.\" and CONFIG_HUGETLBFS (under "Filesystems"). +.\" mount -t hugetlbfs hugetlbfs /huge +.\" SHM_HUGETLB |