x86 架构的多 cpu 服务器是否就是 NUMA 架构?

2022-10-06 16:56:57 +08:00
 qemu32

比如华硕的 WS C621E SAGE 这跨型号的主板就支持 2 个 cpu ,那么这款主板是否就是使用了 NUMA 架构?

我最近想研究 linux 内核 NUMA 相关的代码,但是我没有一个真正支持 NUMA 的设备,不知道怎么测试验证。

使用 qemu 并且指定 smp 参数时设置 cpu 为 2 个是否就可以模拟 2 CPU 且支持 NUMA 的机器?

4265 次点击
所在节点    Linux
20 条回复
ea3ba5c0
2022-10-06 17:42:46 +08:00
qemu 有--numa 来配置 numa 呀
qemu32
2022-10-06 17:58:59 +08:00
@ea3ba5c0 感谢回复,如果我要组一台真实的硬件来研究 NUMA ,那么是否市面上只要是双路的主板都是 NUMA 的?

比如这款: https://item.jd.com/10049115951870.html
主板加 2 颗 cpu 价格就 1200 不到,是否是 NUMA 架构的?
liyafe1997
2022-10-06 18:09:24 +08:00
@qemu32 目前 x86 基本上可以说双路就是 NUMA ,因为内存都是直接挂 CPU 上的,既然不同的内存挂不同的 CPU 上,访问不同内存就可能要借道别的 CPU 家里,就会有性能差别,那么就是 NUMA 。

目前印象中好像还没有 x86 多 CPU 统一内存的产品吧?不确定老至强( 10 多年前)有没有内存控制器在 CPU 之外的情况,有没有多 CPU 共享同一内存控制器的主板产品?
ch2
2022-10-06 18:26:39 +08:00
Ryzen 就是 NUMA
qemu32
2022-10-06 18:39:12 +08:00
@ch2 我的家用台式机只有一个 cpu ,比如 5600x ,单个 cpu 也能用来模拟 NUMA 吗?
liyafe1997
2022-10-06 19:03:41 +08:00
@qemu32 Linux 或许可以加些什么参数强开 NUMA 优化(不太确定)?硬件感觉不需要模拟,除非你想做实验对比有无 NUMA 优化的情况的性能情况。
heiher
2022-10-06 19:34:50 +08:00
龙芯多路也是 NUMA 结构,感受比较明显,适合研究学习 :P
ch2
2022-10-06 19:46:34 +08:00
@qemu32 #5 5600X 内部有两个 die ,本来就是 NUMA 设计
qemu32
2022-10-06 20:08:05 +08:00
@ch2 2 个 die 就是 NUMA 吗?这 2 个 die 明明是通过同一个 io die 来访问内存的,你搞错了!

<amp-youtube data-videoid="0VF99bQlaoM" layout="responsive" width="480" height="270"></amp-youtube>?t=140
qemu32
2022-10-06 20:09:25 +08:00
@qemu32 #9 看 2 分 20 秒
matolv
2022-10-06 21:16:47 +08:00
双路算 numa ,cpu0 访问 cpu1 imc 的内存就需要通过 QPI ( intel xeon )或者 PCIe 总线( amd epyc )跨节点访问

amd ryzen 构架其实可以算 numa ,也可以不算,定义并不重要,只是像 epyc 64c/96c 跨 CCD 的访问延时也是非常高的
qemu32
2022-10-06 22:19:39 +08:00
@matolv 那 epyc 32c 的情况呢?

可以举一些具体的例子吗?
比如单 cpu 的 epyc 7343 ,7763 ,7373X ,7773X 这 4 款 cpu 装 linux 系统,linux 实际会启用 numa 的功能吗,内存管理,进程调度会认为系统中有多个 NUMA NODE 吗?
JohnBull
2022-10-06 23:25:37 +08:00
SMP 不一定是 NUMA

用 numactl 看一下
shika
2022-10-07 07:15:18 +08:00
我知道很多服务器可以在 bios 里关闭 numa ,所以答案应该是“否”
msg7086
2022-10-07 08:35:36 +08:00
NUMA 是指内存访问非一致。如果任意两个核心访问任意内存条的花费相同,就是 UMA ,否则就是 NUMA 。
现在的桌面 Ryzen 走 IO die 访问内存,不管哪个核心都是从同一个 IO die 访问,所以不会产生 NUMA 问题。
以前的多路 CPU 走北桥内存控制器访问内存,同样不会产生 NUMA 问题。

现在的 EPYC 也同理,单插槽上是 UMA 的,多插槽会变成多节点 NUMA 。
adadada
2022-10-07 10:02:16 +08:00
@msg7086 #15 EYPC 上 NPS 配置大于 1 的时候,也是单 socket 多 numa domain ,memory interleave 也会被限定在每个 numa domain 的 memory channel 上进行,而不是在单 socket 的所有 memory channel 上做 interleave
mepwang
2022-10-07 11:01:57 +08:00
从硬件架构上来说,现在的双路基本上都是 NUMA 架构了,现在处理器的核心数比较多,SMP 共享存储总线,对性能影响太大了。
硬件 NUMA 架构不一定需要 linux 内核的 numa 支持,因为跨处理器内存访问由硬件自动完成,与运行在其上的操作系统没有关系,但会影响软件性能。
GrayXu
2022-10-07 14:13:47 +08:00
@qemu32 多 socket 肯定是 NUMA 。然后,你这视频说的不是一回事吧。。epyc 的 die 的内存控制器是独立的吧,所以也有远近之分,所以也能说得上是 NUMA 吧。
msg7086
2022-10-07 15:11:21 +08:00
@adadada 我知道可以配,我的意思是他结构上就是 UMA 的。
yanqiyu
2022-10-08 17:16:31 +08:00
@msg7086 epyc Naples 结构上是 NUMA 的,对于 Rome 开始我印象中是有两个内存控制器在 IoD 里面,die 内也有 IF 总线沟通这些内存控制器。所以还是有亲和性的问题(不过没 Naples 那么明显)。因此 rome 提供了 NPS 设置,让用户在延迟和吞吐之间取舍。

当然消费级的 ryzen 不会那么复杂,肯定只有一个 MC 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/884899

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX