当前位置: 首页 > news >正文

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"

转载于:https://www.cnblogs.com/klb561/p/9236437.html

相关文章:

  • 【刷算法】从上往下打印二叉树
  • 温故之.NET 中的并行并发概念解析
  • 命名实体识别从数据集到算法实现
  • 过滤器的功能实现
  • ps:建立规则选区
  • 巴克莱银行聚焦于业务产出的做法
  • Scala学习笔记(1)
  • Ubuntu 下解压tar.xz方法
  • Java深究之String、StringBuffer、StringBuilder的区别
  • 主题 :学习与自我提升
  • php 向关联数组头部插入key value 保持数组关系不变
  • excel导出 ajax错误判断 数据为空判断
  • 分分钟用上C#中的委托和事件
  • python-day2-06-列表
  • 【短文】为什么我不在PHP的私有变量用下划线了?
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • Codepen 每日精选(2018-3-25)
  • hadoop集群管理系统搭建规划说明
  • iOS 颜色设置看我就够了
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript创建对象的四种方式
  • jQuery(一)
  • JS基础之数据类型、对象、原型、原型链、继承
  • js写一个简单的选项卡
  • Phpstorm怎样批量删除空行?
  • 翻译--Thinking in React
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 构建二叉树进行数值数组的去重及优化
  • 欢迎参加第二届中国游戏开发者大会
  • 力扣(LeetCode)21
  • 前端js -- this指向总结。
  • 通过几道题目学习二叉搜索树
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 自制字幕遮挡器
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ###C语言程序设计-----C语言学习(6)#
  • #include
  • #QT(一种朴素的计算器实现方法)
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (四) 虚拟摄像头vivi体验
  • (一)WLAN定义和基本架构转
  • (一)基于IDEA的JAVA基础1
  • (转)ObjectiveC 深浅拷贝学习
  • (转)项目管理杂谈-我所期望的新人
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET 4.0中的泛型协变和反变
  • .NET HttpWebRequest、WebClient、HttpClient
  • .net 微服务 服务保护 自动重试 Polly
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET4.0并行计算技术基础(1)
  • ??在JSP中,java和JavaScript如何交互?