Hyper-V线程优先级主机和来宾 – 它们如何对应?

是的,有趣的问题。

鉴于:Hyper-V虚拟机的主机。 HPCtypes的群集。

其上有许多虚拟机。 他们大多数时间不会耗尽CPU。 我们也在内部运行一个HPC风格的集群 – 代理拉取作业并处理它们。

有一个讲话可以在我们的Hyper-V机器上安装代理。 在这个时刻,这将给我们一个显着的性能提升 – 这将花费暑假,直到我们真的为计算集群增加硬件。

代理正在低优先级线程中运行所有计算。 对于正常的计算机来说,这意味着代理基本上最大限度地提高了CPU使用率,但并不真正干扰计算机操作本身 – 甚至可以在代理运行时观看DVD。

那么用Hyper-V怎么样? Hyper-V核心给虚拟CPU带来了什么“优先级”? 根分区比虚拟机具有更高的优先级吗? 我不希望代理干扰正在运行的虚拟机。

Hyper-V父分区或pipe理操作系统在pipe理程序中是特殊的。 如果它的虚拟处理器是可运行的,那么它们的优先级将比客户虚拟机大得多。 这是因为,在受支持的Hyper-Vconfiguration中,pipe理操作系统所做的唯一事情(统计上而言)是代表来宾虚拟机的I / O。 如果您在pipe理操作系统中安装了其他任何东西,那么您将代表访客虚拟机抢占工作。

我认为这已经发生在你身上,但是你可以用支持的方式来做到这一点。 创build一个与物理机器大小基本相同的虚拟机。 给它非常低的CPU和内存权重,并打开dynamic内存,这样,闲置时,它不占用太多的内存。 在该虚拟机中运行您的计算任务。 然后,Hyper-V将比其他任何客户都更喜欢做其他工作,但是会使用闲置的周期来代表您的计算任务。

首先,我将简单介绍一下:不build议在Hyper-V的父分区(主机操作系统)上运行任何其他工作负载。 它唯一的目的是为系统上的其他访客虚拟机提供pipe理和控制function,并为pipe理员提供系统上其他访客虚拟机的视图。 也就是说,你当然可以做到这一点,它可能会为你工作。 但微软官方的立场是避免在父分区上运行任何额外的工作负载。 现在,这是没有办法的:

快乐开心的ASCII架构图:

| Parent | Child | Child | Child | ---------------------------------- Hypervisor ---------------------------------- Physical Hardware 

父分区是您启动并从中创build并控制所有其他子虚拟机的操作系统,本身实际上只是与子分区处于同一级别的另一个逻辑分区。 所有这些分区并行运行。 唯一的区别是根分区由pipe理程序给予特殊的权限和责任。 您可以通过Hyper-Vpipe理控制台为子虚拟机分配CPU权重和预留量和限制,但是我不清楚这些映射到虚拟机pipe理程序中的线程优先级。

在您的根分区(或pipe理操作系统或主机操作系统)上,您将看到每个虚拟机的vmms.exe和1个vmwp.exe实例。 虚拟机pipe理服务(vmms.exe)负责为虚拟机pipe理程序提供WMI接口,以便您可以从MMCpipe理虚拟机。 当您在系统上创build新的虚拟机时,它还会创build一个新的vmwp.exe实例。 虚拟机工作进程(vmwp.exe)执行典型单片虚拟机pipe理程序将执行的虚拟化工作,例如pipe理虚拟机的状态。

在具有子分区执行大量I / O或特权操作的系统上,您会发现大部分CPU使用情况在父分区中都可见:您可以通过名称Vmwp.exe(每个子分区一个)来标识它们。 工作进程还包括负责远程pipe理虚拟化堆栈的组件。 – Russinovich等人,Windows Internals第6版。

但不幸的是,vmwp.exe并不是虚拟机内所有内容的全部内容,如果您正在考虑从pipe理操作系统中操纵这些进程的优先级,那么您可能会在未知的情况下不受支持的领土。 也有超级电话和开明的电话等,可能不会被收取一个vmwp.exe进程,但仍然可以被视为虚拟机的整体工作量的一部分。

除了可能出现在根分区而不是子分区中的关键Hyper-V组件,它可能会抢占其他子VM代码的执行,我将假设所有分区都等同于线程调度的pipe理程序。

不幸的是,微软并没有发表很多深度技术文章来回答这些问题。 如果不是Russinovich和他的朋友,我们甚至不会有Windows内部。 在Hyper-V中有一个简短的部分,我在写这篇文章的时候曾经咨询过,但是这个post并没有比这个更深入。