功能测试
前提条件
已提前创建虚拟机,可支持虚拟机规格包括但不限于2C8G、4C8G、4C16G、8C16G、16C32G、32C64G。
内存带宽限制
- 编辑虚拟机XML。
1
virsh edit <vm name>
- 使用以下XML将Node 0内存带宽限制到60%。
1 2 3 4 5 6 7 8 9
<domain type='kvm'> ...... <cputune> <memorytune vcpus='0-31'> <node id='0' bandwidth='60'/> </memorytune> </cputune> ...... </domain>
- 启动虚拟机。
1
virsh start <vm name>
- 查看对应MPAM控制组是否创建成功,控制组目录在“/sys/fs/resctrl”,新的控制组名根据vm id、name以及限制的vCPU列表决定。
- 查看是否有对应控制组。
ll /sys/fs/resctrl
- 查看对应控制组schemata文件内容是否与XML配置匹配。
cat /sys/fs/resctrl/<group name>/schemata
- 查看是否有对应控制组。
- 进入虚拟机使用lmbench测试带宽观察是否有对应变化。
- 不同规格虚拟机能够达到的内存带宽上限不同,MPAM是根据理论上限限制带宽,并非虚拟机能达到的实际上限,测试过程重点关注变化趋势。
- 测试中使用的命令需要根据虚拟机规格自行调整并发数量-P以及内存页大小参数,-P参数保持与vCPU数量一致。
以32C64G规格虚拟机为例。
- 将虚拟机绑核在NUMA 0,设置内存带宽为50,启动并进入虚拟机,使用以下命令测试内存带宽,得到当前内存带宽。
1 2 3 4 5 6 7 8 9 10
<cputune> <vcpupin vcpu='0' cpuset='0'/> <vcpupin vcpu='1' cpuset='1'/> ...... <vcpupin vcpu='30' cpuset='30'/> <vcpupin vcpu='31' cpuset='31'/> </cputune> <numatune> <memnode cellid='0' mode='strict' nodeset='0'/> </numatune>
1
/opt/lmbench/bin/bw_mem -P 32 -N 5 512M rd
- 重复上述步骤将内存带宽修改为80,重启虚拟机,使用相同命令再次测试,观察带宽是否有明显上升。
1 2
virsh shutdown <vm name> virsh start <vm name>
L3 Cache限制

libvirt限制L3 Cache时,要求独占Cache Line,需要事先调整其他控制组(包括默认控制组)的Cache Line使用情况,空余出足够的Cache Line。
- 修改默认控制组L3 Cache数据,将最高两位掩码对应的Cache Line设置为空闲。
1
echo "L3:1=3ffffff" > /sys/fs/resctrl/schemata
- 编辑虚拟机XML。
1
virsh edit <vm name>
- 使用以下XML将Node 0 L3 Cache限制为4MiB,对应机型的两条Cache Line。
1 2 3 4 5 6 7 8 9 10
<domain type='kvm'> ...... <cputune> <cachetune vcpus='0-15'> <cache id='0' level='3' type='both' size='4' unit='MiB'/> <cache id='0' level='3' type='priority' size='2'/> </cachetune> </cputune> ...... </domain>
- 启动虚拟机。
1
virsh start <vm name>
- 查看对应MPAM控制组是否创建成功,控制组目录在“/sys/fs/resctrl”,新的控制组名根据vm id、name以及限制的vCPU列表决定。
- 查看是否有对应控制组。
1
ll /sys/fs/resctrl
- 查看对应控制组schemata文件内容是否与XML配置匹配。
1
cat /sys/fs/resctrl/<group name>/schemata
- 查看是否有对应控制组。
- 查看对应控制组的监控数据,观察限制是否生效,数据是否与XML设置的大小匹配,数据单位为Byte。
1 2
cd /sys/fs/resctrl/<group name>/mon_data/mon_L3_01 watch -n 1 grep . *
父主题: 特性测试