我做了什么:
-
使用 root 启用大页(我的系统支持 1MB 大页)
$ echo 20 > /proc/sys/vm/nr_hugepages
-
将大页文件系统挂载到 /mnt/hugepages
$ mount -t hugetlbfs nodev /mnt/hugepages
-
在大页文件系统中创建文件
$ touch /mnt/hugepages/hello
-
然后使用映射一个巨大的页面mmap
地址0,如下面的代码所示
#define FILE_NAME "/mnt/hugepages/hello"
#define PROTECTION (PROT_READ | PROT_WRITE) // page flag
#define LENGTH (1024*1024*1024) // huge page size
#define FLAGS (MAP_SHARED) //page flag
#define ADDR (void *) (0x0UL) //starting address of the page
fd = open(FILE_NAME, O_CREAT | O_RDWR, 0755);
if (fd < 0) { //
perror("Open failed");
exit(1);
}
// allocate a buffer using huge pages
buf = mmap(ADDR, LENGTH, PROTECTION, FLAGS, fd, 0);
if (buf == MAP_FAILED) {
perror("mmap");
unlink(FILE_NAME);
exit(1);
}
程序输出:
mmap: Cannot allocate memory
Linux 仅支持私有匿名映射的大页面(不受文件支持)。 IE。您只能为堆栈、数据和堆启用大表。
如今,有hugeadm https://linux.die.net/man/8/hugeadm配置系统大页池,无需摆弄/proc
and mount
. And hugectl https://linux.die.net/man/8/hugectl使用大页来存储代码和数据。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)