• KVM在线扩展虚拟机内存


    环境介绍

    在KVM下有一台虚拟机内存不够需要扩展内存。宿主机地址是192.168.1.28。我需要扩展的虚拟机是centos1708vm03。

    1、登陆上宿主机查看虚拟机配置

    virsh dumpxml centos1708vm03 | head -n 10
    此时内存为1G

    2、在centos1708vm03查看内存情况

    3、将虚拟机内存扩展为2G

    在宿主机上 virsh setmem centos1708vm03 2048000k
    注意:能够在线调整的最大内存不能超过为虚拟机分配的最大内存,否则需要关闭虚拟机或者重启宿主机上调最大内存(设置VM使用的最大内存或最大CPU可以使用 # virsh edit centos1708vm03命令)在创建虚拟机时将最大内存的值设大。

    4、登录到centos1708vm03上查看内存情况

    与没有扩展内存前,多出了1G的内存。至此我们就完成了虚拟机的内存扩展。
     

    5、QEMU命令优化配置虚拟机CPU和内存

     
     

    QEMU命令配置方法

    配置CPU类型示例:
    # qemu-kvm -cpu SandyBridge myVM.img
    在客户机上看到的CPU型号中,显示(SandyBridge)
     
    配置对称多处理器示例:
    # qemu-kvm -smp 8, sockets=2, cores=2, threads=2 myVM.img
    指定虚拟机支持SMP(对称多处理器),有8个逻辑CPU,2个CPU插槽,每个插槽上的CPU为双核,在每个CPU内核上启用超线程。这些参数的缺省值均为1。
     
    配置内存容量示例:
    # qemu-kvm -m 1G myVM.img 
    容量的缺省单位为MB,内存容量的缺省配置为128MB。
     

    状态信息查询

    在Linux系统中,查看与CPU有关的信息:
    # cat /proc/cupinfo
    在Linux系统中,查看与CPU有关的信息:
    # cat /proc/meminfo
    # dmsg
    # free -m
     

    资源过载使用

    KVM允许客户机过载使用(over-commit)CPU资源,即让一个或多个客户机使用vCPU的总数量超过宿主机实际拥有的物理CPU数量。但不建议单个客户机的CPU数量多于物理宿主机的CPU数量。
     
    在KVM中,客户机是一个QEMU进程,宿主机系统把它当做一个普通的Linux进程。Linux内核在进程请求更多内存时才分配给它们更多的内存。因此,在KVM中内存也是允许过载使用,分配给客户机的内存总数可以大于实际可用的物理内存总数。客户机过载使用内存的上限是:宿主机可用物理内存空间和交换空间的大小之和。超过这个上限会使客户机因内存不足被强制关闭。
     
    一个内存过载使用的示例:
    宿主机有物理内存32GB,准备同时运行32个内存配置为2GB的客户机。不包括客户机进程所需的内存,维持宿主机本身运行约需4GB内存。作为一般情况下的操作系统安装,32GB物理内存需要分配8GB的交换分区。而考虑作为Hpervisor运行客户机,需要增加交换分区容量:32x 2GB + 4GB - 32GB = 36GB。在此种情况下,该物理机的交换分区应分配:44GB。
     

    balloon技术

    balloon(气球)技术可以在客户机运行时动态地调整它所占用的宿主机内存资源。ballooning技术形象地在客户机占用的内存中引入气球( balloon)的概念。客户机自己不能使用气球中的内存,它是供宿主机使用的内存。当宿主机内存使用紧张时,可以请求客户机返还一些已分配给客户机的内存,客户机会释放其空闲的内存,使内存气球充气膨胀,而使宿主机可以回收气球中的内存用于其他进程。反之,当客户机中内存不足时,也可以让客户机的内存气球压缩,释放出内存气球中的部分内存,让客户机使用更多的内存。原理如图所示:
     

    KVM中的balloon

    KVM通过客户机中的virtio_balloon驱动对ballooning技术提供支持。它的工作过程如下:
    1)KVM发送请求到客户机操作系统让其归还一定数量的内存。
    2)客户机操作系统中的virtio_balloon驱动接收到请求。
    3) virtio_balloon驱动使客户机的内存气球膨胀,virtio balloon驱动会尽可能地满足KVM请求中的内存数量,但不一定能完全满足。
    4)客户机操作系统归还气球中的内存给KVM。
    5)KVM可以根据需要使用从气球中得来的内存。
    6)客户机的virtio balloon驱动可以向KVM索回已返还的内存,KVM将内存返还给客户机,客户机操作系统压缩内存气球,使气球中的内存被释放出来,重新由客户机访问和使用。
     
    QEMU命令在缺省情况下没有分配balloon设备,可用“-balloon virtio”参数来分配balloon设备给客户机,使其调用virtio_balloon驱动实现balloon内存管理。
    # qemu-kvm -m 1024 -balloon virtio myVM.img
     

  • 相关阅读:
    Mysql 系列 | 事务隔离
    Mysql 系列 | 索引(优化器索引选择异常处理)
    Mysql 系列 | count(*)
    K8S入门篇资源调度
    K8S入门篇配置管理
    k8s入门篇资源管理
    k8s入门篇持久化存储管理
    操作crontab
    go Printf 语句的占位符 Format
    go中的 4种 for循环
  • 原文地址:https://www.cnblogs.com/xuewenlong/p/12801037.html
Copyright © 2020-2023  润新知