我注意到 Linux 根据不同多插槽 NUMA 系统上的完全不同的方案对 CPU 进行编号。
我的意思是您在内核参数中使用的 CPU 编号,例如,isolcpus=
或者在设置线程亲和性时。
numactl --hardware
您可以使用或检查 CPU 编号lscpu -e
。
示例:(每个系统都有 2 个 CPU,8 个核心,无超线程)
node 0 cpus: 0 1 2 3 8 9 10 11
node 1 cpus: 4 5 6 7 12 13 14 15
=> 用 HP 看到这个,条纹距离为 4
node 0 cpus: 0 2 4 6 8 10 12 14
node 1 cpus: 1 3 5 7 9 11 13 15
=> 同样使用 HP,条带距离为 1 - 或交错 - 或循环
node 0 cpus: 0 1 2 3 4 5 6 7
node 1 cpus: 8 9 10 11 12 13 14 15
=> 与 Supermicro 一样,连续编号,即条带距离为#cores_per_cpu
最后一种方案可以说是“自然”的方案。我的意思是,如果您总共有 16 个核心和 2 个插槽,为什么您要以不同的方式对它们进行编号?
(必须处理不同的方案显然会使配置和应用程序逻辑变得复杂。)
因此我的问题是:有没有办法告诉 Linux 总是连续地对一个插槽中的 CPU 进行编号?
如果无法在 Linux 中配置这一点,那么是否有影响编号的 BIOS 选项?
不同供应商使用不同编号方案(甚至一代又一代地改变其方案)的原因是什么?