gpt4 book ai didi

c - 尝试映射大页面 (1GB) 时 mmap 失败

转载 作者:行者123 更新时间:2023-12-03 23:43:28 27 4
gpt4 key购买 nike

我做了什么:

  1. 用root开启大页面(我的系统支持1MB大页面)

    $ echo 20 > /proc/sys/vm/nr_hugepages
  2. 将大页面文件系统挂载到/mnt/hugepages

    $ mount -t hugetlbfs nodev /mnt/hugepages
  3. 在大页面文件系统中创建一个文件

    $ touch /mnt/hugepages/hello
  4. 然后使用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 只支持用于私有(private)匿名映射的大页面(不受文件支持)。 IE。您只能为堆栈、数据和堆启用大表。


如今,有 hugeadm配置系统大页面池,无需摆弄/procmount。和 hugectl为代码和数据使用大页面。

关于c - 尝试映射大页面 (1GB) 时 mmap 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28826470/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com