Виртуальные функции SR-IOV

Виртуальная функция PCI Express (PCIe) (VF) — это упрощенная функция PCIe на сетевом адаптере, которая поддерживает виртуализацию однокорневого ввода-вывода (SR-IOV).

VF связан с физической функцией PCIe (PF) на сетевом адаптере и представляет виртуализированный экземпляр сетевого адаптера. Каждый VF имеет собственное пространство конфигурации PCI. Каждый VF также использует один или несколько физических ресурсов в сетевом адаптере, например порт внешней сети, с PF и другими виртуальными машинами.

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

VF предоставляется в качестве виртуального сетевого адаптера (сетевого адаптера VF) в операционной системе на виртуальной машине, которая выполняется в дочернем разделе Hyper-V. После того как VF будет связан с виртуальным портом (VPort) на сетевом коммутаторе сетевого адаптера SR-IOV, виртуальный драйвер PCI (VPCI), работающий на виртуальной машине, предоставляет сетевой адаптер VF. После предоставления доступа диспетчер PnP в гостевой операционной системе загружает драйвер мини-порта VF.

Примечание

Дочерний раздел Hyper-V также называется виртуальной машиной.

Драйвер мини-порта VF — это драйвер мини-порта NDIS, который устанавливается на виртуальной машине для управления VF. Любая операция, выполняемая драйвером мини-порта VF, не должна влиять на другие VF или PF на том же сетевом адаптере.

Драйвер мини-порта VF может работать так же, как любой драйвер устройства PCI. Он может считывать и записывать данные в пространстве конфигурации PCI VF. Однако доступ к виртуальному устройству PCI является привилегированной операцией и управляется драйвером мини-порта PF следующим образом:

  • Когда драйвер мини-порта VF вызывает NdisMGetBusData для чтения данных из пространства конфигурации PCI сетевого адаптера VF, стек виртуализации получает уведомление. Этот стек выполняется в операционной системе управления родительского раздела Hyper-V. Когда стек получает уведомление о запросе на чтение, он выдает запрос метода идентификатора объекта (OID) OID_SRIOV_READ_VF_CONFIG_SPACE драйверу мини-порта PF. Считываемые данные указываются в NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS структуре, содержащейся в запросе OID.

    Драйвер считывает запрошенные данные из пространства конфигурации PCI VF и возвращает данные, выполнив запрос OID. После завершения вызова NdisMGetBusData эти данные возвращаются в драйвер мини-порта VF.

  • Когда драйвер мини-порта VF вызывает NdisMSetBusData для записи данных в пространство конфигурации PCI сетевого адаптера VF, стек виртуализации получает уведомление о запросе на запись. Он отправляет запрос метода OID OID_SRIOV_WRITE_VF_CONFIG_SPACE драйверу мини-порта PF. Записываемые данные указываются в NDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS структуре, содержащейся в запросе OID.

    Драйвер записывает данные в пространство конфигурации PCI VF и возвращает состояние запроса по завершении запроса OID. Это состояние возвращается драйверу мини-порта VF после завершения вызова NdisMSetBusData .

Драйвер мини-порта VF также может взаимодействовать с драйвером мини-порта PF. Этот коммуникационный путь осуществляется через интерфейс backchannel. Дополнительные сведения см. в разделе Sr-IOV PF/VF Backchannel Communication.

Примечание Драйвер мини-порта VF должен знать, что он работает в виртуализированной среде, чтобы он смог взаимодействовать с драйвером мини-порта PF для определенных операций. Дополнительные сведения о том, как это делает драйвер, см. в разделе Инициализация драйвера минипорта VF.