设为首页 收藏本站
查看: 2082|回复: 0

[经验分享] qemu-kvm如何mem 热插拔

[复制链接]

尚未签到

发表于 2015-10-10 12:14:36 | 显示全部楼层 |阅读模式
linux内核已经实现了内存热插的支持,当一个linux系统不管运行在 物理环境 或者虚拟环境  时只要宿主能提供内存热插拔机制,linux内核就能相应的增加或者减少内存。  目前已知的VMware已经可以做到内存热插。
  改变内存容量有两种方式:
[html] view plaincopyprint?

  • 40  1.1 purpose of memory hotplug  
  • 41  ------------  
  • 42  Memory Hotplug allows users to increase/decrease the amount of memory.  
  • 43  Generally, there are two purposes.  
  • 44   
  • 45  (A) For changing the amount of memory.  
  • 46      This is to allow a feature like capacity on demand.  
  • 47  (B) For installing/removing DIMMs or NUMA-nodes physically.  
  • 48      This is to exchange DIMMs/NUMA-nodes, reduce power consumption, etc.  
  •    
  前些天检查maillist时发现已经有人实现了DIMMs 方式更改内存大小。这种方式还没有并入mainline tree。
[html] view plaincopyprint?

  • https://github.com/vliaskov/seabios/commits/memhp-v3-alt  
  • https://github.com/vliaskov/qemu-kvm/commits/memhp-v3-alt  
  

  可以测试下:
  1)下载带有 dimm hotplug 功能的qemu-kvm:
[html] view plaincopyprint?

  • git clone -b  memhp-v3-alt https://github.com/vliaskov/qemu-kvm/commits/memhp-v3-alt  
  配置编译:
[html] view plaincopyprint?

  • $./configure --target-list="i386-softmmu x86_64-softmmu i386-linux-user x86_64-linux-user" --enable-kvm   
[html] view plaincopyprint?

  • $make  
  
2)下载linux内核 linux-3.0.1.tar.bz2 做测试:(32bit)
  linux memory hotplug 需要内核编译进如下选项:
[html] view plaincopyprint?

  • - For all memory hotplug  
  •     Memory model -> Sparse Memory  (CONFIG_SPARSEMEM)  
  • location:  
  • Processor type and features   
  •     Memory model (Sparse Memory)  --->  
[html] view plaincopyprint?

  •     Allow for memory hot-add       (CONFIG_MEMORY_HOTPLUG)  
  • location:  
  • Power management and ACPI options  
  •     ACPI (Advanced Configuration and Power Interface) Support  
  •         Memory Hotplug  
[html] view plaincopyprint?

  • - To enable memory removal, the followings are also necessary  
  •     Allow for memory hot remove    (CONFIG_MEMORY_HOTREMOVE)  
  •     Page Migration                 (CONFIG_MIGRATION)  
[html] view plaincopyprint?

  • - For ACPI memory hotplug, the followings are also necessary  
  •     Memory hotplug (under ACPI Support menu) (CONFIG_ACPI_HOTPLUG_MEMORY)  
  •     This option can be kernel module.  
  •   
  • - As a related configuration, if your box has a feature of NUMA-node hotplug  
  •   via ACPI, then this option is necessary too.  
  •     ACPI0004,PNP0A05 and PNP0A06 Container Driver (under ACPI Support menu)  
  •     (CONFIG_ACPI_CONTAINER).  
  •     This option can be kernel module too.  
  配置好之后就可以用make 了。
  编译完成后将得到的bzImage文件拷贝出来。
  3)制作启动所需固件:
  当内存hotplugged之后,内核需要知道新增加上的内存并且制作内存管理表,生成sysfs文件来操作内存。
  由于这需要固件的支持,而现有的qemu mainline 中包含的bios并不支持相应的功能,所以需要下载bios来重新编译:
[html] view plaincopyprint?

  • git clone -b memhp-v3-alt https://github.com/vliaskov/seabios/commits/memhp-v3-alt  

创建一个放固件的目录:bios  里面放的固件如下所示:(这些都是编译后qemu目录下的)
[html] view plaincopyprint?

  • .  
  • ├── bios.bin  
  • ├── keymaps  
  • │   ├── common  
  • │   ├── en-us  
  • │   └── modifiers  
  • ├── kvmvapic.bin  
  • ├── linuxboot.bin  
  • ├── multiboot.bin  
  • ├── optionrom  
  • │   ├── kvmvapic.bin  
  • │   ├── linuxboot.bin  
  • │   └── multiboot.bin  
  • ├── ppc_rom.bin  
  • ├── pxe-e1000.rom  
  • ├── sgabios.bin  
  • ├── slof.bin  
  • ├── spapr-rtas.bin  
  • ├── vgabios.bin  
  • ├── vgabios-cirrus.bin  
  • ├── vgabios-qxl.bin  
  • ├── vgabios-stdvga.bin  
  • └── vgabios-vmware.bin  
  将编译好的固件 ./out/bios.bin  替换上面的  bios.bin。
  4)制作文件系统busybox.img
  可参考如下连接:
[html] view plaincopyprint?

  • http://blog.iyunv.com/gudujianjsk/article/details/7655855  
  

  现在测试用的内核文件都得到了,用如下脚本开启测试:
[html] view plaincopyprint?

  • ./../qemu-kvm/i386-softmmu/qemu-system-i386 -enable-kvm -m 512 -kernel bzImage -L ./../bios -append "root=/dev/sda" -dimm id=dimm0,size=512M,node=0,populated=off -boot c -smp 1  -hda busybox.img -monitor stdio -k en-us -vnc :2  
  启动后系统显示如下:
DSC0000.jpg
  由于编译时配置将 CONFIG_ACPI_HOTPLUG_MEMORY 配置为内核模块了,所以这里需要首先加载一个内核模块:acpi_memhotplug.ko.
  所有的sections都在sysfs下有它们的设备信息。每一个section都是在 /sys/devices/system/memory/目录下的内存块的一部分。
[html] view plaincopyprint?

  • /sys/devices/system/memory/memoryXXX  
  在这里XXX就是内存ID。
DSC0001.jpg
  在monitor中动态 增加dimm:
[html] view plaincopyprint?

  • sae@lx15:/var/dbg/test-dimm/busybox$ sudo ./test-box.sh   
  • QEMU 1.2.50 monitor - type 'help' for more information  
  • (qemu) device_add dimm,id=dimm0  
  此时在虚拟机中可见多了个memory1,其状态是offline:
DSC0002.jpg
  此时新增加的内存还没有做好使用的准备。为了使用新增加的内存你需要把新增加的内存设置为online 状态
DSC0003.jpg
  
  此时用free查看总计的内存数量:
DSC0004.jpg
  
  测试完毕。
  

  http://www.mjmwired.net/kernel/Documentation/memory-hotplug.txt

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-125073-1-1.html 上篇帖子: 探索KVM 下篇帖子: Low Level Design for Identification of the Guest OS Process from VMM:KVM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表