hugepage 示例代码
#include <fcntl.h> #include <sys/mman.h> #include <errno.h> #include <stdio.h> #define MAP_LENGTH (500*1024*1024) // 10MB int main() { int fd; void * addr; // 1. 创建一个 Hugetlb 文件系统的文件 fd1 = open("/dev/hugepages/hugepage1", O_CREAT|O_RDWR); if (fd < 0) { perror("open()"); return -1; } // 2. 把虚拟内存映射到 Hugetlb 文件系统的文件中 addr1 = mmap(0, MAP_LENGTH, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); if (addr == MAP_FAILED) { perror("mmap()"); close(fd); unlink("/mnt/huge/hugepage1"); return -1; } memset(addr1, 0, MAP_LENGTH); fd2 = open("/dev/hugepages/hugepage2", O_CREAT|O_RDWR); if (fd2 < 0) { perror("open()"); return -1; } // 2. 把虚拟内存映射到 Hugetlb 文件系统的文件中 addr2 = mmap(0, MAP_LENGTH, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); if (addr2 == MAP_FAILED) { perror("mmap()"); close(fd2); unlink("/mnt/huge/hugepage2"); return -1; } memset(addr2, 0, MAP_LENGTH); strcpy(addr, "This is HugePages example..."); printf("%s\n", addr); sleep(100); // 3. 使用完成后,解除映射关系 munmap(addr1, MAP_LENGTH); munmap(addr2, MAP_LENGTH); close(fd1); close(fd2); unlink("/dev/hugepages/hugepage1"); unlink("/dev/hugepages/hugepage2"); return 0; }