VMware vSphere hot-add CPU/memory学习笔记
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可以抽象成三个步骤:
[*]打开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,下图拷贝自上述教程。
[*]在VM上触发hot-add。开启了VM的hot-add之后,在VM开机状态下进入”Edit Settings”会发现内存和CPU都是可配置的了。配置好之后vSphere会通知guest OS它的设备发生了改变,下图拷贝自上述教程。。
[*]让运行在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,有兴趣的同学也可以看看。
原文链接:http://hackerzhou.me/2012/05/vmware-hot-add-cpu-memory-feature-notes.html
页:
[1]