2004-11-03 13:51:07 +00:00
|
|
|
.\" 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
|
2005-10-19 06:54:38 +00:00
|
|
|
.BR alloc_hugepages ()
|
2004-11-03 13:51:07 +00:00
|
|
|
and
|
2005-10-19 06:54:38 +00:00
|
|
|
.BR free_hugepages ()
|
2004-11-03 13:51:07 +00:00
|
|
|
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
|
2005-10-19 07:07:02 +00:00
|
|
|
.BR free_hugepages ()
|
2005-07-06 06:54:27 +00:00
|
|
|
tells which page is being freed: it was the return value of a
|
2004-11-03 13:51:07 +00:00
|
|
|
call to
|
2005-10-19 07:07:02 +00:00
|
|
|
.BR alloc_hugepages ().
|
2004-11-03 13:51:07 +00:00
|
|
|
(The memory is first actually freed when all users have released it.)
|
|
|
|
The
|
|
|
|
.I addr
|
|
|
|
parameter of
|
2005-10-19 07:07:02 +00:00
|
|
|
.BR alloc_hugepages ()
|
2004-11-03 13:51:07 +00:00
|
|
|
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,
|
2005-10-19 06:54:38 +00:00
|
|
|
.BR alloc_hugepages ()
|
2004-11-03 13:51:07 +00:00
|
|
|
returns the allocated virtual address, and
|
2005-10-19 06:54:38 +00:00
|
|
|
.BR free_hugepages ()
|
2004-11-03 13:51:07 +00:00
|
|
|
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"
|
2005-07-06 06:54:27 +00:00
|
|
|
These calls existed only in Linux 2.5.36 through to 2.5.54.
|
2004-11-03 13:51:07 +00:00
|
|
|
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
|
2005-10-20 15:11:10 +00:00
|
|
|
using
|
|
|
|
.BR mmap ()
|
|
|
|
to map files in this virtual filesystem.
|
2004-11-03 13:51:07 +00:00
|
|
|
.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
|