KVM性能优化之CPU优化

1、 查看 kvm虚拟机 vCPU的QEMU线程

ps -eLo ruser,pid,ppid,lwp,psr,args |awk '/^qemu/{print 1,2,3,4,5,6,$8}'

注:vcpu是不同的线程,而不同的线程是跑在不同的cpu上,一般情况,虚拟机在运行时自身会点用3个cpus,为保证生产环境的稳定性,一个cpu(s)为10核的宿主机,最多给虚拟分7个vcpu,否者会出满载工作的时候出现超线程的情况。如果有两个逻辑CPU具有相同的"core id",那么说是超线程。

2、 CPU绑定操作

说到这,既然我们的操作系统还有CPU特性都采用了NUMA架构,那么我们完全可以通过调整KVM对应的NUMA关系来达到KVM CPU这方面的优化。这里,我们一般是通过CPU绑定的方法来做相关操作的。

那么具体的操作是怎么样的呢?那么接下来我们通过一个例子来演示。这里是一台物理机,之前我们看过了,现在上面装好了KVM,然后运行着几个虚拟机,我们用 virsh list 命令可以查看到当前运行的虚拟机列表。

比如我们要看这个Win7-ent虚拟机里vCPU对应物理CPU的情况,那么可以运行:

virsh vcpuinfo Win7-ent 可以查看

这个虚拟机是2个vCPU 双核的,然后都是跑在了物理机的CPU8上,使用的时间是2964.6s。最后一个是CPU的亲和性,这个yyyyy 表示的是使用的物理CPU内部的逻辑核,一个y就代表其中一个CPU逻辑核。全部是y ,那么说明这台物理机的24个CPU核,这个CPU都能调度使用。

当然,我们可以进入virsh ,然后运行emulatorpin Win7-ent, 通过这个命令我们可以更详细的得到这个虚拟机可以用哪几个核:

我们可以看到目前这个虚拟机0-23的CPU它都能调度使用。

那么以上就是查看虚拟机CPU NUMA调度的信息,如果我们要把虚拟机绑定到固定的CPU上,我们就要做以下操作:

virsh emulatorpin Win7-ent 18-23 --live

通过这个命令,我们把这个win7的虚拟机vCPU绑定在了18-23这6个CPU之间的核上。

我们用命令查看下

emulatorpin Win7-ent

我们也可以用virsh dumpxml Win7-ent 查看确认:

这是让虚拟机里的vCPU一起绑定的方法。

那么有的人会疑问,一个虚拟机我有两个vCPU, 比如这个win7 ,它就是双核的,我想让里面的vCPU1和vCPU2分别绑定在不同的物理CPU上可以吗?怎么操作呢?这也是可以的,我们通过下面的方法可以进行相关的vCPU分别绑定

virsh vcpupin Win7-ent 0 22

virsh vcpupin Win7-ent 1 23

virsh dumpxml Win7-ent

virsh vcpuinfo Win7-ent

这里要注意的是,你把虚拟机用reboot重启,这个绑定配置还是生效的,但是你shutdown的话,CPU绑定的效果会失效。我们要让VM关机然后起来也生效,就必须把参数写入到虚拟机的XML里,然后保存,这样关机了也不会失效,这里要注意下

virsh edit vm1

添加:

<cputune>

<vcpupin vcpu='0' cpuset='22'/>

<vcpupin vcpu='1' cpuset='23'/></cputune>

以上就是CPU绑定技术的操作。通过这样的操作,我们可以在一台多CPU的物理机上固定几个CPU给虚拟机用。当然,至于为什么可以这样做,前面我们提到了关于NUMA的原理,如果固定了虚拟机的CPU,那么它就不会去找远端节点了,另外就是有些场景下,一物理机多个CPU,如果前面几个CPU负载很高,利用率大,后面几个CPU利用率低,那么我们可以协调下,做CPU的绑定,平衡下CPU的负载。

注: 通过 直接在XML 定义,需要使用 virsh define /etc/libvirt/qemu/vm.xml重新导入虚拟机。

相关推荐
高亦真3 分钟前
今天是学习嵌入式的第38天
linux·学习·算法
志栋智能6 分钟前
超自动化巡检如何生成“有灵魂”的运维报告?
大数据·运维·人工智能·架构·自动化
凌风的跨境分享6 分钟前
Temu运营避坑指南:制造地点信息填写合规要点与批量优化方法
运维·服务器·人工智能
DYWorker0017 分钟前
Linux驱动子系统:中断子系统 —— Consumer和Provider(005)
linux·驱动开发
草莓熊Lotso10 分钟前
【Redis 进阶】主从复制深度解析:从配置落地到 PSYNC 同步原理
linux·开发语言·网络·数据库·redis·缓存·php
Splashtop高性能远程控制软件21 分钟前
微软 2026 年 9 月补丁星期二技术分析:974 个漏洞的分级修复优先级清单
运维·安全·自动化·远程工作·splashtop
RobinDevNotes25 分钟前
用 Profile 揪出大模型训练性能瓶颈
python·性能优化
ShineWinsu44 分钟前
对于Git:远程操作的超详细保姆级解析
linux·git·gitee·github·远程仓库·分布式版本控制系统·远程操作
小张成长计划..1 小时前
【Linux】21:进程间通信
linux
Elastic 中国社区官方博客1 小时前
将 Vercel 数据导入 Elastic:无需安装任何东西的无服务器可观测性
大数据·运维·elasticsearch·搜索引擎·云原生·serverless·全文检索