VMware vSphere hot-add CPU/memory学习笔记

2012-05-05 12:34 by hackerzhou

前段时间接触VMware vSphere的hot-add/plug功能,感觉很炫,虚拟机跑着跑着多出来几个CPU和几G的内存。其实还远远不止这些,还可以热插网卡和硬盘等等,hot-add/plug为虚拟化管理员提供了在不允许停机的生产环境中仍然可以动态添加设备的方法。本文主要介绍下CPU和memory的hot-add/plug、如何让guest OS识别新配置以及一些目前已知的问题,希望给VMware虚拟化社区贡献一份力,同时希望能抛砖引玉,让更多的虚拟化爱好者们能分享各自的经验。

vSphere Release Notes以及vSphere Client中使用hot-add memory和hot-plug CPU的措辞,不过我觉得说成广义的hot-add也并无不可,因此下文用hot-add来指代hot-add/plug。

Hot-add可以抽象成三个步骤:

  1. 打开VM的hot-add选项(hot-add 功能默认不会打开)。右击一个已经关机的VM->”Edit Settings”->”Options”->”Memory/CPU Hot-pluging”,打开memory和CPU的hot-add/plug。具体的操作可以参考有图示的教程 Using vSphere Hot-Add to Dynamically Add CPU and RAM,下图拷贝自上述教程。
  2. 在VM上触发hot-add。开启了VM的hot-add之后,在VM开机状态下进入”Edit Settings”会发现内存和CPU都是可配置的了。配置好之后vSphere会通知guest OS它的设备发生了改变,下图拷贝自上述教程。。
  3. 让运行在VM里的guest OS识别出新设备。Windows一般能自动识别出并使用新的memory和CPU,但在Linux下就需要我们用脚本让系统使用新配置。VMware Knowledge Base中有一篇
    Hot adding memory in Linux,对CPU的操作也很类似。有自动化需要的可以用这两个脚本:online_hotplug_memory.sh 和 online_hotplug_cpu.sh,两个脚本都不难理解,无非就是往识别出但是没有online的CPU和memory的state文件里面写标识符让系统online下设备而已。

局限性(根据个人经验和参考文档):

  • Hot-add memory的数量有严格的限制:
    1)新memory大小必须是128的整数倍。
    2)如果hot-add前的memory小于3G,最多只能hot-add到3G。
    3)如果hot-add前的memory等于3G,则不能hot-add任何memory。
    4)如果hot-add前的memory大于3G,最多能hot-add 原先memory的16倍,但不能超过 hardware limit(对VM version 7来说最多到255G,对VM version8来说1011G)。简单的来说就是 limit=min(old_memory * 16, vm_version_7 ? 255G:1011G)
  • 对于version 7的VM,hot-add CPU只能在core为1的情况下对socket进行增加。而VM version8可以在core不为1的情况下添加socket。
  • Hot-add 功能和VMware Fault Tolerance(FT)功能互斥,不能同时使用。
  • 开启hot-add必须在VM关闭的状态下进行,其实通过往vmx文件里写”mem.hotadd”和”vcpu.hotadd”两个属性一样内开启hot-add。
  • Hot-add成功与否依赖guest OS是否支持hot-add。Hot-add之后guest OS必须得能识别并且使用新设备,不然hot-add只不过是在VM层面上进行了硬件的调整,操作系统内部并不识别。
    Windows下的支持性可以参考 vSphere Memory Hot Add/CPU Hot Plug
    Linux下的支持性可以参考 CPU and RAM hotplug support by PSBM 5
  • Hot-add 功能只在vSphere Advanced、Enterprise、Enterprise Plus version 上才能被开启,也就是说只有交了钱才能享受到高端功能。
  • Hot-add memory之后可能会导致数秒的CPU 100%使用率。
  • 内核版本小于2.6.38的Linux有kernel bug,会导致有时候guest OS无法识别新加上的内存。根据 Hot-plugged memory cannot be initialized in a Linux VM 这篇kb中的描述来看,原内存越小越容易导致无法添加成功。在试验中验证了这点,并且发现原内存在hot-add前使用率越高,新内存就越无法成功被识别。要想workaround,别无他法,只能使用尽可能新的内核版本。
    比如在guest OS是SLSE 11 SP1(内核2.6.32)的情况下,512M内存无负载可以hot-add成功(但仍有接近128M内存无法被识别),但512M内存跑个程序消耗70%的内存就无法识别hot-add上的内存(哪怕直接hot-add到3G也是一兆都认不出)。
    而在 Ubuntu 11.04(内核2.6.38)中,空负载的情况下可以识别出全部hot-add上的内存,不会丢失128M;在负载较大的情况下仍然可以识别出大部分hot-add上的内存(仍然会丢失128M)。
  • 另有一篇文章也分析了hot-add 功能:VMware vSphere hot-add RAM and hot-plug CPU: Not so ‘hot,’ but still cool,有兴趣的同学也可以看看。
本文基于 署名 2.5 中国大陆 许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 hackerzhou 并包含 原文链接
发表评论

本文有 12 条评论

  1. Jason
    2012-08-23 19:04

    你的这个 love.hackerzhou.me页面很酷啊,为啥我保存到我本地电脑,再点开就有问题啊。。。请发到我邮箱,谢谢啊。。。。

  2. efly
    2012-06-10 11:53

    请问下博主,你的博客系统看上去和老赵的一样,不知道你们都是用的哪套系统呀?我也想搞一个~和和~~~

  3. btnic
    2012-06-06 13:19

    想请教下,你的电影仓储页面是怎么制作的啊

  4. barbon
    2012-05-24 23:35

    HackerZhou,你好,想问问你 你的虚拟主机是在哪里租用的呢?如果我搭建WordPress的个人博客 ,100M的空间,50M的Mysql,Windows2003的系统可以吗?

    我也是热爱互联网的新手,希望能帮下我 谢谢了噢~~

    • hackerzhou
      2012-05-29 09:31

      我的不是虚拟主机,是vps。你说的那些资源搭建个人的博客应该是够了。

  5. Eric Zhou
    2012-05-11 12:46

    哈哈哈我是来看评论的,好欢乐啊~

  6. BlahGeek
    2012-05-09 19:54

    HackerZhou,你好
    娱乐目的“抄袭”了您的Love页面,在此 nolove.blahgeek.com
    特此通知您,如果有任何不妥我会马上取消掉
    谢谢

    • hackerzhou
      2012-05-10 08:19

      哈哈,很灵啊~对了,你可不可以把Inspired by FlowerPower project.改成Inspired by love.hackerzhou.me & FlowerPower project? love.hackerzhou.me也是链接,这样对搜索引擎友好些。

      • BlahGeek
        2012-05-10 14:38

        ok~谢啦~

发表评论