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