我们总是在谈论如何更好地使用缓存来加速程序。但是,如果我有一个后台程序,它不是延迟敏感的。我还在同一台计算机上运行了一些对延迟敏感的程序。为了避免后台程序污染延迟敏感型程序的缓存,我有两个选择:
1)使用页面颜色或其他一些技术来“分区”缓存,并让延迟敏感型程序以几种缓存颜色运行,而后台程序从不使用具有这些缓存颜色的内存。<--我知道这是如何工作的,并且对这种方法没有任何疑问。
2)我们可以只将后台程序使用的内存标记为不可缓存吗?换句话说,所有来自后台程序的内存访问都会绕过缓存,这样缓存就不会受到污染?
我知道我们可以通过设置CR3寄存器的第30位来绕过机器上的缓存。但是,我们如何才能让一些程序绕过缓存,而其他程序仍然使用缓存呢?
添加一个问题:是否可以将内存页标记为绕过缓存?换句话说,我们可以将内存页面标记为不可缓存吗?
非常感谢你的见解!
发布于 2018-03-17 05:38:52
您可以使用现代x86处理器的内存类型范围寄存器(MTRR)和/或页属性表(PAT)功能。您可以使用这些功能将某些内存区域标记为不可缓存。特别是,您可以使用UC、UC-或WC内存类型。但是您必须知道延迟不敏感的应用程序使用了哪些内存区域。有关更多信息,请参阅英特尔手册第3卷第11章:内存缓存控制。
在用户模式下,您可以执行的最接近的操作是使用non-temporal accesses (NTAs)。
我知道我们可以通过设置CR3寄存器的第30位来绕过机器上的缓存。
我想你指的是CR0的第30位,而不是CR3。
https://stackoverflow.com/questions/23552808
复制相似问题