C 运行没有缓存的程序

C 运行没有缓存的程序,c,linux,performance,caching,C,Linux,Performance,Caching,我们总是谈论如何更好地使用缓存来加速程序。但是,如果我有一个后台程序,它对延迟不敏感。我还有一些对延迟敏感的程序在同一台计算机上运行。为了避免后台程序污染延迟敏感程序的缓存,我有两个选择: 1) 使用页面颜色或其他一些技术对缓存进行“分区”,并让延迟敏感程序以几种缓存颜色运行,而后台程序从不使用具有这些缓存颜色的内存 您可以使用现代x86处理器的内存类型范围寄存器(MTRR)和/或页面属性表(PAT)功能。您可以使用这些功能将内存的某些区域标记为不可缓存。特别是,您可以使用UC、UC或WC内存类

我们总是谈论如何更好地使用缓存来加速程序。但是,如果我有一个后台程序,它对延迟不敏感。我还有一些对延迟敏感的程序在同一台计算机上运行。为了避免后台程序污染延迟敏感程序的缓存,我有两个选择:


1) 使用页面颜色或其他一些技术对缓存进行“分区”,并让延迟敏感程序以几种缓存颜色运行,而后台程序从不使用具有这些缓存颜色的内存 您可以使用现代x86处理器的内存类型范围寄存器(MTRR)和/或页面属性表(PAT)功能。您可以使用这些功能将内存的某些区域标记为不可缓存。特别是,您可以使用UC、UC或WC内存类型。但您必须知道延迟不敏感应用程序使用的内存区域。有关更多信息,请参阅《英特尔手册》第3卷第11章:内存缓存控制

在用户模式下,您可以做的最接近的事情是使用(NTA)

我知道我们可以通过设置 CR3寄存器的第30位


我认为您指的是CR0的第30位,而不是CR3。

这可能弊大于利,因为如果您以某种方式阻止对一个进程进行缓存,您将使用更多的FSB带宽,这可能会成为所有进程的瓶颈。在多核处理器上,您可以在自己的核心上运行对延迟敏感的程序,所以它有一个单独的缓存。@PaulR,非常感谢你指出FSB的问题!我同意当FSB成为瓶颈时,从内存获取数据的任务将受到影响,并且延迟更长。但是,如果任务的所有数据都已加载到缓存中,则FSB将不再影响任务。我说的对吗?@user3386109,我想你说的是私有缓存,但共享缓存中仍然可能存在缓存干扰。由于Intel cache的包容性属性,它还将影响一个内核与另一个内核的专用缓存。对于避免使用共享缓存执行任务,您有什么见解吗?