qemu-kvm numa拓扑暴露问题

时间:2012-12-12 16:12:01

标签: linux qemu kvm numa

我正在尝试实现以下方案。

我有一个带有4个numa节点的linux盒子,每个节点有6个cpus。为了获得更好的kvm客户端性能,我将每个vcpu固定为一组cpu,最好是在同一个numa单元中。

例如,如果我想启动一个12核心的guest虚拟机,我将前6个vcpus固定到NUMA节点1中的cpuset,将第二个6补丁固定到NUMA节点2中的cpuset。

到目前为止,当我尝试将该拓扑公开给guest虚拟机时,问题开始出现,即让访客知道它在2个NUMA节点上有两个cpusets。

我虽然如果我使用选项-smp 12,sockets=2,cores=6,threads=1到qemu-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时,出于某些奇怪的原因,在guest虚拟机中我看到它们(使用lstopo)排列在三个套接字中,但第一个上有4个内核,第二个上有4个内核,第三个核心(4 | 4 | 1)。 我想,它将它们分成2的幂,而不是相等。我也观察到与sockets=2,cores=10相同的行为; sockets=2,cores=18,你的名字,总是将它们分成两半,而不是2的幂(即8 | 2和16 | 2)。 sockets=2,cores=8工作正常(这是预期的)。有没有人经历过这样的事情?

1 个答案:

答案 0 :(得分:1)

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

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