初学libvirt,感觉还挺方便的。它能够像daemon一样运行一个稳定的VM,相比直接用qemu命令行是方便多了。这里记录一下我如何绑定numa node。
不知道能不能直接在创建虚拟机的时候绑定numa,我是在xml中设置的。
安装libvirt,略去。在host上创建一个网桥,libvirt以它上网,我这里命名为virbr0.
首先创建一个vm。
sudo virt-install \ --connect qemu:///system \ --name myvm \ --memory 8192 \ --vcpus 4 \ --disk path=../AnolisOS-8.9-x86_64-RHCK.qcow2,size=2048,format=qcow2 \ --network bridge=virbr0 \ --os-type linux \ --virt-type kvm \ --boot hd \ --graphics none \
这样起的虚拟机是可以交互的,但是VM并不依赖于当前的bash,即使当前的bash挂掉也不影响VM,可以通过ssh登陆,当然前提是VM有网。当前的VM起来后只有一个numa,4个cpu,而且没有绑定到物理numa上。我们可以使用virsh edit手动设置。
sudo virsh edit myvm
创建两个numa,每个numa包含2个cpu,4G内存。
<cpu mode='host-model' check='partial'> <numa> <cell id="0" cpus="0-1" memory="4" unit="GiB"/> <cell id="1" cpus="2-3" memory="4" unit="GiB"/> </numa> </cpu>
将numa绑定到物理numa上。假如我们的host上有至少2个numa。
<numatune> <memnode cellid="0" mode="strict" nodeset="0"/> <memnode cellid="1" mode="strict" nodeset="1"/> </numatune>
将VM中的numa0绑定到物理机的numa0,numa1绑定到物理机的numa1.
更进一步,我们可以将vcpu绑定到物理cpu。
<cputune> <vcpupin vcpu="0" cpuset="0"/> <vcpupin vcpu="1" cpuset="1"/> <vcpupin vcpu="2" cpuset="8"/> <vcpupin vcpu="3" cpuset="9"/> </cputune>
这里vcpu2需要绑定到numa1的第一个cpu,vcpu3绑定到numa1的第二个cpu。这里简单用8,9代替,实际以你的物理机拓扑为准。
这样VM中的numa,vcpu都绑定到了物理numa,cpu上。
保存xml,重启VM。
sudo virsh destroy myvm sudo virsh start myvm
进入VM使用lstop,lscpu查看一下VM的numa拓扑。使用stress让所有cpu跑满,到host上使用top验证一下绑定cpu是否成功。
接下来再研究一下如何将设备相关的资源绑定到指定的numa上。
标签:node,--,绑定,VM,libvirt,numa,cpu From: https://www.cnblogs.com/banshanjushi/p/18176691