2

我知道如何在 linux 内核中获取普通页面并使用基于此代码的 mmap 与用户进程共享:http: //people.ee.ethz.ch/~arkeller/linux/multi/kernel_user_space_howto-8.html 现在我想要将其扩展为使用大页面(2M)。

将备份共享内存的文件放在hugetlbfs文件系统中就足够了吗?你也可以给我指一个关于使用大页面的教程吗?

到目前为止的进展: 我使用hugeadm启用了hugepages和透明hugepages,并添加了相应的grub配置。

stackoverflow 上的这篇文章说对 alloc_pages 使用以下参数

struct page *p = alloc_pages(GFP_TRANSHUGE, HPAGE_PMD_ORDER);

它不起作用,因为 /proc/meminfo 仍然说所有大页面都是免费的。

然后我变了

vma->vm_flags |= VM_RESERVED;

vma->vm_flags |= VM_HUGETLB;

但发生了以下错误:

Oct  4 15:43:50 masoud-VirtualBox kernel: [ 2756.091381] BUG: unable to handle kernel paging request at 00000000006f0082
Oct  4 15:43:50 masoud-VirtualBox kernel: [ 2756.091387] IP: [<ffffffff8119522e>] hugetlb_fault+0x3e/0x760
Oct  4 15:43:50 masoud-VirtualBox kernel: [ 2756.091394] PGD bde87067 PUD c2ad7067 PMD b79ca067 PTE 0
Oct  4 15:43:50 masoud-VirtualBox kernel: [ 2756.091399] Oops: 0000 [#1] SMP 
4

0 回答 0