在阅读这篇关于英特尔CPU 管理器的 Kubernetes 博客文章时,它提到您可以通过使用CPUs allocated on the socket near to the bus which connects to an external device
.
跨套接字流量是什么意思,它会导致什么问题?这些是我的猜测:
- 来自一个插槽的 CPU 需要访问连接到总线的设备,而该总线只能由另一个插槽中的 CPU 访问,因此必须将对该设备的指令写入内存以由另一个插槽中的 CPU 执行
- 来自一个套接字的 CPU 需要访问连接到总线的设备,该总线只能由另一个套接字中的 CPU 访问,因此到该设备的指令直接发送到另一个套接字中的 CPU 以转发到设备(不确定这是否甚至是可能的)
Kubernetes 博客文章的作者只是胡言乱语,试图重新发明轮子——又一个 PBS(便携式批处理系统),他们称之为“CPU 管理器”。
回答问题:“跨套接字流量是什么意思,它会导致什么问题?” - 有必要首先说,这是关于多处理器计算机,即分别具有两个或多个 CPU 和 CPU 插槽的计算机系统。多处理器系统有两种不同的架构:SMP(对称多处理)和AMP(非对称多处理)。
目前可用的大多数多处理器系统都是 SMP 架构系统。这样的系统具有所谓的共享内存,独立的物理 CPU 可以看到它作为公共主内存。根据物理 CPU 互连的类型,这种系统有两种类型:系统总线和交叉开关。
带交叉开关的 SMP 系统示意图:
带系统总线的 SMP 系统示意图:
大多数 SMP 系统具有系统总线类型的 CPU 连接,而 Kubernetes 博客文章是关于此类系统的。
具有系统总线 CPU 连接的 SMP 系统既有优点也有缺点。该系统最显着的缺点是它们是NUMA(非统一内存访问)系统。这是什么意思。每个 CPU 插槽在物理上关联其自己的内存库,但 Linux 内核无法在 SMP 中区分这种关联 - 在 Linux 中,内存库被视为单个完整的内存。但是尽管如此,还是出现了 NUMA 现象——物理 CPU 与其自己的物理内存组地址的互操作与与另一个 CPU 插槽 (-s) 关联的内存组 (-s) 的互操作速度不同。因此,我们自然希望避免物理 CPU 使用 SMP 的公共主存储器中属于连接到另一个物理 CPU 的物理内存组的这些地址。
Kubernates 博客文章的“限制”部分将 NUMA 现象称为“跨套接字流量”问题(引文):
顺便说一句,无法将线程分配给某个“更接近”某物的特定 CPU 是很自然的。Linux内核无法区分SMP计算机的物理CPU,因此Linux内核将物理CPU的所有CPU内核视为平等的普通SMP处理器。有一些不好的尝试来避免使用“更远”的 CPU 内核,这些内核使用“暖缓存”和“冷缓存”标志,但由于 SMP 系统的性质,它不能有效地工作。
请另外阅读: