我知道如何在Linux内核中获取普通页面并使用基于此代码的mmap与用户进程共享:http://people.ee.ethz.ch/~arkeller/linux/multi/kernel_user_space_howto-8.html 现在我想将其扩展为使用 hugepages (2M)。
将备份共享内存的文件放在hugetlbfs文件系统中是否足够? 你能否指点我使用largepages的教程?
到目前为止的进展: 我使用hugeadm来启用大页面和透明的大页面,并添加了相应的grub配置。
stackoverflow上的This post表示对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