![虚拟化中的资源浪费](https://linux22.com/image/515956/%E8%99%9A%E6%8B%9F%E5%8C%96%E4%B8%AD%E7%9A%84%E8%B5%84%E6%BA%90%E6%B5%AA%E8%B4%B9.png)
我已经在 SO 上问过这个问题,但有人建议我在 SF 上问,所以我就在这里问。
https://stackoverflow.com/questions/3010753/wastage-of-resources-in-virtualization
我不确定这里是否是提问的合适地方。但我希望是。
今天早些时候寻找 VPS 时,我试图了解每个容器在后台如何工作。考虑到操作系统使用系统上大部分内存和电源的事实,在同一台机器上安装多个操作系统是否意味着更多的资源浪费。
例如,如果我在专用机器上运行 centOS,并且它正在运行 20 个后台操作系统级进程。然后我去安装一个虚拟化平台,并在同一系统中安装 5 个与主机操作系统完全相同的 centOS 虚拟机。这是否意味着这 20 个进程重复了 6 次?那么内部上下文切换发生在 120 个进程之间,而不是 20 个进程之间?
进一步说明:下面是我所思考的一个例子:我有一个主从配置,用于长时间运行、占用大量 CPU 和内存的进程,该进程可以分布到 4 台机器上。假设进程在这 4 台机器上运行,这些机器的 CPU 和 RAM 分别为 1 Gh 和 1 Gig,我每小时从集群中获得 400 个结果(假设一台机器有 100 个结果)。现在我有一台更大的机器(比如说 4Gh 和 4 Gig RAM),上面有 4 个虚拟主机,每个主机的 CPU 和 RAM 分别为 1 Gz 和 1 Gig。这种配置能否让我从这 4 个虚拟主机每小时获得相同的 100 个结果?
答案1
客户机中的大多数进程几乎一直处于睡眠状态。您可以使用 ps 命令检查有多少进程处于睡眠状态。在现代虚拟机管理程序中,虚拟机之间使用 Linux 上称为 KSM 的技术共享重复的内存页面。VMware 也有同样的东西。现在不确定 Hyper-V 是否如此。
总而言之,虚拟化确实会产生开销,但并不像您想象的那么多。
答案2
首先,“操作系统使用了系统上的大部分内存和电力”,这与事实相去甚远,实际上对于大多数服务器来说,这是非常遥远的事实。
但要回答你的问题,是的,这确实意味着所有这些进程都在进行,但这个想法是,在当今的多核 CPU 中,单个操作系统几乎无法使用所有可用资源,所以为什么不用它来虚拟化呢。如果你有一个旧的 CPU,那么它肯定会减慢一切速度,但大多数情况下都不会发生这种情况。
答案3
我看到您问题中有关操作系统占用空间的部分已经在 SO 上得到答复了,所以这里我只会讨论性能方面的考虑。
您将不会获得完全一样性能水平。但是,我无法肯定地告诉您性能是否会变好或变坏。
是的,即使使用当今最先进的硬件和硬件辅助虚拟化,仍然会产生一定量的开销。不过,这种开销正在一天天减少,对于特定用途来说可能已经可以忽略不计。
另一方面,按照您举的四台机器运行分布式进程的例子,还有更多变量可能会影响性能。例如,四个节点可能需要就它们正在做的事情进行大量通信。在这种情况下,如果四台机器在一台硬件机器上运行(使用某种虚拟机间网络通信),您可能会看到这些通信的速度和响应时间增加。这可以提高整个过程的性能。
再举一个例子,假设该过程对网络要求很高。如果有四台物理机器运行该过程,它们都将拥有自己的网络接口卡。但是,如果一台服务器上运行了四台虚拟机(假设该服务器只有一个 NIC),则虚拟机将需要共享一个 NIC。如果在两种情况下每个 NIC 的带宽相同,这会降低性能。
简而言之:这基本上取决于可用资源以及每种资源的使用量。