跨套接字流量是什么意思?

dip*_*ark 1 cpu kernel kubernetes

在阅读这篇关于英特尔CPU 管理器的Kubernetes 博客文章时,它提到您可以通过将CPUs allocated on the socket near to the bus which connects to an external device.

跨套接字流量是什么意思,它会导致什么问题?这些是我的猜测:

  • 一个插槽中的 CPU 需要访问连接到总线的设备,而该设备只能由另一个插槽中的 CPU 访问,因此必须将对该设备的指令写入内存,以便由另一个插槽中的 CPU 执行
  • 一个插槽中的 CPU 需要访问连接到总线的设备,而该设备只能由另一个插槽中的 CPU 访问,因此该设备的指令会直接发送到另一个插槽中的 CPU 以转发到该设备(不确定这是否甚至是可能的)

Bob*_*Bob 5

Kubernetes 博客文章的作者只是胡言乱语,试图重新发明轮子——又一个 PBS(便携式批处理系统),他们称之为“CPU 管理器”。

回答问题:“跨套接字流量是什么意思,它会导致什么问题?” - 首先有必要说,这是关于多处理器计算机,即分别具有两个或多个 CPU 和 CPU 插槽的计算机系统。多处理器系统有两种不同的架构:SMP(对称多处理)AMP(非对称多处理)

目前可用的大多数多处理器系统都是 SMP 架构系统。这样的系统具有所谓的共享内存,它对于独立的物理 CPU 来说是可见的,作为公共主内存。根据物理 CPU 互连的类型,这种系统有两种类型:系统总线和交叉开关。

带纵横开关的SMP系统图:

SMP纵横式交换机

带系统总线的 SMP 系统图:

SMP系统总线

大多数 SMP 系统具有系统总线类型的 CPU 连接,而 Kubernets 博客文章是关于此类系统的。

带有系统总线 CPU 连接的 SMP 系统既有优点也有缺点。该系统最显着的缺点是它们是NUMA(非均匀内存访问)系统。这是什么意思。每个 CPU 插槽在物理上都关联了自己的内存条,但 Linux 内核无法区分 SMP 中的这种关联——内存条在 Linux 中被视为单个完整内存。但是尽管如此,还是出现了 NUMA 现象——物理 CPU 与其自身物理内存组地址的互操作与与另一个 CPU 插槽相关联的内存组(-s)的互操作速度不同。因此,我们自然希望避免物理 CPU 使用 SMP 的公共主内存中的此类地址,这些地址属于连接到另一个物理 CPU 的物理内存组。

Kubernates 博客文章的“限制”部分将 NUMA 现象称为“跨套接字流量”问题(引用):

用户可能希望在连接到外部设备(例如加速器或高性能网卡)的总线附近的插槽上分配 CPU,以避免跨插槽流量。CPU 管理器尚不支持这种类型的对齐。

顺便说一句,无法将线程分配给某个“更接近”某些东西的确定 CPU 是很自然的。Linux 内核将物理 CPU 的所有 CPU 内核视为等同于普通 SMP 处理器,因为它无法区分 SMP 计算机的物理 CPU。有一些使用“暖缓存”和“冷缓存”标志来避免使用“更远”的 CPU 内核的糟糕尝试,但由于 SMP 系统的性质,它不能有效地工作。

请另外阅读: