现代x86 CPU能够支持比传统4K更大的页面大小(即2MB或4MB),并且有操作系统(Linux,Windows)可以访问此功能.
上面的Microsoft链接声明大页面"提高了转换缓冲区的效率,这可以提高频繁访问的内存的性能".这对于预测大页面是否会改善任何特定情况并不是很有帮助.我对具体的,最好是量化的例子感兴趣,其中一些程序逻辑(或整个应用程序)移动使用大页面导致一些性能改进.有人有成功的故事吗?
我知道自己有一个特殊情况:使用大页面可以大大减少分支大型进程所需的时间(可能是因为需要复制的TLB记录数量减少了1000个数量级).我很感兴趣的是,在不那么奇特的场景中,大页面是否也可以带来好处.
我想在用户空间进程中将一系列内存设置为不可缓存(Linux,x86-86).这个问题很接近,但只提到了与物理内存一起工作的MTRR寄存器.我想使用PAT表来实现这一点,因为它们提供了更细粒度的控制,它们允许虚拟内存在逐页的基础上设置为不可缓存.
Linux文档,Documentation/x86/pat.txt,表明应该有一些东西mmap和一个SYNC标志,但我在实践中找不到如何做到这一点.理想情况下,我想使用诸如此类的电话mprotect(address, range, O_UNCACHABLE).
我的应用程序中有一堆缓冲区(其中25到30个)相当大(.5mb)并且访问了simulataneousley.更糟糕的是,它们中的数据通常只读取一次,并且经常更新(例如每秒30次).排序非完美缓存使用的完美风暴.
无论如何,我想到如果我可以将一块内存标记为不可缓存,那将会很酷......从理论上讲,这将为缓存中的其他所有内容留出更多空间.
那么,他们是否有办法在Linux中标记为不可缓存的内存块?