我正在寻找好的经验法则来了解什么时候不虚拟一台机器。
例如,我知道一个完全CPU占用率接近100%的进程可能不是虚拟化的好主意,但是在运行一些可以利用CPU的东西时,大部分时间是一个“相当大的数量”(比如40或50%)?
另外一个例子:如果我虚拟化了1000台机器,即使它们只是轻微或者适度地使用,在一台仅有4个内核的主机上运行它也可能是不好的。
与主机资源相比,有人可以根据机器工作负载或访客机器数量总结虚拟化的提示吗?
我通常使用VirtualBox或VMWare虚拟化Windows主机,但我认为这是一个非常普遍的问题。
磁盘子系统。 这通常是最不可分享的资源。 记忆,当然,但这是显而易见的。
磁盘子系统限制在两个方面都有效。 如果一个系统使用大量磁盘I / O,则其他客人的速度变慢。 如果这个客人正在生产,它需要快速响应网页查询。 这可能是非常令人沮丧的,也是为什么不租用虚拟硬件的一个重要原因。 您可以通过使用专用磁盘来最小化此问题。
在“使用者”中仅使用512 MB内存将所有磁盘caching放在主机上。 客人之间并没有平等分配。
不要担心CPU IO。 通过这种方式,虚拟化非常高效,通常只在同一系统上运行多个进程。 我很less看到多CPU运行100%的Xeon系统。
编辑:错别字
我永远不会放在虚拟机中的东西:
任何使用无法虚拟化的特定硬件的东西:通常是graphics,相当多的硬件安全模块,任何具有自定义驱动程序的东西(例如专用networking驱动程序)。
系统有许可证问题。 一些物理CPU或内核的软件费用,无论您分配给虚拟机的数量有多less。 如果您拥有获得在32核心服务器上的虚拟机上运行的单个核心许可的软件,您将受到审计。
我不鼓励放入虚拟机的东西:
已经努力在商品硬件中使用所有资源的软件。 作为“大数据”工作(如hadoop)的一部分工作的机器通常devise为裸机上运行。
任何将被精心调整以利用资源的东西。 当你真正开始调整数据库时,争夺资源的虚拟机真的会在工作中产生一种威胁。
任何已经有很大的瓶颈的东西。 它本身已经不能很好地发挥,不可能和其他人一起打好。
有些东西对于放入虚拟机非常棒:
任何花费相当多的时间闲置的东西。 诸如邮件和DNS之类的工具主机在现代硬件上产生足够的负载以保证专用服务器的困难时间。
应用程序不能很好地(或容易)自行扩展。 遗留代码经常属于这个类别。 如果应用程序不会扩展来占用服务器,则使用大量的小型虚拟服务器。
项目/应用程序开始小但增长。 向虚拟机添加资源(以及迁移到更新,更大的硬件)相对于裸机启动要容易得多。
另外,我不确定是否夸大了在单个主机上安装大量虚拟机,但是如果您尝试提供较高的虚拟机:硬件比例,则可能需要考虑使用ESX,Xen和KVM。 你会比在Windows上使用VMware或virtualbox好得多。
虚拟化性能有两点。
在共同的瓶颈,谁是在同一个铁? 如果您位于虚拟环境中,则非常依赖托pipe合作伙伴对您的诚实。
我认为原始性能(尤其是交互性)的主要问题是虚拟化系统的哪些部分是模拟的。 这取决于设置。 磁盘和networking是典型的候选人。 作为一个经验法则,仿真使执行动作的性能“成本”加倍,所以任何硬件延迟时间都应该被计算两倍,任何吞吐量数量应该减半。
从anttiR很好的答案。
另外,时间关键系统。 我只是想出了Hyper-V一毛钱(虚拟机缓慢落后,所有现代操作系统在vm中都是这样做的,经常重新找回)对于我正在开发的一些时间关键的应用程序来说并不是很好。 此外,我将在那里使用“很多”的CPU,并计划在生产中为这个应用程序获得一台12核心的机器。
最终,任何高性能的负载都不应该被虚拟化。 虚拟化的性能优势并不是微不足道的。 在这里查看我的testing结果:
http://www.altechnative.net/2012/08/04/virtual-performance-part-1-vmware/
OTOH,如果你正在寻找整合大量空闲的机器,虚拟化是前进的方向。