下图就是一个 CPU 内部架构的示意图,在大型 CPU 内,通常 CPU 会分成几块存取 DRAM 以提高效率,像是这图上就会分成四块,如果程式在每一块内的 CPU 内上执行,通常会优先配给那一块存取速度较快的 DRAM 区域,但是还是免不了要跨 socket 去存取另外一边的 DRAM 内容,这时候 Latency 就会非常高,即使是在同一颗 CPU 内,不同 numa node 相互存取的效能也会比相同 numa node 稍低一点

除了一般应用程序存取以外,还有一个叫 cache coherence (快取一致性)的机制也会影响效能,例如在 Node 0 的 CPU 要写一个值到内存,它必需要通知所有的 CPU 你要将你的 cache 内的资料清空,以保持存取该内存的资料一致性,这个虽然带宽占用不高,但是总是一笔额外的传输开销,尤其是要出 CPU 那就更快了。

而且我们现在单核心的 CPU core 数已经够高了,没有必要一定要搞 multi-socket system