KVM vcpu 亲和性(vcpu绑定cpu) (随手记)

背景

在虚拟化场景中,我们知道由cpu虚拟化出多个vcpu提供给上层的虚拟机使用。
在KVM中,每个vcpu实际上是虚拟机的线程,即虚拟机进程vcpu为它的线程
可以使用ps -ef查看:
在这里插入图片描述

对于这些个线程来说,他们默认是允许被调度到任何cpu进行执行的,这样虽然提高了冗余,但不利于一些性能。
同时也需要注意,cpu和内存是有”距离“这一种说法的,cpu使用”较近“的内存,可以有效提升效率,这也就是我们常说的NUMA

性能调优

通过将超融合虚拟化中虚拟机的VCPU与物理CPU核进行绑定,可以避免CPU计算处理在各个物理CPU上的漂移,同时使各VCPU处于一个NUMA节点上,避免跨NUMA节点的性能开销。

NUMA

NUMA(Non-Uniform Memory Access,非统一内存访问)是一种计算机内存架构,主要用于多处理器系统中。它的特点是,处理器访问本地内存(与该处理器直接相连的内存)速度较快,而访问其他处理器的远程内存速度较慢。这种架构与传统的统一内存访问(UMA)架构不同,后者中所有处理器访问内存的速度是均等的。

NUMA的关键特性

  • 本地内存和远程内存:
    每个处理器节点都有自己的本地内存,访问速度较快。
    处理器也可以访问其他节点的内存(远程内存),但由于需要通过互连网络,延迟较高。
  • 高效扩展性:
    适用于需要处理大规模数据的多处理器系统。
    每个节点都可以拥有独立的内存,减少了内存访问的冲突和瓶颈。
  • 缓存一致性:
    通常会采用缓存一致性协议(如MESI协议)来确保多个处理器访问同一内存区域时的数据一致性。

vCPU绑定

有两种绑定方式:

  1. 整个VM的vCPU均绑定在一个CPU上。(进程级绑定)
  2. VM的某个vCPU绑定在一个CPU上。(线程级绑定)

第一种方式可以自行查阅taskset,这里简单介绍一下第二种vcpupin

vCPU如何绑定CPU,步骤

使用vcpupin指令绑定的方式只在当前系统环境有效,实例重启后就会失效,要永久生效需要在xml配置文件中定义
这里不介绍怎么用xml,可以自行搜索

1. 查看vcpu运行状态

#查看vm列表
[root@localhost ~]# virsh list
 Id   Name   State
----------------------
 5    VM    running

#下面的 5 表示本次为 VM 分配的虚机ID
#这个命令可以看到VM的vcpu运行在哪个cpu之上
[root@localhost ~]# virsh vcpuinfo 5
VCPU:           0
CPU:            1
State:          running
CPU time:       54791.1s
CPU Affinity:   yyyyyyyyyyyyyyyyyyyyyyyy

VCPU:           1
CPU:            0
State:          running
CPU time:       54738.5s
CPU Affinity:   yyyyyyyyyyyyyyyyyyyyyyyy

VCPU:           2
CPU:            3
State:          running
CPU time:       54769.5s
CPU Affinity:   yyyyyyyyyyyyyyyyyyyyyyyy

VCPU:           3
CPU:            0
State:          running
CPU time:       54764.7s
CPU Affinity:   yyyyyyyyyyyyyyyyyyyyyyyy

2. 查看vcpu可以运行在哪

#查看vcpu可以运行的cpu信息
[root@localhost ~]# virsh vcpupin 5
VCPU: CPU Affinity
----------------------------------
   0: 0-23      
   1: 0-23
   3: 0-23
   4: 0-23
 #默认4个vcpu没有进行绑定,可以在0-24号cpu上切换

3. 将vpu绑定在某个CPU上

将vm的0vcpu绑定到3cpu,1vcpu绑定到5cpu
virsh vcpupin 5 0 3
virsh vcpupin 5 1 5

4. 再次查看vcpu可以运行在哪些cpu

[root@localhost ~]# virsh vcpuinfo 5
VCPU:           0
CPU:            3
State:          running
CPU time:       14.5s
CPU Affinity:   ---y--------------------

VCPU:           1
CPU:            5
State:          running
CPU time:       7.3s
CPU Affinity:   -----y------------------

VCPU:           2
CPU:            3
State:          running
CPU time:       54769.5s
CPU Affinity:   yyyyyyyyyyyyyyyyyyyyyyyy

VCPU:           3
CPU:            0
State:          running
CPU time:       54764.7s
CPU Affinity:   yyyyyyyyyyyyyyyyyyyyyyyy

[root@localhost ~]# virsh vcpupin 5
VCPU: CPU Affinity
----------------------------------
   0: 3
   1: 5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值