专栏首页皮振伟的专栏[linux][kvm]模拟大量虚拟机遇到的问题

[linux][kvm]模拟大量虚拟机遇到的问题

前言: 网络的同事希望模拟大量的虚拟机(万台数量级),又受到物理资源的限制,只能使用几台物理机。 遇到了各种奇奇怪怪的问题。 分析:

1,aio数量爆了 单机上创建的虚拟机到达512的时候,在模拟大规模的场景下,发现创建虚拟机失败。Host上dmesg的内容是segment fault。 原因是达到了Linux的最大的aio数量,QEMU在初始化aio context的时候,对这个错误处理逻辑不严谨。导致了空指针。 #cat /proc/sys/fs/aio-max-nr #cat /proc/sys/fs/aio-nr 需要确认这两个参数。aio-nr如果等于aio-max-nr,就是aio-nr爆了导致的。因为QEMU对每个native方式访问的disk使用128个AIO events。默认aio-max-nr参数65536,那么65536 / 128 = 512。 所以目前的话,单机上最大支持512个本地盘(因为每个虚拟机一个,所以就是512个虚拟机),这个在实际应用的场景下不会发生。所以这个不作为通用的解决方案。 临时解决方案:#echo 524288 > /proc/sys/fs/aio-max-nr 2,virtlogd的文件描述符爆了 /lib/systemd/system/virtlogd.service中,需要确认文件描述符的数量。默认是1024,所以创建到不到300虚拟机的时候就会出现创建虚拟机失败。因为virtlogd和每个QEMU之间使用3个UNIX socket做连接,消耗3个fd。

配置如下: [Service] LimitNOFILE=16384 重启virtlogd服务: #service virtlogd restart 3,内存被cache使用过多 如果看到很多的page cache, 执行#echo 3 > /proc/sys/vm/drop_caches清空page cache。 4,内存不足 启动的虚拟机使用cirros,每台使用128M内存。192G的物理即,启动之后只有187G。cirros因为是克隆的,并不是同一个文件,所以需要稍多的page cache,大约10G。再减掉watermark的阈值等等,真正的可用内存大约175G左右。 175G / 128M = 1400。 使用KSM做内存合并,针对这种场景有大量的合并空间: 启动KSM #echo 1 > /sys/kernel/mm/ksm/run 加速合并效率,牺牲最多一个CPU(最多一个内核线程执行,执行中间也有sleep) #echo 10240 > /sys/kernel/mm/ksm/pages_to_scan 实际效果: #cat /sys/kernel/mm/ksm/pages_sharing 24643919 #cat /sys/kernel/mm/ksm/pages_shared 795802 实际合并内存(24643919 - 795802) × 4K = 91G 合并的内存可以启动的虚拟机个数:91G / 128M = 728 理论上预计总共可以创建: 1400 + 728 = 2128 实际上总共创建: # virsh list | grep instance | wc -l 2279

本文分享自微信公众号 - AlwaysGeek(gh_d0972b1eeb60),作者:AlwaysGeek

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-02-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 热迁移、RTC 计时与安全增强…腾讯云 KVM 性能优化实践经验谈

    腾讯云的虚拟机热迁移过程和具体方法是什么?腾讯云又如何看待 KVM 技术开源?KVM 现在面临着哪些新的挑战?

    腾讯云计算产品团队
  • KVM之CPU虚拟化

    虚拟化技术是指在x86的系统中,一个或以上的客操作系统(Guest Operating System,简称:Guest OS)在一个主操作系统(Host Ope...

    惨绿少年
  • KVM详解,学习kvm系列文章

    其中,KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),它是一个 Linux 的一个内核模块,该内核模块使得 Lin...

    菲宇
  • LINUX 的 XEN 和 KVM 到底区别在什么地方

    kvm 是 linux 的内核的一个 module,而 xen 是一个 linux 的应用。

    明哥的运维笔记
  • 懂了!VMware/KVM/Docker原来是这么回事儿

    虚拟主机、web服务器、数据库、对象存储等等各种服务我们都可以通过各种各样的云平台来完成。

    轩辕之风
  • CentOS 7.5 安装KVM虚拟机(Linux) 原

    Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。...

    拓荒者
  • 五板斧-帮助企业敲开IT转型之门

    当前,随着第三平台的到来和互联网行业的冲击,传统行业的IT系统都面临着转型的压力。而在转型过程中,继续使用封闭的IT系统显然是逆势而为。实际上,无论从全球IT发...

    魏新宇
  • 虚拟化技术概述

    虚拟化简单讲,就是把一台物理计算机虚拟成多台逻辑计算机,每个逻辑计算机里面可以运行不同的操作系统,相互不受影响,每个逻辑系统都是独立的存在,这样就可以充分利用物...

    端碗吹水
  • QEMU架构浅析

    QEMU是“Quick Emulator”的缩写,是一个用C语言编写的开源虚拟化软件。本文的目的是描述本人所理解的QEMU技术架构的见解,并以此抛砖引玉。众所周...

    时间之外沉浮事

扫码关注云+社区

领取腾讯云代金券