繁体   English   中英

Mac OS X上的大页面

[英]Huge pages on Mac OS X

Mac OS X mmap手册页说可以分配超级页面,我收集它与Linux大页面相同。

https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man2/mmap.2.html

但是,在Mac OS X(Yosemite 10.10.5)上,以下简单测试失败:

#include <stdio.h>
#include <sys/mman.h>
#include <mach/vm_statistics.h>

int
main()
{
    void *p = mmap((void *) 0x000200000000, 8 * 1024 * 1024,
                   PROT_READ | PROT_WRITE,
                   MAP_ANON | MAP_FIXED | MAP_PRIVATE,
                   VM_FLAGS_SUPERPAGE_SIZE_2MB, 0);
    printf("%p\n", p);
    if (p == MAP_FAILED)
        perror(NULL);
    return 0;
}

输出是:

0xffffffffffffffff
Cannot allocate memory

结果与从标志中删除的MAP_FIXED和作为地址参数提供的NULL相同。 -1替换VM_FLAGS_SUPERPAGE_SIZE_2MB导致预期结果,即没有发生错误,但显然分配的内存空间使用常规的4k页面。

以这种方式分配超级页面可能会出现什么问题?

对于发布的示例的这个小修改适用于Mac OS 10.10.5:

#include <stdio.h>
#include <sys/mman.h>
#include <mach/vm_statistics.h>

int
main()
{
    void *p = mmap(NULL,
                   8*1024*1024,
                   PROT_READ | PROT_WRITE,
                   MAP_ANON | MAP_PRIVATE,
                   VM_FLAGS_SUPERPAGE_SIZE_2MB, // mach flags in fd argument
                   0);
    printf("%p\n", p);
    if (p == MAP_FAILED)
        perror(NULL);
    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM