专栏首页虚拟化云计算libvirt-内存分配和内存热插拔

libvirt-内存分配和内存热插拔

一. 启动内存

<memory unit='KiB'>8388608</memory>

虚拟机启动时使用的内存

二. 内存气泡

在虚拟机的xml文件中配置:

  <memory unit='KiB'>8388608</memory>

  <currentMemory unit='KiB'>158608</currentMemory>

  ......

  <devices>

    <memballoon model='virtio'>

      <stats period='10'/>

      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>

    </memballoon>

  </devices>

参数说明:

memory

在qemu命令中使用参数-m来设置的。表示虚拟机在启动阶段使用的内存。包括在启动或稍后热插拔时指定的可能的附加内存。

currentMemory

通过libvirt调整balloon值的初始值是currentMemory。

说明:

1.在虚拟机启动后加载了内存balloon驱动后就开始对虚拟机内存进行热插拔,先设置内存为<currentMemory>大小,这个<currentMemory>qemu进程不知道,时记录在libvirt中的。然后根据需求对内存进行调整(balloon),调整的上限是<memory>,这个<memory>qemu进程是知道的,在虚拟机启动时使用了这个值。

2.要禁止memballoon设备,可以设置memballoon model='none'

禁止内存气泡设备后,虚拟机内部看到的内存就是<memory>,也不能通过气泡进行调整。

通过ballon调整虚拟机内存大小(调整后在虚拟机内部是可以看到虚拟机内存大小变化的):

# virsh qemu-monitor-command instance-00000005 --hmp "info balloon"

# virsh qemu-monitor-command instance-00000005 --hmp "balloon 1024"

或者:

# virsh setmem instance-00000005 2097152

# virsh dommemstat instance-00000005

三. 内存热插拔

虚拟机的xml文件

 <maxMemory slots='1' unit='KiB'>10388608</maxMemory>

  ......

 <cpu mode='host-model'>

    ......

    <numa>

      <cell id='0' cpus='0' memory='4194304' unit='KiB'/>

    </numa>

  </cpu>

<maxMemory>的值表示通过 hot-plug 可以达到的内存的上限(包含虚拟机初始内存)。其中 slots 表示 DIMM 插槽的数量,每个插槽在运行时都可以插入一个内存设备,上限是 255 个。

<numa>内的配置用于指定虚拟机内的 NUMA 拓扑。

要插入内存设备xml文件

<memory model='dimm'>

    <target>

        <size unit='KiB'>524287</size>

        <node>0</node>

    </target>

</memory>

<size>指定设备的内存容量,<node>指定插入到虚拟机的哪个 NUMA 节点。

插入内存前虚拟机内部:

插入内存:

# virsh attach-device --live instance-00000005 mem.xml

插入内存后虚拟机内部:

激活新插入的内存,并查看内存:

注:新的内存设备插入之后,内存气泡可调整的上限值也随之增大相应的大小。

四. 热插拔内存后虚拟机内部自动 online 内存

为了让系统自动 online 添加的内存,可以设置 udev 规则,内容如下:

/etc/udev/rules.d/99-hotplug-memory.rules

# automatically online hot-plugged memory

ACTION=="add", SUBSYSTEM=="memory",ATTR{state}="online"

五. 目前支持内存热插的 Windows 版本有:

Windows Server 2008 R2, Enterprise Edition and Datacenter Edition

Windows Server 2008, Enterprise Edition and Datacenter Edition

Windows Server 2003, Enterprise Edition and Datacenter Edition

所有 Windows 系统都不支持内存热拔操作。


关注本公众号,了解更多关于云计算虚拟化的知识。

本文分享自微信公众号 - 虚拟化云计算(openstack_openstack),作者:kvm虚拟化

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

原始发表时间:2018-01-01

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 在openstck中配置使用cloud-init

    cloud-init是在创建虚拟机时能够对虚拟机进行一些初始化操作的工程。在虚拟机启动的时候,对虚拟机进行一些列的操作,例如常用的:自动设置 虚拟机h...

    虚拟化云计算
  • 如何使用curl调试openstack的api

    访问openstack的API之前,用户使用用户名和密码向keystone进行认证。在通过keystone认证后,keystone会在返回数据中包含一个Serv...

    虚拟化云计算
  • Virtio网络的演化之路

    作为一个开放的标准接口,virtio一直在云计算与虚拟化中扮演着重要的角色。而virtio网络接口,作为virtio标准支持下最复杂的接口之一,在虚拟机/容器网...

    虚拟化云计算
  • 内存溢出和内存泄漏的区别

    内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了...

    用户6182664
  • 郭健: Linux内存模型——平坦、非连续与稀疏

    在linux内核中支持3中内存模型,分别是flat memory model,Discontiguous memory model和sparse memory ...

    Linux阅码场
  • Utility之内存尺寸

    虽然现在64位处理器越来越多,而且VxWorks也从6.9开始提供64位处理器的支持,但是目前VxWorks更多的应用场景还是32位的。那么VxWorks在32...

    Taishan3721
  • 一次恐怖的 Java 内存泄漏排查实战

    最近在看《深入理解Java虚拟机:JVM高级特性与最佳实践》(第二版)这本书,理论+实践结合,深入浅出,强烈推荐给大家。

    Java技术栈
  • JVM第一篇:一个Java内存泄漏的排查案例

    黄小怪
  • 软件开发中的开源协议详解!

    作者:pdai 开源不等于免费!为了加速我们的开发,我们会使用开源的软件和源码; 为避免商业风险,需要在使用时了解第三方如软件协议,版本,和已知CVE风险等;本...

    Java技术栈
  • ps命令常见用法

    Linux中的ps命令用来列出系统中当前运行的那些进程,查看它们的运行状态,占用的资源

    Huramkin

扫码关注云+社区

领取腾讯云代金券