Memory 回写或直写到主存储器

Memory 回写或直写到主存储器,memory,cpu-cache,Memory,Cpu Cache,直写:数据立即通过缓存写入主存 回写:在以后的时间写入数据 我有一个共享内存,它位于NUMA节点1中,假设在节点0中执行的进程a修改了共享内存的内容,然后在节点1中执行的进程B喜欢读取共享内存的内容 如果处于直写模式,则进程A修改的内容将位于节点1的主存中,因为当节点0将数据写入节点1的主存时,主存将经过节点1的L3缓存,那么进程B可以从节点1的L3缓存中获取进程A修改的内容,而不是从节点1的主存 如果是回写模式,则当节点1中的进程B喜欢读取共享内存的内容时,缓存线将位于节点0的L3缓存中, 获

直写:数据立即通过缓存写入主存

回写:在以后的时间写入数据

我有一个共享内存,它位于NUMA节点1中,假设在节点0中执行的进程a修改了共享内存的内容,然后在节点1中执行的进程B喜欢读取共享内存的内容

如果处于直写模式,则进程A修改的内容将位于节点1的主存中,因为当节点0将数据写入节点1的主存时,主存将经过节点1的L3缓存,那么进程B可以从节点1的L3缓存中获取进程A修改的内容,而不是从节点1的主存

如果是回写模式,则当节点1中的进程B喜欢读取共享内存的内容时,缓存线将位于节点0的L3缓存中, 获取它将花费更多,因为它位于节点0缓存中

我想知道在Intel(R)Xeon(R)CPU E5-2643中,它将选择哪种模式?! 或者Xeon将自行决定使用哪种模式,而程序员却无能为力

编辑:

dmidecode-t缓存

showes Xeon缓存操作模式为写回,看起来合理,参考

英特尔(和AMD)x86-64 NUMA体系结构上的缓存一致性不像RAID阵列那样工作。。。两个或四个处理器包没有单一的直写或回写缓存,而是有一个用于同步和共享其L3缓存的侦听和传输协议。尽管NUMA已经成为主流大约十年了,但操作系统级对控制这些事情的支持通常非常粗糙

具体说到Linux,对缓存设置的控制实际上可以归结为几个进程级设置:

  • 允许您的代码在什么内核上运行
  • 是否允许进程分配非本地节点内存
  • 进程是否在Numa节点之间交错所有分配
默认情况下,Linux内核将从进程正在运行的NUMA节点分配进程内存,如果本地节点上存在内存压力,则返回到其他节点上的分配

您可以使用x86汇编原语(如LOCK)来控制数据进出本地节点的L3缓存,但一般来说,除了使用分配的内存在本地运行的进程之外,您真的、真的、真的不应该关心任何事情

有关这方面的更多信息,我鼓励您阅读一些有关NUMA的Linux文档,可能还有Intel的(QPI是缓存共享技术的名称)


Linux“numactl”手册页()可能是您的一个良好开端。

这是由操作系统处理的。你在编一个吗?