alloc_hugepages() - Unix,Linux系统调用
Tutorials Point


  Unix入门
  Unix Shell编程
  高级Unix
  Unix有用参考
  Unix有用资源
  精选阅读

版权所有 © 2014 tutorialspoint



  首页     参考资料     讨论论坛     关于TP  

alloc_hugepages() - Unix,Linux系统调用


previous next AddThis Social Bookmark Button

广告

名称

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

错误

标签描述
ENOSYS 此内核不支持系统调用。

符合标准

这些调用仅存在于 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= 启动参数指定巨页的最大数量。



previous next Printer Friendly

广告


  

广告



广告