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