首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mmap()比write() copy_form_user()慢,为什么?

mmap()比write() copy_form_user()慢,为什么?
EN

Stack Overflow用户
提问于 2013-05-19 03:27:24
回答 1查看 932关注 0票数 3

我需要将大块数据(~6MB)从用户空间传输到我的驱动程序。在驱动程序中,我使用pci_alloc_consistent()为每个块分配2个3MB的块。然后,我使用vm_insert_page()将每个块(即2个块) mmap()到单个vma。这允许用户空间在mmap之后对每个块进行读/写。它似乎是有效的,但性能是不可接受的。

我还实现了另一种写入/读取驱动程序中pci_alloc_consistent()分配的内存的方法。我从用户空间使用write(),然后在驱动程序中使用copy_from_user()将块中每个块的内容移动到上面的内存中。我对reads做了相反的事情。

我发现第一种方法至少慢了2-3倍,并且多使用了大约40%的cpu。我预计在第二种情况下引入额外的缓冲区拷贝会使速度变慢。然而,事实并非如此。

我在x86 64位平台上运行了on测试,内核: 2.6.*和3.*。

上面的结果有意义吗?如果是,谁能提供一些正在发生的事情的背景?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-06-29 03:55:50

缓存可能已禁用。您是否对分配的块和vm_inserted进行了ioremap_cache()?Iv在x86/x86_64上遇到这种问题,并与PAT(页属性表)有关。您需要对物理页面执行ioremap_cache()操作,以将内存类型设置为可缓存,然后调用vm_insert_page。这应该可以解决您的性能问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16628164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档