Linux kernel 如何在内核和用户空间之间共享hugepage

Linux kernel 如何在内核和用户空间之间共享hugepage,linux-kernel,shared-memory,huge-pages,Linux Kernel,Shared Memory,Huge Pages,我知道如何在linux内核中获取普通页面,并基于以下代码使用mmap与用户进程共享这些页面: 现在我想将其扩展为使用hugepages(2M) 将备份共享内存的文件放在hugetlbfs文件系统中是否足够? 你能给我指一下使用hugepages的教程吗 迄今为止的进展情况: 我使用hugeadm启用hugepages和透明hugepages,并添加了相应的grub配置 在stackoverflow上,表示对alloc_页面使用以下参数 struct page *p = alloc_pages(G

我知道如何在linux内核中获取普通页面,并基于以下代码使用mmap与用户进程共享这些页面: 现在我想将其扩展为使用hugepages(2M)

将备份共享内存的文件放在hugetlbfs文件系统中是否足够? 你能给我指一下使用hugepages的教程吗

迄今为止的进展情况: 我使用hugeadm启用hugepages和透明hugepages,并添加了相应的grub配置

在stackoverflow上,表示对alloc_页面使用以下参数

struct page *p = alloc_pages(GFP_TRANSHUGE, HPAGE_PMD_ORDER);
它不起作用,因为/proc/meminfo仍然说所有巨大的页面都是免费的

然后我改变了

vma->vm_flags |= VM_RESERVED;

但发生了以下错误:

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 
10月4日15:43:50 masoud VirtualBox内核:[2756.091381]错误:无法处理0000000000 6F0082上的内核分页请求
10月4日15:43:50 masoud VirtualBox内核:[2756.091387]IP:[]hugetlb_故障+0x3e/0x760
10月4日15:43:50 masoud VirtualBox内核:[2756.091394]PGD bde87067 PUD c2ad7067 PMD b79ca067 PTE 0
10月4日15:43:50 masoud VirtualBox内核:[2756.091399]Oops:0000[#1]SMP

不是个好男人!我要问你到目前为止都试了些什么?:)Masood_mj,Moshref,我认为在用户空间中分配内存会更容易,甚至可以使用hugetlbfs(libhugetlbfs),然后将其传递(通过ioctl?)到内核以锁定它(在用户空间中锁定mlock或在内核空间中放置页面)。您的Oops听起来像是内核无法从内核上下文中为hugepage设置页面故障。尝试更新版本的内核,或者从用户空间执行此页面错误,或者在访问页面之前对页面进行预故障处理。感谢osgx,最后我在用户空间创建了hugepages并将其地址传递给内核。@Masood_mj:您是如何将地址传递给内核的?如果你能详细地回答你的问题,那将是很有帮助的!我记得我把它放在一个文件中,让内核读取它!
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