在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虚拟机性能优化相关推荐

  1. Proxmox VE 6.0管理指南——10. Qemu / KVM虚拟机

    10. Qemu / KVM虚拟机 Qemu(Quick Emulator的缩写)是一个模拟物理计算机的开源虚拟机管理程序.从运行Qemu的主机系统的角度来看,Qemu是一个用户程序,可以访问许多本地 ...

  2. kvm虚拟机性能调优

    kvm虚拟机性能调优 kvm性能优化,主要集中在cpu.内存.磁盘.网络,4个方面,当然对于这里面的优化,也是要分场景的,不同的场景其优化方向也是不同的,下面具体聊聊这4个方面的优化细节. 1. CP ...

  3. VMware Workstation 虚拟机性能优化指南

    我们经常使用虚拟机来体验各种新系统,做各类新鲜应用的测试,由于VMware Workstation虚拟机功能强大,又适用于最新的 Windows / linux /Sun等平台,而且操作方便,所以其普 ...

  4. QEMU/KVM虚拟机Win11黑屏问题解决

    ArchLinux系统下,通过qemu/kvm虚拟机环境安装的win11(UEFI+GPT),8月份以来一直使用正常.最近看到一个错误想纠正(如下图),考虑到可能是权限问题,便将win11的qcow2 ...

  5. KVM虚拟机的优化历程---按需优化

    一.KVM为什么要调优 性能的损耗是矛盾的根源,KVM采用全虚拟化技术,全虚拟化要由一个软件来模拟硬件层,故有一定的损耗,特别是I/O输入输出. KVM性能优化主要在CPU.内存.I/O这几方面,当然 ...

  6. Windows10中macOS10.14虚拟机性能优化教程

    Python 全栈工程师核心面试 300 问深入解析(2020 版)----全文预览 Python 全栈工程师核心面试 300 问深入解析(2020 版)----欢迎订阅 Windows10中采用VM ...

  7. KVM虚拟机文件优化导出最小化体积的qcow2镜像文件

    KVM虚拟机的模版导出,通常都是直接用qemu-img命令可以将默认的raw格式或者qcow2格式的磁盘文件压缩后导出,指令如下: //将默认raw格式的磁盘,简单压缩转换成qcow2格式 #qemu ...

  8. QEMU KVM 虚拟机移植之性能提高篇小结(android 虚拟机双系统方案)

    一.提升性能核心要素 1.将OPENGL 接口进行穿透调用,下面对opengl穿透做个小结 2.在arm开发板上打开kvm特性,这个qcom&mtk都是实现了的,只需要打开开关即可 二.AND ...

  9. Win7虚拟机性能优化

    试验环境: 虚拟机win7-test 1.减少动画效果 计算机右键-属性-视觉效果-性能设置-自定义--勾选"平滑屏幕字体边缘","在窗口按钮上使用视觉样式", ...

最新文章

  1. oraclf 复杂查询练习_刷完这些烧脑的SQL练习题,复杂查询才能熟能生巧
  2. Ubuntu安装yum失败-2
  3. 【免费】网易开卖CTO啦——开发者踩坑专场
  4. 编译器角度看C++复制构造函数
  5. 对现有的所能找到的DDOS代码(攻击模块)做出一次分析----GET篇
  6. php301重定向跳转,php如何设置301重定向跳转
  7. 编程贺卡c语言,C++实现新年贺卡程序
  8. (Python第七天)实例二玩转函数
  9. 海报素材模板|超好看的新年素材,你真的不来看一看吗?
  10. 通过mysqlnow()函数校正本地(windows)时间与服务器(linux)时间
  11. elementUI 日期选择控件少一天的问题解决方法
  12. 通过注册表快速清理残留的软件
  13. 拼多多怎样降低退款率?厦门宝讯网捷
  14. AutoformR8 软件安装说明视频教程
  15. 爬取起点中文网的小说
  16. 个人项目——中小学数学卷子自动生成程序
  17. TensorFlow SSE/AVX/FMA 指令集编译
  18. 绿色经济:WIPO 绿色专利分类数据
  19. 用python写一个可视化爱心
  20. 设A=(a1,…,am)和B=(b1,…,bn)均为顺序表,A’和B’分别为A和B中除去最大共同前缀后的子表,求出A,B的大小

热门文章

  1. 《小程序》微信小程序绑定系统账号并授权登录之微信端
  2. 智能优化算法:孔雀优化算法-附代码
  3. lambda表达式java项目常用_一文带你彻底搞懂Lambda表达式
  4. 【Ruby on Rails】2021 OWASP TOP 10 的安全加固建议
  5. 简单实现 iframe 全屏显示
  6. 搭建一个轻量级实验室,还不错
  7. php源码目录在哪,PHP源代码目录结构简介(原创)
  8. 计算机网络作业计算机配置,某高校网工课后作业《路由交换综合案例》配置详细步骤(含配置文件)...
  9. struts2教程:12、自定义类型转换器
  10. 日本PHP的线雕产品怎么样,欧茱丽线雕安瓶怎么样?欧茱丽线雕安瓶好用吗