最近我和一些朋友讨论了一个关于CloudStack的问题:为什么现在CloudStack 4.3同时提供32位或64位系统虚拟机的选项。我提出了一个观点,并将其加入邮件列表的讨论中。我想很多人可能都会对此兴趣,所以把我的想法发表在这篇博文里。
对于后台来说,系统虚拟机提供的服务,如处理快照和图像模板,提供网络服务诸如负载平衡,通过代理控制台访问虚拟机等。这些服务向来都是由32位的软件提供的。这是因为32位的内存使用效率非常高,而且由于这些内存是可以横向扩展的,所以很容易实现系统的内存扩展。
但你只能选择一种 - 32位 or 64位 ?
我认为这取决于系统负载,(当然)你可能有不同的答案。某些虚拟机管理程序能在某种架构上更好地工作,某种特定的虚拟机管理程序可能会是一个因素;但忽略特定的虚拟机管理程序,让我们来检视一下你想要使用32位或者64位系统的原因。
32位:与64位相比,32位操作系统的内存使用效率非常高。 (例如,相同的信息通常在存储器中占用较少的空间)。但是32位系统存在最大内存限制。(我们知道32位系统最大寻址空间只有4GB) (是的,你可以使用32位内核的PAE来获得更多的可寻址内存,但是这样做会产生不少CPU开销 -——这会使得系统工作效率低下,因为这些内存都是虚拟化的)32位系统还会限制内核的最大可用内存。这实际上就是使用64位系统的动机——提升内核可用内存。由于虚拟机的功能之一是提供负载平衡,但为了给内核留下了宝贵的空间来做其他事情,conntrack内核模块具有连接的实际上限——大约250万个 。 CloudStack将HAProxy作为默认的虚拟机负载均衡软件,因此会使用到conntrack模块。当使用CloudStack的32位虚拟机实现负载平衡时,如果遇到很大网络数据流量,那么就会遇到内核内存上限的困扰。
64位:内存使用效率没有32位系统高,但是它支持配备更多的内存。实际上,在64位系统上,需要更多的内存来实现在32位系统上同样的功能。但是如果你的功能需要超过32位机器所能支持的功能上限,那么至少在64位系统上,你有条件可以选择这样做。
简而言之,如果你认为你可能需要利用到64位虚拟机提供的优势,即更大的内存,那你应该选择64位架构,但如果不需要那就应该默认使用32位系统虚拟机。
如果你想从dev@cloudstack.apache.org邮件列表中查看围绕此主题的原始讨论,请看这里:
http://markmail.org/message/i5kolazi5so52eon