alloc_hugepages() - Unix,Linux系统调用
广告
名称
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 上,内存管理硬件知道普通页面 (4 KiB) 和巨页 (2 或 4 MiB)。类似地,ia64 知道几种大小的巨页。这些系统调用用于将巨页映射到进程的内存中或再次释放它们。巨页被锁定在内存中,不会被交换。
key 参数是一个标识符。当为零时,页面是私有的,不会被子进程继承。当为正数时,页面与使用相同 key 的其他应用程序共享,并被子进程继承。
free_hugepages() 的 addr 参数指示正在释放哪个页面:它是对 alloc_hugepages() 的调用的返回值。(当所有用户都释放了内存后,内存才会真正被释放。)alloc_hugepages() 的 addr 参数是一个提示,内核可能会也可能不会遵循。地址必须正确对齐。
len 参数是所需段的长度。它必须是巨页大小的倍数。
prot 参数指定段的内存保护。它是 PROT_READ、PROT_WRITE、PROT_EXEC 之一。
flag 参数被忽略,除非 key 为正数。在这种情况下,如果 flag 为 IPC_CREAT,则当不存在具有给定键的巨页段时,将创建一个新的巨页段。如果未设置此标志,则当不存在具有给定键的段时,将返回 ENOENT。
返回值
成功时,alloc_hugepages() 返回分配的虚拟地址,free_hugepages() 返回零。发生错误时,返回 -1,并适当地设置 errno。
错误
符合标准
这些调用仅存在于 Linux 2.5.36 到 2.5.54。这些调用特定于英特尔处理器上的 Linux,不应在旨在可移植的程序中使用。实际上,系统调用号被标记为可重用,因此使用这些调用的程序在未来的内核上可能会执行随机操作。
文件
/proc/sys/vm/nr_hugepages 已配置的 hugetlb 页面的数量。这可以读取和写入。
/proc/meminfo 提供有关已配置 hugetlb 页面数量及其在 HugePages_Total、HugePages_Free、Hugepagesize 三个变量中的大小的信息。
备注
系统调用已消失。现在可以使用 hugetlbfs 文件系统代替。通过使用 mmap() 来映射此虚拟文件系统中的文件,可以获得由巨页支持的内存(如果 CPU 支持它们)。
可以使用 hugepages= 启动参数指定巨页的最大数量。
广告
|