Поделиться через


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

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

VF связан с физической функцией PCIe (PF) на сетевом адаптере и представляет виртуализированный экземпляр сетевого адаптера. Каждая виртуальная машина имеет собственное пространство конфигурации PCI. Каждая виртуальная машина также использует один или несколько физических ресурсов сетевого адаптера, например внешний сетевой порт, с 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. Затем эти данные возвращаются в драйвер минипорта VF, когда завершится вызов NdisMGetBusData.

  • Когда драйвер мини-порта 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.