本地套接字IPC如何在多CPU系统上工作?

本地套接字IPC如何在多CPU系统上工作?

有 Supermicro X10DAi 主板,手册是这里。在第 1-11 页上,您可以看到每个 CPU 都有自己的 RAM。

假设program A通过本地套接字提供 API /var/run/socketapi。该程序在 CPU 1 上启动。

然后连接program B到该套接字并在 CPU 2 上启动。

program B向套接字写入命令时,内核通常会将数据从 的内存空间复制program B到 的内存空间program A

但由于程序运行在不同的CPU上,并且CPU之间不共享内存,因此存在问题。

在最近的Linux下这个问题是如何解决的?也许CPU 1的整个内存都是使用手册中所示的QPI接口映射到CPU 2的内存?

或者IPC程序可能无法运行并出现错误?

请提供一些Linux源代码或文档的参考。

答案1

是的,CPU 通过 CPU 互连来映射彼此的内存。

在 Intel 兼容架构上,这是相干映射,因此软件在访问连接到另一个 CPU 的内存时主要以较高延迟的形式注意到。

由于系统内存本身有相当多的延迟,因此差异并不是很大。操作系统仍然会动态优化,并且可能决定将两个具有大量 IPC 流量的进程移动到同一节点上。

不同的体系结构也可能具有不连贯的映射,这要求软件更明确地了解内存局部性,但可以通过更多套接字更好地扩展。

相关内容