在虚拟化环境中使能cluster调度优化特性
在使用cluster调度优化特性之前,需要使能cluster调度优化特性。本文将介绍在虚拟化环境中使能cluster调度优化特性的方法。
在虚拟化环境中,虚拟机的ACPI或DT信息是由虚拟化组件生成的。虚拟化组件会根据用户配置的CPU拓扑信息生成ACPI或DT,并将其与虚拟机内核一起加载到虚拟机内存地址空间中,以支持虚拟机内部感知CPU拓扑信息,从而优化任务调度决策。
本文将展示如何设置虚拟机的vCPU拓扑信息,以及验证虚拟机是否已经接收到这些信息,最后使能cluster调度优化特性。
使能cluster调度优化特性要求用户具有root权限,操作步骤如下:
- 查看物理机CPU的拓扑结构和cluster分组情况。
不同型号的CPU cluster分组可能会有所不同,因此在使用之前需要确认CPU cluster的分组情况。
cat /sys/devices/system/cpu/cpu0/topology/cluster_cpus_list
预期结果:
0-3
本例表示CPU0所在的cluster中包含CPU 0~3,即4个core为一组cluster。
- 设置虚拟机xml配置。
例如需要配置16个CPU的虚拟机,则需要设置vCPU的拓扑配置。
- 使用libvirt对虚拟机配置进行管理,执行如下命令打开虚拟机的xml配置文件,其中VM是待编辑的虚拟机的名称。
virsh edit VM
- 按“i”进入编辑模式,在编辑界面中修改虚拟机的xml。
将第一行<domain type='kvm'>修改为如下内容。
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
在domain节中添加以下内容。
<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>
- 在vcpupin中,vcpu代表虚拟机中的CPU编号,而cpuset则代表物理机中的CPU编号,通过这个参数完成vCPU和物理CPU的1:1绑核操作。
- QEMU的commandline中描述了vCPU的拓扑,其中包括16个CPU,最大支持16个CPU。每个CPU都位于一个socket上,每个socket上有一个die,每个die上有4个cluster,每个cluster上有4个core,每个core可以执行1个线程。这种拓扑结构可以帮助优化虚拟机的性能。
- 在配置vCPU拓扑时,需要注意符合物理CPU的结构,以确保最佳的性能优化效果。在设置cores为4时,qemu会将vCPU 0-3绑定在一个cluster上。因此,在使用vcpupin对vCPU和物理CPU进行绑定时,需要绑定在同一个cluster上的4个物理CPU,例如CPU 32~35。如果物理CPU不在同一个cluster上,可能会导致期望的优化效果失效。
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 使用libvirt对虚拟机配置进行管理,执行如下命令打开虚拟机的xml配置文件,其中VM是待编辑的虚拟机的名称。
- 确认vCPU拓扑生效。
- 启动虚拟机。
virsh start VM --console
- 等待虚拟机系统启动完成后,在虚拟机控制台中执行如下命令查看CPU0所属的CPU集群中的CPU编号列表。
cat /sys/devices/system/cpu/cpu0/topology/cluster_cpus_list
预期结果:
0-3
根据2中的参数说明,可以发现vCPU 0~3被绑定在同一个cluster上,而这个cluster中的物理核心为32~35。由此可知,拓扑已经生效。
- 启动虚拟机。
- 在虚拟机中使能cluster调度优化,将Linux内核的调度器设置为集群调度器。
echo 1 > /proc/sys/kernel/sched_cluster
父主题: 使能cluster调度优化特性