我正在尝试实现以下场景。
我有一个带有 4 个 numa 节点的 linux 盒子,每个节点有 6 个 cpu。为了获得更好的 kvm 客户机性能,我将每个 vcpu 固定到一组 cpu,最好在同一个 numa 单元中。
例如,如果我想启动一个 12 核来宾,我将前 6 个 vcpus 固定到 NUMA 节点 1 中的 cpuset,将第二个 6 固定到 NUMA 节点 2 中的 cpuset。
到目前为止一切顺利,当我尝试将该拓扑暴露给来宾时问题开始出现,即让来宾知道它在 2 个 NUMA 节点上有两个 cpuset。
我认为,如果我使用-smp 12,sockets=2,cores=6,threads=1
qemu-kvm 的选项,它很可能会将它们分成两半,将前 6 个分组在一个套接字中,将第二个 6 分组在另一个套接字中,并使用-numa
选项在适当的 vcpus 上设置 2 个 numa 节点。所以我的问题如下:
该
-numa
选项会发挥作用吗?在文档中,据说它是用于 numa 模拟的。如果它是模拟的,那是否意味着它会损害性能?我需要的是一种对客人说的方式:“这些 cpus 在同一个 NUMA 节点上”(即使它们不是)。这是实现这一目标的方法吗?qemu(1.2.0)似乎有一个错误,并且拓扑暴露得很严重。当我将 CPU 拓扑设置为(例如)
-smp 9,sockets=3,cores=3,threads=1
时,出于某种奇怪的原因,在来宾内部,我看到它们(使用 lstopo)排列在三个插槽中,但第一个有 4 个核心,第二个有 4 个核心,第三个有 1 个核心(4|4|1)。我想,它将它们分成 2 的幂,而不是相等的。我也观察到了同样的行为sockets=2,cores=10
;sockets=2,cores=18
,你的名字,总是不将它们分成两半,而是按 2 的幂(即 8|2 和 16|2 )。sockets=2,cores=8
虽然工作正常(这是意料之中的)。有没有人经历过这样的事情?