- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要将大块数据 (~6MB) 从用户空间传输到我的驱动程序。在驱动程序中,我使用 pci_alloc_consistent() 为每个 block 分配了 2 个 3MB block 。然后我使用 vm_insert_page() 将每个 block (即 2 个 block )mmap() 到单个 vma。这允许用户空间在 mmap 之后读/写每个 block 。它似乎有效,但性能 Not Acceptable 。
我还实现了另一种写入/读取驱动程序中由 pci_alloc_consistent() 分配的内存的方法。我从用户空间使用 write() 然后在驱动程序中使用 copy_from_user() 将 block 中每个 block 的内容移动到上面的内存。我对阅读做相反的事情。
我发现第一种方法至少慢了 2-3 倍,并且多使用了大约 40% 的 CPU。我预计在第二种情况下引入额外的缓冲区副本会使速度变慢。然而,事实并非如此。
我在 x86 64 位平台上运行了最测试,内核:2.6.* 和 3.*。
以上结果有意义吗?如果是,有人可以提供一些关于正在发生的事情的背景吗?
谢谢。
最佳答案
缓存可能被禁用。你 ioremap_cache() 你分配的 block 和 vm_inserted 了吗?我在 x86/x86_64 上遇到过这种问题,并且与 PAT(页面属性表)有关。您需要 ioremap_cache() 物理页面以将内存类型设置为可缓存,然后调用 vm_insert_page。这应该可以解决您的性能问题。
关于linux-kernel - mmap() 比 write() copy_form_user() 慢,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16628164/
我需要将大块数据 (~6MB) 从用户空间传输到我的驱动程序。在驱动程序中,我使用 pci_alloc_consistent() 为每个 block 分配了 2 个 3MB block 。然后我使用
我是一名优秀的程序员,十分优秀!