双路超线程物理服务器的QEMU CPU affinity调整

首先运行 virsh capabilities 查看物理机物理核心及其线程与逻辑处理器(线程)的关系:

其中的socket_id代表CPU的槽位,core_id代表CPU物理核心,siblings表示哪些逻辑处理器(线程)是属于同一个物理核心的。

例如id为0以及8的逻辑处理器,都属于同一个CPU槽位且属于同一个物理核心。

在这台物理机上建立的虚拟机,想得到最佳的性能,首先不要跨CPU插槽,其次,不要让多个虚拟机CPU共享同一个物理核心。

根据上面的信息,4核心8线程的虚拟机CPU亲和度配置如下:

其中vcpu 0和1在虚拟机中对应一个物理核心的两个线程,将其亲和度设定到逻辑处理器0和8,后面vcpu 2-7,同理。

启动虚拟机,通过 virsh vcpupin 进行验证:

到虚拟机中查看/proc/cpuinfo:

上面输出的信息可以确定设定无误,因为第一、二个逻辑核心对应了第一个物理核心,后面第三到第八个也同理。如果输出的core id与cputune处设定时所期望的顺序不对,调整cputune中的参数即可。

[Updated] libvirt & qemu change VNC password without restart

文章【libvirt & qemu无需重启(在线)更改VNC密码】已于2019-02-17更新。


有两个方法,一个是通过libvirt的virDomainUpdateDeviceFlags接口,另一个是通过qemu-monitor。

以下把“DOMAIN_NAME”替换为虚拟机的名称,“YOU_NEW_VNC_PASSWORD”替换为你的新密码。

通过virDomainUpdateDeviceFlags接口

使用libvirt管理虚拟机的情况下,这个方法是首选,libvirt官方是不推荐使用了libvirt的情况下操纵qemu-monitor的。

首先编写VNC graphic的XML配置:

注意,使用了current及live标记的情况下,是不能更改监听地址与监听端口的,所以需要运行时修改密码请注意port与address与现配置一致。

virDomainUpdateDeviceFlags函数原型见此:https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainUpdateDeviceFlags

这是PHP调用的例子:

 

使用virsh控制台的,可以通过update-device命令,把前面编写的XML内容保存为文件,例如domain-vnc-graphic.xml:

 

通过qemu-monitor