• libvirt-qemu-虚拟机设备热插拔


    cpu热插拔
    # virsh setvcpus $domain_name --count 4 --live (--config可写入配置文件永久保存)
    #前提条件和后续激活参考《libvirt-qemu-虚拟机cpu分配和cpu热插拔》
     
    内存热插拔
    <memory model='dimm'>
        <target>
            <size unit='KiB'>524287</size>
            <node>0</node>
        </target>
    </memory>
    #和doamin中格式相同
    # virsh attach-device $domain_name mem.xml (--config可写入配置文件永久保存)
    #前提条件和后续激活参考《libvirt-qemu-虚拟机内存分配和内存热插拔》
     
    网卡热插拔
    <interface type='bridge'>
          <mac address='52:54:00:2d:ea:aa'/>
          <source bridge='br0'/>
          <model type='virtio'/>
    </interface>
    #和doamin中格式相同
    # virsh attach-device $domain_name interface.xml  (--config可写入配置文件永久保存)
    # virsh detach-device $domain_name interface.xml
     
    磁盘热插拔
    <disk type='file' device='disk'>
          <driver name='qemu' type='qcow2'/>
          <source file='/tmp/test.img'/>
          <target dev='vdd' bus='virtio'/>
    </disk>
    #和doamin中格式相同
    # virsh attach-device $domain_name disk.xml (--config可写入配置文件永久保存)
    # virsh detach-device $domain_name disk.xml
     
    USB设备
    <hostdev mode='subsystem' type='usb'>
      <source>
        <vendor id='0x096e'/>
        <product id='0x0405'/>
      </source>
    </hostdev>
    #和doamin中格式相同
    # virsh attach-device $domain_name usb.xml (--config可写入配置文件永久保存)
    # virsh detach-device $domain_name usb.xml
     
    PCI设备热插拔
    <hostdev mode='subsystem' type='pci' managed='yes'>
        <source>
            <address domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
        </source>
    </hostdev>
    #和doamin中格式相同
    # virsh attach-device $domain_name pci.xml (--config可写入配置文件永久保存)
    # virsh detach-device $domain_name pci.xml
     
     
      在使用libvirt给虚拟机分配内存大小时,涉及到memory和currentMemory两个字段,很多人都有这个疑惑,为什么需要两个呢。其实是和内存气泡动态调整内存有关系的。简单的来说,memory是虚拟机启动时分配给的内存,currentMemory是内存气泡生效后动态调整到的内存。下面看具体的解释。
     
    一. 启动内存
    <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"
  • 相关阅读:
    JS中实现跨域的方法总结
    stack overflow错误分析
    VC包含目录、附加依赖项、库目录及具体设置
    sqlite3使用简介
    虚拟机开机提示Operating System not found解决办法
    Qt环境搭建(Qt Creator)+Visual Studio
    QT自定义信号
    不同平台文件读写的操作
    CNN大战验证码
    RNN入门(一)识别MNIST数据集
  • 原文地址:https://www.cnblogs.com/klb561/p/9236437.html
Copyright © 2020-2023  润新知