我们总是讨论如何更好地使用缓存来加速程序。但是,如果我有一个后台程序,它不是延迟敏感的。我也有一些在同一台计算机上运行的延迟敏感程序。为了避免后台程序污染延迟敏感程序的缓存,我有两个选择:
1)使用页面颜色或其他一些技术来进行分区"缓存并让延迟敏感的程序以多种缓存颜色运行,而后台程序从不使用具有这些缓存颜色的内存。 < - 我知道这是如何工作的,对此方法毫无疑问。
2)我们可以将后台程序使用的内存标记为不可缓存吗?换句话说,后台程序的所有内存访问都会绕过缓存,以免缓存被污染?
我知道我们可以通过设置CR3寄存器的第30位来绕过机器上的缓存。但是,我们怎样才能使一些程序绕过缓存而其他程序仍然使用缓存?
[添加问题] 是否可以标记内存页面绕过缓存?换句话说,我们可以标记一个不可缓存的内存页吗?
非常感谢您的见解!
答案 0 :(得分:1)
您可以使用现代x86处理器的存储器类型范围寄存器(MTRR)和/或页面属性表(PAT)功能。您可以使用这些功能将某些内存区域标记为不可缓存。特别是,您可以使用UC,UC或WC内存类型。但是,您必须知道延迟不敏感应用程序使用哪些内存区域。有关更多信息,请参阅英特尔手册第3卷第11章:内存高速缓存控制。
您在用户模式中最接近的方法是使用non-temporal accesses(NTA)。
我知道我们可以通过设置来绕过机器上的缓存 CR3寄存器的第30位。
我认为你的意思是CR0的第30位,而不是CR3。