在Linux用户空间应用程序中启用写入合并?

时间:2017-03-06 14:19:33

标签: linux caching

Linux用户空间程序是否有合理的方法为其拥有的内存页启用/禁用cache write combining

我关心的两个目标系统:3.0内核上的Intel Haswell处理器和4.8内核上的Intel Skylake处理器。

我正在调整一个成熟的多线程应用程序,该应用程序使用大缓冲区在生产者和消费者之间传输数据。基于分析,我有理由相信应用程序将受益于缓冲区'页面有时使用写入组合缓存,而不是回写缓存。

我考虑使用非时间写入来填充缓冲区,但是它需要比我当前的努力更大的代码重构。

This questionthis questionthis LWN article讨论了这个问题,但是从设备驱动程序的角度来看。就我而言,我正在使用用户空间代码,以非root身份运行。

This 2008 paper讨论了用于控制网页缓存模式的不同API。它似乎表明用户空间应用程序可以使用mmap获得对页面的写入组合访问(参见第5.3,5.4和5.6节),但文档(至少对我而言)并不清楚究竟如何使用这些机制。

1 个答案:

答案 0 :(得分:0)

我最近有类似的要求,我需要在缓存繁重的多线程应用程序中试验未缓存的内存。

我提出了这个kernel module,它允许在用户空间中映射未缓存的内存。所以它与你提出的问题有点不同,但也许你可以调整它来实现你的目标。

拨打电话:

  • set_memory_wc()代替set_memory_uc()
  • pgprot_writecombine()代替pgprot_uncached()

你应该得到写入组合内存。

目前你必须mmap()模块的角色设备(参见test目录进行演示)并且内存类型是固定的,但是不应该太难添加ioctl切换它。

我还没有尝试更改现有用户空间页面的属性,这样可以更好地使用它!