2

我正在尝试实现以下场景。

我有一个带有 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=1qemu-kvm 的选项,它很可能会将它们分成两半,将前 6 个分组在一个套接字中,将第二个 6 分组在另一个套接字中,并使用-numa选项在适当的 vcpus 上设置 2 个 numa 节点。所以我的问题如下:

  1. -numa选项会发挥作用吗?在文档中,据说它是用于 numa 模拟的。如果它是模拟的,那是否意味着它会损害性能?我需要的是一种对客人说的方式:“这些 cpus 在同一个 NUMA 节点上”(即使它们不是)。这是实现这一目标的方法吗?

  2. qemu(1.2.0)似乎有一个错误,并且拓扑暴露得很严重。当我将 CPU 拓扑设置为(例如)-smp 9,sockets=3,cores=3,threads=1时,出于某种奇怪的原因,在来宾内部,我看到它们(使用 lstopo)排列在三个插槽中,但第一个有 4 个核心,第二个有 4 个核心,第三个有 1 个核心(4|4|1)。我想,它将它们分成 2 的幂,而不是相等的。我也观察到了同样的行为sockets=2,cores=10sockets=2,cores=18,你的名字,总是不将它们分成两半,而是按 2 的幂(即 8|2 和 16|2 )。sockets=2,cores=8虽然工作正常(这是意料之中的)。有没有人经历过这样的事情?

4

1 回答 1

1

从 0.9.8 开始,可以使用 numa 元素来指定来宾 NUMA 拓扑。结合 cputune 元素下的 vcpupin,如果需要,您应该能够在主机和来宾之间实现所需的 CPU/内存映射。

http://libvirt.org/formatdomain.html#elementsCPU

于 2013-03-29T19:05:08.510 回答