ALLOC_HUGEPAGES - Linux手册页
Linux程序员手册 第2部分
更新日期: 2017-09-15
名称
alloc_hugepages,free_hugepages-分配或释放大页面
语法
void *alloc_hugepages(int key, void *addr, size_t len, int prot, int flag); int free_hugepages(void *addr);
说明
系统调用alloc_hugepages()和free_hugepages()在Linux 2.5.36中引入,并在2.5.54中再次删除。它们仅存在于i386和ia64(使用CONFIG_HUGETLB_PAGE构建时)上。在Linux 2.4.20中,存在系统调用号,但调用失败,错误为ENOSYS。
在i386上,内存管理硬件知道普通页面(4KiB)和大页面(2或4MiB)。同样,ia64知道几种大小的大页面。这些系统调用用于将大页面映射到进程的内存中或再次释放它们。大量页面被锁定到内存中,并且不被交换。
key参数是一个标识符。如果为零,则页面是私有页面,不会被子代继承。当为正时,页面将使用相同的密钥与其他应用程序共享,并由子进程继承。
free_hugepages()的addr参数指示要释放的页面:这是对alloc_hugepages()的调用的返回值。 (实际上,所有用户都释放了内存之后,首先释放该内存。)alloc_hugepages()的addr参数是一个提示,表明内核可能会也可能不会跟随。地址必须正确对齐。
len参数是所需段的长度。它必须是巨大的页面大小的倍数。
prot参数指定段的内存保护。它是PROT_READ,PROT_WRITE和PROT_EXEC之一。
除非key为正,否则将忽略flag参数。在这种情况下,如果标志是IPC_CREAT,则在没有给定密钥的情况下会创建一个新的大页面段。如果未设置此标志,则在不存在具有给定键的段时返回ENOENT。
返回值
成功后,alloc_hugepages()返回分配的虚拟地址,而free_hugepages()返回零。如果出错,则返回-1,并正确设置errno。
错误说明
- ENOSYS
- 该内核不支持系统调用。
文件
- /proc/sys/vm/nr_hugepages
- 已配置的hugelb页面数。可以读取和写入。
- /proc/meminfo
- 在三个变量HugePages_Total,HugePages_Free,Hugepagesize中提供有关已配置的巨大页面的数量及其大小的信息。
遵循规范
这些调用特定于Intel处理器上的Linux,不应在旨在可移植的程序中使用。
备注
这些系统调用不见了;它们仅在Linux 2.5.36至2.5.54中存在。现在可以改用hugetlbfs文件系统。通过使用mmap(2)映射此虚拟文件系统中的文件,可以获得由大页面支持的内存(如果CPU支持)。
可以使用hugepages = boot参数指定最大的大页面数。
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。