VMQ 接收队列

虚拟机队列 (VMQ) 服务提供商分配 VMQ 接收队列。 如果数据包通过了在队列上设置的筛选器测试,则网络适配器硬件会将传入的网络数据包分配给队列。

VMQ 接收队列具有以下属性:

  • 对关联的网络适配器唯一的队列标识符。

  • 中断的处理器相关性。

  • 在队列上设置的筛选器。

  • 接收分配给队列的缓冲区。

还有一个具有以下属性的默认队列:

  • 默认队列始终存在。 必须分配其他队列。

  • 默认队列接收未通过其他队列的筛选器测试的数据包。

微型端口驱动程序为与 VMQ 关联的接收缓冲区分配共享内存。 根据 Windows Server 版本,微型端口驱动程序必须遵循以下部分所述的缓冲区分配准则:

VMQ 共享内存要求旨在解决虚拟机 (VM) 的潜在安全问题。 有关 VMQ 安全问题的详细信息,请参阅 NDIS 虚拟机 (VM) 共享内存的安全问题

(Windows Server 2008 R2) 为 VMQ 接收缓冲区分配共享内存

对于 Windows Server 2008 R2 中的 NDIS 6.20,如果微型端口驱动程序支持将数据包数据拆分为单独的观察缓冲区,则可以按以下方式分配共享内存:

  • 微型端口驱动程序从 Hyper-V 父分区中运行的管理操作系统的地址空间中为预查头缓冲区分配共享内存。 预检查缓冲区是管理操作系统检查的数据包的一部分。

  • 微型端口驱动程序从 Hyper-V 子分区中运行的来宾操作系统的地址空间中为后视后缓冲区分配共享内存。 后检查缓冲区是来宾操作系统检查的数据包的一部分。

    注意 Hyper-V 子分区也称为 VM。

下图显示了队列、管理操作系统和来宾操作系统中的共享内存。

说明队列中的共享内存、管理操作系统分区和 VM 分区的示意图。

在图中,队列中的每个数据包都显示了从管理操作系统地址空间分配的标头信息,以及从来宾操作系统地址空间分配的数据。

为 VMQ 接收缓冲区分配共享内存 (Windows Server 2012及更高版本)

从 NDIS 6.30 开始,不再支持将 VMQ 接收缓冲区拆分为单独的观察缓冲区。 微型端口驱动程序必须从管理操作系统的地址空间为每个接收缓冲区分配内存。