【虚拟化】虚拟机vcpu绑核物理机


参考文章
第一篇:KVM虚拟化CPU技术总结
第二篇:虚机cpu和mem的配置(cputune和numatune)
第三篇:libvirt 中cpu, numa 的配置
第四篇:如何提高虚拟机性能?利用这个特性来实现!

一、NUMA

NUMA架构是一种解决多CPU共同工作的技术方案。
多CPU共同工作主要有三种架构:

  1. SMP
  2. MPP
  3. NUMA

SMP和MPP此处不多做介绍。
此处只简单介绍NUMA。
NUMA:每个处理器有自己的存储器,每个处理器也可以访问别的处理器的存储器


二、虚拟机xml配置(重点)

虚拟机配置要求

1. 8c16g
2. 100g-lvm
3. vcpu绑单NUMA核

关于lvm卷的创建,参看我的这篇文章:【操作系统】磁盘管理高级
此处简述,以/dev/nvme0n1p1为例

# 1.物理卷
pvcreate /dev/nvme0n1p1
# 2.卷组
vgcreate vgdata /dev/nvme0n1p1
# 3.逻辑卷
lvcreate -L 10G -n testblk vgdata

在这里插入图片描述
虚拟机xml关于磁盘的配置

<disk type='block' device='disk'>
	<driver name='qemu' type='raw'>
	<source dev='/dev/vgdata1/testblk'/>
	<target dev='sda' bus='virtio'/>
	<address type='pci' domain='0x0000' bus='0x08' slot='0x01' function='0x0'/>
</disk>

下面开始准备绑核!!!

1.给虚拟机cpu绑定物理机核心
2.给虚拟机cpu分组(非必须)
3.给虚拟机cpu分配内存(非必须)

物理机numa分配
lscpu | grep -i numa
在这里插入图片描述查看虚拟机cpu使用情况(18289是虚拟机进程号)
cat /proc/18289/status | grep Cpus_allowed_list
在这里插入图片描述
上述都是检查步骤,不涉及虚拟机numa绑定,下述涉及绑定。
本文:将虚拟机的vcpu都绑定在同一个numa节点。本次选定的是:NUMA 节点0

虚拟机vcpu绑定物理机核心

<vcpu cpuset='0-7'>8</vcpu>
<cputune>
	<vcpupin vcpu='0' cpuset='0'/>
 	<vcpupin vcpu='1' cpuset='1'/>
 	<vcpupin vcpu='2' cpuset='2'/>
 	<vcpupin vcpu='3' cpuset='3'/>
 	<vcpupin vcpu='4' cpuset='4'/>
 	<vcpupin vcpu='5' cpuset='5'/>
 	<vcpupin vcpu='6' cpuset='6'/>
 	<vcpupin vcpu='7' cpuset='7'/>
</cputune>

属性:
1.vcpu:对应虚拟机cpu编号;
2.cpuset:对应物理机cpu编号;
(上面两行解释,可能不是很专业,但是比较好理解。)

在物理机查看一下虚拟机绑核状态
virsh vcpupin <vm-name>
在这里插入图片描述或:再查看虚拟机cpu使用情况(18289是虚拟机进程号)
cat /proc/18289/status | grep Cpus_allowed_list
在这里插入图片描述


给虚拟机cpu分组(可省略)

把虚拟机的vcpu分成多个node

<cpu mode='host-passthrough' check='none'>
    <topology sockets='1' cores='8' threads='1'/>
    <numa>
      <cell id='0' cpus='0' memory='2' unit='GiB'/>
      <cell id='1' cpus='1' memory='2' unit='GiB'/>
      <cell id='2' cpus='2' memory='2' unit='GiB'/>
      <cell id='3' cpus='3' memory='2' unit='GiB'/>
      <cell id='4' cpus='4' memory='2' unit='GiB'/>
      <cell id='5' cpus='5' memory='2' unit='GiB'/>
      <cell id='6' cpus='6' memory='2' unit='GiB'/>
      <cell id='7' cpus='7' memory='2' unit='GiB'/>
     </numa>
</cpu>
# 创建了8个node,每个node的memory为2GiB
vcpu 0 :绑定在node0
vcpu 1 :绑定在node1
vcpu 2 :绑定在node2
vcpu 3 :绑定在node3
vcpu 4 :绑定在node4
vcpu 5 :绑定在node5
vcpu 6 :绑定在node6
vcpu 7 :绑定在node7

在虚拟机查询cpu节点分配
lscpu | grep -i numa
在这里插入图片描述
en,也可以不分,不分的话,xml如下

<cpu mode='host-passthrough' check='none'>
    <topology sockets='1' dies='1' cluster='1' cores='8' threads='1'/>
    <numa>
      <cell id='0' cpus='0-7' memory='16' unit='GiB'/>
     </numa>
</cpu>

根据node绑定memory(可省略)

<numatune>
	<memory mode="strict" nodeset="0-7"/>
	<memnode cellid="0" mode="strict" nodeset="0"/>
	<memnode cellid="1" mode="strict" nodeset="1"/>
	<memnode cellid="2" mode="strict" nodeset="2"/>
	<memnode cellid="3" mode="strict" nodeset="3"/>
	<memnode cellid="4" mode="strict" nodeset="4"/>
	<memnode cellid="5" mode="strict" nodeset="5"/>
	<memnode cellid="6" mode="strict" nodeset="6"/>
	<memnode cellid="7" mode="strict" nodeset="7"/>
</numatune>

不分的话

<numatune>
	<memnode cellid="0" mode="strict" nodeset="0"/>
</numatune>

猜你喜欢

转载自blog.csdn.net/Sanayeah/article/details/133201726