【问题标题】:How to implement MAP_HUGETLB in a character device driver?如何在字符设备驱动程序中实现 MAP_HUGETLB?
【发布时间】:2021-12-16 23:25:09
【问题描述】:

我有一个字符驱动程序在/dev 下公开一个字符设备文件。当我映射一些记忆时,我想使用大页面。

MAP_HUGETLB 似乎仅在与MAP_ANONYMOUS 或透明大页面组合时可用,但我对此不感兴趣。

mmap(...,MAP_HUGETLB|MAP_ANONYMOUS,..., -1, 0);

我们如何为字符设备实现大页面功能?它已经在某个地方完成了吗?

我没有找到内核树的示例。

【问题讨论】:

    标签: linux-kernel linux-device-driver mmap huge-pages


    【解决方案1】:

    这是不可能的。如果它们位于 hugetlbfs 文件系统中,则您只能使用 MAP_HUGETLBmmap 文件。由于/procprocfs 文件系统,因此您无法通过大页面映射这些文件。

    您也可以通过内核从the checks performed in mmap 看到这一点:

        /* ... */
    
        if (!(flags & MAP_ANONYMOUS)) { // <== File-backed mapping?
            audit_mmap_fd(fd, flags);
            file = fget(fd);
            if (!file)
                return -EBADF;
            if (is_file_hugepages(file)) { // <== Check that FS is hugetlbfs
                len = ALIGN(len, huge_page_size(hstate_file(file)));
            } else if (unlikely(flags & MAP_HUGETLB)) { // <== If not, MAP_HUGETLB isn't allowed
                retval = -EINVAL;
                goto out_fput;
            }
        } else if (flags & MAP_HUGETLB) { // <== Anonymous MAP_HUGETLB mapping?
    
        /* ... */
    

    另见:

    【讨论】:

    • 感谢您提供详细信息和 mmap 的代码!这证实了我的想法,它使事情复杂化,很遗憾。
    • 还有一个问题,因为您有这方面的经验,您确认mmap with MAP_HUGETLBhugetlbfs 是相似的吗?给出相同的结果?
    • @Alexis 到底有什么相似之处?
    • 我更新了评论。
    • @Alexis 不确定我是否理解您的问题。你想知道mmap(MAP_ANONYMOUS|MAP_HUGETLB) 是否等同于mmap(MAP_SHARED|MAP_HUGETLB)fd,它指的是hugetlbfs 内的打开文件?就 TLB/页表而言,情况相同,但就可观察效果而言,当然是不同的事情(一个是文件支持的,一个不是)。
    猜你喜欢
    • 2022-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 2016-10-20
    相关资源
    最近更新 更多