mmap 内存内核空间到用户空间 - 太慢了,有什么改进吗?

问题描述 投票:0回答:0

在内核驱动中,使用remap_pfn_range重新映射一个物理内存块

vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);

vma->vm_flags |= VMEM_FLAGS | VM_PFNMAP;
vma->vm_pgoff = phys >> PAGE_SHIFT;
remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff, vsize, vma->vm_page_prot);
而在用户空间,使用mmap访问,
frame = mmap(NULL, addr, PROT_WRITE , MAP_PRIVATE | MAP_NORESERVE, fd, aligned);
然后使用 memcpy 移动数据。

它只能以 200MB/s 的速度移动数据。 (运行 Ubuntu22.04 的英特尔 i7) 我是否遗漏了任何标志,或者这是它能得到的最好的标志?

我期待更好的结果。同样的用户空间,memcpy可以做到2GB/s。但是memcpy通过mmap从内核空间到用户空间,好像太慢了

谢谢 老虎

mmap memcpy
© www.soinside.com 2019 - 2024. All rights reserved.