Hyper-V 主机系统上的 CPU 处于空闲状态,尽管虚拟机已全速运行

Hyper-V 主机系统上的 CPU 处于空闲状态,尽管虚拟机已全速运行

我有一台运行 Windows 2008 64 位 Hyper-V 的服务器,具有 8GB RAM 和 Intel Xeon X3440 @ 2.53 Ghz,这为我在主机系统上的性能监视器中提供了 8 个逻辑核心。

我已经设置了三台虚拟机,全部运行 Windows 2008 32 位。

  1. 构建服务器,运行Team City
  2. 暂存服务器
  3. SQL Server,运行 SQL Server 2005

这三台机器运行非常缓慢,尽管主机系统几乎没有使用任何 CPU,通常总计低于 10%,但它们的 CPU 利用率却达到了 100%。

有人能给出一些关于最佳 CPU 分配设置的建议吗?我应该将每台服务器设置为两个核心,还是应该将这个数字增加到高于主机上的核心总数?

虚拟机预留和虚拟机限制设置多少比较好?

8GB 的​​物理 RAM 是否不足以支持 3 台虚拟机?

谢谢阅读。 :)

答案1

Bjørn,你担心的其实不是问题。就你的情况而言,你有一个虚拟机管理程序和四台虚拟机。其中一台虚拟机(管理操作系统)随虚拟机管理程序一起提供。然后你安装了三台虚拟机。

问问自己是否希望看到管理操作系统使用 CPU 时间。理想情况下,您希望它为您设置的三个虚拟机留出尽可能多的 CPU 时间。

这正是 Hyper-V 所做的,假设您已在所有 VM 中安装了“VM 集成组件”。这些组件通过安装适用于 VM 的驱动程序使 I/O 更加高效。然后,除非您的 VM 特别需要 I/O,否则您的管理操作系统将只是坐在那里等待您与其交互,并尝试使用尽可能少的资源。这是一件好事。

如果您想从虚拟机管理程序(而不是管理操作系统)查看实际 CPU 指标,请使用管理操作系统中的性能监视器并查找 Hyper-V 计数器。这些计数器将告诉您有关物理 CPU 使用率的信息。

Doug Luxem(他似乎对此很了解)今天在另一个帖子中很好地回答了这个问题。所以我就偷了他的文字:

首先,您必须记住,在 Hyper-V 中,“主机”称为父分区,它实际上就像具有特殊权限和角色的虚拟化客户机。与任何其他子/客户机一样,当您打开任务管理器时,您无法看到服务器上其他子进程的 CPU 使用率。

Ben Armstrong 在这里对此有一个很好的解释: http://blogs.msdn.com/virtual_pc_guy/archive/2008/02/28/hyper-v-virtual-machine-cpu-usage-and-task-manager.aspx

最后,查看虚拟机中的 RAM 使用情况。查看磁盘队列长度。这些将告诉您是否需要更多 RAM。不过,听起来您的虚拟机需要的总 CPU 比主机提供的要多。

答案2

我记不清这是怎么回事了,但看看下面的

我认为 Hyper-V 操作系统(如果您愿意的话,可以称为主机操作系统)只是一个外壳,无法正确显示这些计数器,至少在 perfmon 中无法显示。也可能它只显示主机操作系统本身正在使用的内容,而不显示虚拟机。

我使用 Hyper-V 已经有一段时间了,但我认为这是您所看到的基线。

祝你好运

答案3

好的,作为运行很多 VM 的人;)

  • 很明显,内存不是问题。您必须在主机端(即全部)和虚拟机端监视 IO,但如果您设法在虚拟机内分配 100% 的 CPU - 显然它不会跟踪磁盘,也不会使用分配的 CPU 插槽。并不是说更多内存没有用,但就像物理计算机一样 - 大量使用虚拟内存的虚拟机将无法充分利用所有分配的 CPU 周期。

  • 您说 CPU 处于 100%,但主机几乎没有膨胀。主机有多少个 CPU 核心?如果这是一个 4 核、超线程系统(暴露 8 个核心 - 抱歉,我完全是 AMD 人),使用 2 个核心的 VM 在 100% 时在主机上启动时只会显示为 - 25%。这已经假设您使用正确的方法来测量 CPU 利用率(正确的 Hyper-V 计数器,或 Hyper-V 管理器)。8 核主机上的 ONE CORE 服务器可以 - 物理上 - 仅使用 12.5% 的可用 CPU 功率。如果这导致 VM 从内部变得迟缓(可能是 - 取决于 VM 内部 CPU 优先级),那么 - 这就像一台普通计算机超载,但主机几乎看不到它。

因此,3 个虚拟机和一个 8 核 CPU 根本无法在每个主机上使用 1 个虚拟 CPU。基本上,您让大部分处理器能力无法用于虚拟机。如果您在每台服务器上都使用双核 - 假设服务器和进程从中获益 - 这将为您提供更好的利用率。话虽如此,您也可以使用更高的配置 - 取决于负载如何分配(当其他服务器繁忙时,SQL Server 是否做了很多工作?)。

举个例子 - 我的一台机器是 32 GB 的 AMD Opteron 系统(很快会是 64 GB)。我很少让 CPU 满载(只有 4 个核心) - 只是因为虽然我在其上运行十几台服务器,但大多数服务器不会同时处于繁忙状态,或者负载较轻的系统(例如多个 DNS)。我还有另一台运行 TFS(相当于 TeamCity 的 Ms)的服务器,如果我在那里进行一些操作 - 情况就会变得很糟糕。构建、单元测试、计划的虚拟机实验室测试、数据库单元测试 - 所有这些都会消耗大量的 CPU 能力。根据繁忙程度,这可能需要更多的 CPU 能力。如何购买主要取决于“有多少用户” - 2-3 个开发人员很少能让服务器在大多数时间保持繁忙。

所以,即使你为 TeamCity 等分配了多个核心 - 你会同时执行多个编译之类的操作吗?如果只有一名开发人员签入,他绝对不会同时签入两个项目 ;) 但请尝试一下 ;)

答案4

是一篇关于 Hyper-V 和 CPU 使用率的简短而精彩的文章。我将在文章中解释。

此外,让虚拟机发挥最佳性能的最佳做法是确保逻辑核心与物理核心之间有 1:1 的映射。因此,如果您有 3 个虚拟机和 8 个核心,则可以在所有虚拟机上安装 2 个逻辑 CPU,将 2 个留给虚拟机管理程序/主机。

将逻辑数字增加到高于物理数字通常是一个坏主意。

提高性能的另一种方法是设置静态 VHD 或直通磁盘。

8 GB 的 RAM 应该足以满足大多数三台虚拟机的需求,但这取决于运行的应用程序以及它们希望以最佳方式运行的程度。请查看每台虚拟机的文档。

希望这可以帮助。

相关内容