在使用cluster调度优化特性之前,需要使能cluster调度优化特性。本文将介绍在虚拟化环境中使能cluster调度优化特性的方法。
在虚拟化环境中,虚拟机的ACPI或DT信息是由虚拟化组件生成的。虚拟化组件会根据用户配置的CPU拓扑信息生成ACPI或DT,并将其与虚拟机内核一起加载到虚拟机内存地址空间中,以支持虚拟机内部感知CPU拓扑信息,从而优化任务调度决策。
本文将展示如何设置虚拟机的vCPU拓扑信息,以及验证虚拟机是否已经接收到这些信息,最后使能cluster调度优化特性。
使能cluster调度优化特性要求用户具有root权限,操作步骤如下:
不同型号的CPU cluster分组可能会有所不同,因此在使用之前需要确认CPU cluster的分组情况。
cat /sys/devices/system/cpu/cpu0/topology/cluster_cpus_list
预期结果:
0-3
本例表示CPU0所在的cluster中包含CPU 0~3,即4个core为一组cluster。
例如需要配置16个CPU的虚拟机,则需要设置vCPU的拓扑配置。
virsh edit VM
将第一行<domain type='kvm'>修改为如下内容。
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
在domain节中添加以下内容。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <cputune> <vcpupin vcpu='0' cpuset='32'/> <vcpupin vcpu='1' cpuset='33'/> <vcpupin vcpu='2' cpuset='34'/> <vcpupin vcpu='3' cpuset='35'/> <vcpupin vcpu='4' cpuset='36'/> <vcpupin vcpu='5' cpuset='37'/> <vcpupin vcpu='6' cpuset='38'/> <vcpupin vcpu='7' cpuset='39'/> <vcpupin vcpu='8' cpuset='40'/> <vcpupin vcpu='9' cpuset='41'/> <vcpupin vcpu='10' cpuset='42'/> <vcpupin vcpu='11' cpuset='43'/> <vcpupin vcpu='12' cpuset='44'/> <vcpupin vcpu='13' cpuset='45'/> <vcpupin vcpu='14' cpuset='46'/> <vcpupin vcpu='15' cpuset='47'/> <emulatorpin cpuset='32-47'/> </cputune> <qemu:commandline> <qemu:arg value='-smp'/> <qemu:arg value='cpus=16,maxcpus=16,sockets=1,dies=1,clusters=4,cores=4,threads=1'/> </qemu:commandline> |
virsh start VM --console
cat /sys/devices/system/cpu/cpu0/topology/cluster_cpus_list
预期结果:
0-3
根据2中的参数说明,可以发现vCPU 0~3被绑定在同一个cluster上,而这个cluster中的物理核心为32~35。由此可知,拓扑已经生效。
echo 1 > /proc/sys/kernel/sched_cluster