Linux用户空间程序是否有一个合理的方法来启用/禁用cache write combining它拥有的内存页?在Linux用户空间应用程序中启用写入组合?
我关心的两个目标系统是:3.0内核上的Intel Haswell处理器和4.8内核上的Intel Skylake处理器。
我在调整一个成熟的多线程应用程序,它使用大缓冲区在生产者和消费者之间传输数据。基于分析,我有理由相信,应用程序有时会使用写入组合缓存而不是回写缓存从缓冲区页面中受益。
我认为改为使用非暂时写入填充缓冲区,但它需要比我目前的工作可能需要更大的代码重构。
This questionthis question和this LWN article讨论的问题,但从设备驱动程序的角度来讨论。就我而言,我正在使用用户空间代码,以非root用户身份运行。
This 2008 paper讨论了用于控制页面缓存模式的不同API。它似乎表明用户空间应用程序可以使用mmap
(请参阅5.3,5.4和5.6节)获得对页面的写入组合访问权限,但文档对于如何使用这些机制的准确性(至少对我而言)并不清楚。
https://www.kernel.org/doc/ols/2008/ols2008v2-pages-135-144.pdf的第5.3节5.4是通过'/ proc' /'/ sys' fs访问PCI资源的; 5.5和5.6用'/ dev/mem'来访问所有的计算机内存。两者都需要root权限并直接访问'/ dev/mem'是不安全的。尝试使用'非暂时写入',至少比较是否有改变写入码组合模式的好处。英特尔拥有可以改变组合模式的内存填充硬件检测器,http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual .pdf 3.6.10 7.4.1 – osgx