qemu-kvm虚拟机性能优化
在KVM虚拟机中运行mysql,发现与ESX虚拟机中比较,性能有些差。用sysbench测试KVM虚拟机中的mysql,TPS刚刚到1500级别。性能如图:
使用perf命令跟踪KVM虚拟机对应的进程,情况如下:
从图中可以看出,这台虚拟机的page_fault占比较高,其次是__GI__ioctl,而sys_poll虽然占比高,却无需关注,因为即使虚拟机是空闲状态,sys_poll也会高。
使用perf跟踪kvm事件可以看到情形如图:
从图中来看,发生次数频繁的事件主要是kvm_page_fault,kvm_apic,kvm_pio,kvm_entry,kvm_exit,kvm_apic_ipi,kvm_apic_accept_irq。
kvm_entry和kvm_exit是进入退出虚拟机状态的事件,这两个事件主要是由其它事件引发的副作用,不需过多关注。
kvm_apic_ipi,kvm_apic_accept_irq是中断相关的,也无需过多关注。
剩下的需要关注的是kvm_page_fault,kvm_apic,kvm_pio
先来看kvm_apic,kvm_pio。使用perf跟踪kvm_apic,kvm_pio,如图:
从图中可以看出,相关的IO端口主要是0xc090和APIC_ICR
APIC_ICR是中断相关的,无需关注。
执行命令virsh qemu-monitor-command vm_name --hmp --cmd "info mtree",输出如下
可知0xc090对应的是virtio-pci
在虚拟机内部执行命令cat /proc/ioports,可知端口范围c080-c0bf对应的PCI是0000:00:08.0结果如下
在虚拟机内部执行lspci命令,可知PCI 0000:00:08.0对应的设备为00:08.0 SCSI storage controller: Red Hat, Inc Virtio block device。lspci命令结果如下
查看虚拟机的配置文件,有如下内容,也可确认0xc090对应的是存储设备
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='writeback'/>
<source file='XXX'/>
<target dev='vdc' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</disk>
从上述过程可知,性能调优不需要过多关注KVM事件kvm_apic,kvm_pio,剩下的就是分析事件kvm_page_fault了。
kvm_page_fault频繁,是内存方面的问题。物理机中执行free -m命令,发现内存是足够的。估计有可能是NUMA方面的原因。
查看系统NUMA情况:
从lscpu结果来看,系统中存在两个NUMA结点。
查看虚拟机CPU和内存的NUMA分布情况。虚拟机名称是testmysql,配置情况是4核8G,对应的进程PID是2783217。
查看CPU分布:
从结果可以知道虚拟机CPU主要分布在node1上。
查看内存分布(虚拟机对应的进程PID是2783217):
虚拟机的CPU分布在node1上,而内存却分布在node0上。性能肯定会下降。再看看各个node的内存使用情况。
node0的:
node1的:
从结果看,各个node的空闲内存是足够8G的(注意虚拟机本来就主要运行在node0内存上,node0还剩下6G的内存)。
接下来,将虚拟机的内存和CPU绑定在同一节点上运行,同时开启hugepage。
node1上空闲内存多些,在node1上建立hugepage。
同时,在虚拟机配置文件中增加hugepage配置,将虚拟cpu绑定在node1上。
<memoryBacking>
<hugepages/>
</memoryBacking>
<vcpu placement='static' cpuset='8-15,24-31'>4</vcpu>
<numatune>
<memory mode='strict' nodeset='1'/>
</numatune>
关闭虚拟机后重新启动。
在虚拟机中启动测试,使用perf查看kvm事件:
kvm:kvm_page_fault事件只有340,kvm_entry和kvm_exit也降下来了。
下面是虚拟机中测试结果:
性能达到了1777。
现在看下内存在物理机NUMA中的分布情况(重启后虚拟机进程PID为3159995):
虚拟内存分布在了node1上。
由于虚拟机中磁盘IO使用了pagecache,而物理机中也使用了pagecache,可以让虚拟机中磁盘io不使用pagecache。设置虚拟磁盘IO调度方式为noop,并再次测试:
性能达到了1884。
经过以上调试,性能从一开始的1500到了1884。
qemu-kvm虚拟机性能优化相关推荐
- Proxmox VE 6.0管理指南——10. Qemu / KVM虚拟机
10. Qemu / KVM虚拟机 Qemu(Quick Emulator的缩写)是一个模拟物理计算机的开源虚拟机管理程序.从运行Qemu的主机系统的角度来看,Qemu是一个用户程序,可以访问许多本地 ...
- kvm虚拟机性能调优
kvm虚拟机性能调优 kvm性能优化,主要集中在cpu.内存.磁盘.网络,4个方面,当然对于这里面的优化,也是要分场景的,不同的场景其优化方向也是不同的,下面具体聊聊这4个方面的优化细节. 1. CP ...
- VMware Workstation 虚拟机性能优化指南
我们经常使用虚拟机来体验各种新系统,做各类新鲜应用的测试,由于VMware Workstation虚拟机功能强大,又适用于最新的 Windows / linux /Sun等平台,而且操作方便,所以其普 ...
- QEMU/KVM虚拟机Win11黑屏问题解决
ArchLinux系统下,通过qemu/kvm虚拟机环境安装的win11(UEFI+GPT),8月份以来一直使用正常.最近看到一个错误想纠正(如下图),考虑到可能是权限问题,便将win11的qcow2 ...
- KVM虚拟机的优化历程---按需优化
一.KVM为什么要调优 性能的损耗是矛盾的根源,KVM采用全虚拟化技术,全虚拟化要由一个软件来模拟硬件层,故有一定的损耗,特别是I/O输入输出. KVM性能优化主要在CPU.内存.I/O这几方面,当然 ...
- Windows10中macOS10.14虚拟机性能优化教程
Python 全栈工程师核心面试 300 问深入解析(2020 版)----全文预览 Python 全栈工程师核心面试 300 问深入解析(2020 版)----欢迎订阅 Windows10中采用VM ...
- KVM虚拟机文件优化导出最小化体积的qcow2镜像文件
KVM虚拟机的模版导出,通常都是直接用qemu-img命令可以将默认的raw格式或者qcow2格式的磁盘文件压缩后导出,指令如下: //将默认raw格式的磁盘,简单压缩转换成qcow2格式 #qemu ...
- QEMU KVM 虚拟机移植之性能提高篇小结(android 虚拟机双系统方案)
一.提升性能核心要素 1.将OPENGL 接口进行穿透调用,下面对opengl穿透做个小结 2.在arm开发板上打开kvm特性,这个qcom&mtk都是实现了的,只需要打开开关即可 二.AND ...
- Win7虚拟机性能优化
试验环境: 虚拟机win7-test 1.减少动画效果 计算机右键-属性-视觉效果-性能设置-自定义--勾选"平滑屏幕字体边缘","在窗口按钮上使用视觉样式", ...
最新文章
- oraclf 复杂查询练习_刷完这些烧脑的SQL练习题,复杂查询才能熟能生巧
- Ubuntu安装yum失败-2
- 【免费】网易开卖CTO啦——开发者踩坑专场
- 编译器角度看C++复制构造函数
- 对现有的所能找到的DDOS代码(攻击模块)做出一次分析----GET篇
- php301重定向跳转,php如何设置301重定向跳转
- 编程贺卡c语言,C++实现新年贺卡程序
- (Python第七天)实例二玩转函数
- 海报素材模板|超好看的新年素材,你真的不来看一看吗?
- 通过mysqlnow()函数校正本地(windows)时间与服务器(linux)时间
- elementUI 日期选择控件少一天的问题解决方法
- 通过注册表快速清理残留的软件
- 拼多多怎样降低退款率?厦门宝讯网捷
- AutoformR8 软件安装说明视频教程
- 爬取起点中文网的小说
- 个人项目——中小学数学卷子自动生成程序
- TensorFlow SSE/AVX/FMA 指令集编译
- 绿色经济:WIPO 绿色专利分类数据
- 用python写一个可视化爱心
- 设A=(a1,…,am)和B=(b1,…,bn)均为顺序表,A’和B’分别为A和B中除去最大共同前缀后的子表,求出A,B的大小
热门文章
- 《小程序》微信小程序绑定系统账号并授权登录之微信端
- 智能优化算法:孔雀优化算法-附代码
- lambda表达式java项目常用_一文带你彻底搞懂Lambda表达式
- 【Ruby on Rails】2021 OWASP TOP 10 的安全加固建议
- 简单实现 iframe 全屏显示
- 搭建一个轻量级实验室,还不错
- php源码目录在哪,PHP源代码目录结构简介(原创)
- 计算机网络作业计算机配置,某高校网工课后作业《路由交换综合案例》配置详细步骤(含配置文件)...
- struts2教程:12、自定义类型转换器
- 日本PHP的线雕产品怎么样,欧茱丽线雕安瓶怎么样?欧茱丽线雕安瓶好用吗