Последовательность инициализации виртуальной функции

Сетевой адаптер, поддерживающий виртуализацию одно корневых операций ввода-вывода (SR-IOV), должен поддерживать следующие аппаратные компоненты:

  • Одна физическая функция PCI Express (PCIe). PF всегда существует в сетевом адаптере и подключен к родительскому разделу Hyper-V.

    Дополнительные сведения об этом аппаратном компоненте см. в разделе Физические функции SR-IOV (PF).

  • Одна или несколько виртуальных функций PCIe (VF). Каждая виртуальная машина должна быть инициализирована и подключена к дочернему разделу Hyper-V, прежде чем сетевые компоненты гостевой операционной системы смогут отправлять или получать пакеты через VF.

    Дополнительные сведения об этом аппаратном компоненте см. в статье Виртуальные функции SR-IOV (VFs).

Драйвер PF miniport, работающий в операционной системе управления родительского раздела Hyper-V, инициализирует и выделяет ресурсы для виртуальной машины в сетевом адаптере SR-IOV. После того как NDIS вызывает функцию MiniportInitializeEx драйвера PF miniport, NDIS и стек виртуализации могут выдавать запросы идентификатора объекта (OID) к драйверу минипорта PF для выполнения следующих действий:

  • Создайте коммутатор сетевого адаптера. Коммутатор сетевой карты мостит сетевой трафик между VFs, PF и физическим сетевым портом.

    Дополнительные сведения см. в разделе Сетевые коммутаторы.

    Примечание Начиная с Windows Server 2012 интерфейс SR-IOV поддерживает только один коммутатор сетевого адаптера. Этот параметр называется коммутатором сетевой карты по умолчанию, на который ссылается идентификатор NDIS_DEFAULT_SWITCH_ID.

  • Запрос драйвера минипорта PF для инициализации и выделения ресурсов для виртуальной машины в сетевом адаптере.

    Дополнительные сведения см. в разделе Виртуальные функции SR-IOV .

  • Создайте виртуальный порт (VPort) на коммутаторе сетевого адаптера и подключите его к виртуальной машине.

    Дополнительные сведения см. в статье Виртуальные порты (VPorts).

На следующей схеме показаны шаги, связанные с инициализацией VF.

Пример последовательности инициализации vf, показывающий вызовы из стека виртуализации к ndis, а затем к драйверу pf miniport.

NDIS, стек виртуализации и драйвер мини-порта PF во время последовательности инициализации VF выполните следующие действия:

  1. NDIS считывает конфигурацию коммутатора по умолчанию из реестра и отправляет запрос метода OID OID_NIC_SWITCH_CREATE_SWITCH для подготовки коммутатора в сетевом адаптере. Параметры, передаваемые в этом запросе OID, содержат сведения о настройке важных аппаратных ресурсов, таких как VFs и VPorts. Он также содержит сведения о том, как распределить ресурсы между неотложными виртуальными портами и VPort по умолчанию, подключенными к PF.

    После успешного завершения OID драйвером минипорта PF коммутатор сетевой карты готов к использованию для создания виртуальных портов и выделения виртуальных файлов.

    Дополнительные сведения о создании коммутатора сетевого адаптера см. в разделе Создание коммутатора сетевого адаптера.

  2. VF рассматривается как механизм разгрузки для сетевого адаптера виртуальной машины. Этот адаптер предоставляется в гостевой операционной системе, работающей в дочернем разделе Hyper-V. По умолчанию сетевые компоненты в гостевой операционной системе отправляют и получают пакеты по программному пути искусственных данных. Однако если дочерний раздел включен для разгрузки VF, стек виртуализации отправляет запросы OID к драйверу мини-порта PF для выделения ресурсов и инициализации виртуальной машины. После подключения VF к дочерней секции и VPort на коммутаторе сетевого адаптера сетевые компоненты отправляют и получают пакеты по пути данных VF. Дополнительные сведения об этих путях данных см. в разделе Пути к данным SR-IOV.

    Если для дочернего раздела Hyper-V включена разгрузка VF, стек виртуализации отправляет запрос метода OID OID_NIC_SWITCH_ALLOCATE_VF драйверу минипорта PF. Параметры, передаваемые в этом запросе OID, включают идентификатор коммутатора сетевого адаптера, для которого выделен виртуальныйF. Другие параметры включают идентификаторы дочерней секции, к которой будет присоединен виртуальныйf.

    Драйвер мини-порта PF выделяет необходимые аппаратные и программные ресурсы для VF. Драйвер минипорта PF также определяет идентификатор инициатора запроса PCIe (RID) для VF путем вызова NdisMGetVirtualFunctionLocation. RID используется для DMA и переназначение прерываний, когда запросы и прерывания DMA создаются VF.

    Rid вместе с идентификатором VF возвращаются драйвером мини-порта PF при успешном выполнении запроса OID_NIC_SWITCH_ALLOCATE_VF .

    Дополнительные сведения о выделении ресурсов для виртуальной функции см. в разделе Выделение ресурсов для виртуальной функции.

  3. Стек виртуализации создает VPort на коммутаторе сетевой карты, отправляя запрос метода OID OID_NIC_SWITCH_CREATE_VPORT драйверу минипорта PF. Параметры, передаваемые в этом запросе OID, включают идентификатор коммутатора сетевого адаптера, на котором должен быть создан VPort. Другие параметры включают идентификатор VF, к которому будет подключен виртуальный порт.

    Примечание VPort по умолчанию на коммутаторе сетевой карты всегда существует и подключен к PF. К VF можно создать и подключить только один неразрешимый VPort.

    Перед тем как NDIS перенаправит запрос OID драйверу минипорта PF, он выделяет действительный идентификатор VPort, который является уникальным для сетевого адаптера.

    Когда драйвер минипорта PF обрабатывает запрос OID, он выделяет аппаратные ресурсы, необходимые для VPort, и сохраняет идентификатор для VPort. Этот идентификатор используется в последующих запросах OID и вызовах функций SR-IOV.

    Дополнительные сведения о создании VPort см. в разделе Создание виртуального порта.

  4. Дочерний раздел Hyper-V может быть запущен задолго до выделения VF и VPort. В течение этого времени сетевые компоненты в гостевой операционной системе отправляют и получают пакеты по пути искусственных данных. Это включает трафик пакетов через VPort по умолчанию, подключенный к PF. Для моста трафика к дочерней секции стек виртуализации настраивает VPort по умолчанию с фильтрами управления доступом к мультимедиа (MAC) и виртуальной локальной сети (VLAN) для сетевого адаптера виртуальной машины дочернего раздела.

    После выделения ресурсов для VF и VPort стек виртуализации отправляет запрос метода OID OID_RECEIVE_FILTER_MOVE_FILTER драйверу мини-порта PF. Этот запрос OID перемещает фильтры MAC и VLAN для сетевого адаптера виртуальной машины из VPort по умолчанию в VPort, подключенный к VF. Это приводит к тому, что пакеты, соответствующие этим фильтрам, будут перенаправляться в VF VPort по пути к данным VF.

    Примечание Существующие фильтры получения можно переместить из VPort по умолчанию в VF VPort с помощью OID_RECEIVE_FILTER_MOVE_FILTER. Кроме того, с помощью OID_RECEIVE_FILTER_SET_FILTER можно задать новые фильтры в VF VF VPort.

После успешного создания VF и VPort и установки фильтров MAC в VPort стек виртуализации уведомляет поставщика виртуальных служб (VPCI) виртуальной службы (VPCI). Этот VSP выполняется в операционной системе управления родительского раздела Hyper-V. Уведомление информирует VPCI VSP о том, что виртуальная машина, которая была успешно выделена и присоединена к дочерней секции. VPCI VSP отправляет сообщения через шину виртуальной машины (VMBus) клиенту виртуальной службы VPCI (VSC), который выполняется в гостевой операционной системе дочернего раздела. VPCI VSC — это драйвер шины, который предоставляет устройство PCI для сетевого адаптера VF.

После предоставления доступа к сетевому адаптеру VF подсистема PnP, работающая в гостевой операционной системе, обнаруживает адаптер и загружает драйвер VF miniport. Этот драйвер регистрируется с помощью NDIS. После инициализации драйвера VF miniport и настройки соответствующих фильтров пакетов на сетевом адаптере VF путь к данным VF будет полностью в рабочем состоянии. В результате трафик пакетов в гостевой операционной системе переключился на этот путь данных из искусственного пути к данным.