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;
 }

 

posted on 2023-10-31 20:23  红旗kernel  阅读(9)  评论(0编辑  收藏  举报

导航