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


Виртуальные порты без определенных временных параметров и VMQ

Коммутатор сетевого адаптера по умолчанию является компонентом сетевого адаптера, который поддерживает интерфейс виртуализации ввода-вывода с одним корнем (SR-IOV). Коммутатор всегда подключает виртуальный порт по умолчанию (VPort) к физической функции PCI Express (PCIe). Коммутатор может подключить к PF один или несколько неотложных виртуальных портов. Дополнительные сведения см. в разделе Создание виртуального порта.

Стек виртуализации выполняется в операционной системе управления родительского раздела Hyper-V. Этот стек создает VPorts путем выдачи запросов метода OID OID_NIC_SWITCH_CREATE_VPORT. Однако стек может создать больше виртуальных портов, чем количество активных виртуальных функций PCIe, для которых ресурсы были выделены с помощью запросов метода OID OID_NIC_SWITCH_ALLOCATE_VF.

Если в сетевом адаптере включен SR-IOV, необходимо отключить полную функциональность VMQ. Однако неотложные виртуальные порты, подключенные к PF и не подключенные к виртуальной машине, могут предоставлять те же функциональные возможности, что и интерфейс очереди виртуальных машин (VMQ). В следующих пунктах рассматривается, как виртуальные порты могут предоставлять пути данных с аппаратным ускорением для передачи пакетов, которые похожи на VMQ:

  • VMQ определяет целевую виртуальную машину с помощью фильтрации управления доступом к мультимедиа (MAC) в оборудовании. Это позволяет избежать затрат на определение целевой виртуальной машины в стеке виртуализации.

    Начиная с Windows Server 2012 стек виртуализации настраивает фильтры получения в VPort, отправляя запросы метода OID OID_RECEIVE_FILTER_SET_FILTER. Для этого запроса OID стек виртуализации передает структуру NDIS_RECEIVE_FILTER_PARAMETERS , которая указывает MAC-адрес и идентификатор виртуальной локальной сети , связанный с виртуальным сетевым адаптером. Как и в случае с VMQ, он может настроить несколько пар MAC-адресов и идентификаторов виртуальной локальной сети в VPort. Стек виртуализации также указывает целевой VPort, для которого будет задан фильтр получения.

    Сетевой адаптер SR-IOV выполняет аналогичную аппаратную фильтрацию на основе критериев фильтрации, указанных в запросе OID_RECEIVE_FILTER_SET_FILTER . При получении пакета в аппаратной очереди получения VPort драйвер мини-порта указывает исходный идентификатор VPort в данных ООБ NET_BUFFER_LIST структуры пакета. На основе идентификатора VPort стек виртуализации определяет целевую виртуальную машину и указывает пакеты для сетевого стека, работающего на виртуальной машине.

    Аналогичным образом стек виртуализации задает идентификатор целевого VPort в данных OOB структуры NET_BUFFER_LIST для передаваемого пакета. Когда драйвер обрабатывает запрос на отправку пакета, он помещает пакет в очередь аппаратной передачи указанного VPort.

    Идентификатор VPort можно получить из данных OOB пакета с помощью макроса NET_BUFFER_LIST_RECEIVE_FILTER_VPORT_ID .

    Дополнительные сведения об этом процессе см. в разделе Поток пакетов через виртуальный порт.

    Дополнительные сведения о требованиях к фильтрации получения для сетевого адаптера SR-IOV см. в разделе Определение возможностей фильтрации получения.

  • VMQ обеспечивает прерывание и параллелизм DPC.

    Начиная с NDIS 6.30 и Windows Server 2012, виртуальный порт, подключенный к PF, можно настроить для определенного сопоставления ЦП. Стек виртуализации настраивает параметры сопоставления ЦП и модерации прерываний для VPort с помощью запросов метода OID OID_NIC_SWITCH_CREATE_VPORT или OID_NIC_SWITCH_VPORT_PARAMETERS. Таким образом стек виртуализации настраивает параметры на основе прерываний, аналогичные VMQ, для прерываний и параллелизма DPC.

    Например, когда сетевой адаптер SR-IOV получает пакеты в VPort, настроенном для определенного сходства ЦП, адаптер создает прерывания на указанном ЦП. Драйвер мини-порта указывает полученные пакеты в NDIS и стек виртуализации для этого ЦП.

Драйвер минипорта PF объявляет свои возможности SR-IOV в контексте вызова MiniportInitializeEx. Драйвер инициализирует структуру NDIS_SRIOV_CAPABILITIES с ее возможностями и вызывает NdisMSetMiniportAttributes для регистрации ее возможностей. Дополнительные сведения см. в разделе Определение возможностей SR-IOV.

Следующие элементы структуры NDIS_NIC_SWITCH_CAPABILITIES влияют на способ выделения виртуальных портов:

  • MaxNumVPorts— указывает максимальное количество виртуальных портов, которые можно создать в сетевом адаптере.

  • MaxNumVFs, который указывает максимальное количество виртуальных машин, которые могут быть выделены в сетевом адаптере.

Начиная с версии NDIS 6.30, когда драйвер мини-порта инициализирует структуру NDIS_NIC_SWITCH_CAPABILITIES , он может задать флаг NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL в элементе NicSwitchCapabilities . Этот флаг указывает, что виртуальные порты без резервирования можно создать без резервирования из пула VPort на сетевом адаптере. Это позволяет создавать и назначать по мере необходимости доступные виртуальные порты, не являющиеся стандартными, и назначать их PF и выделенным виртуальным машинам. Если сетевой адаптер поддерживает интерфейс VMQ, для очередей получения виртуальных машин можно также использовать нефиксируемые виртуальные порты, назначенные PF.

Если установлен флаг NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL, создаются и назначаются PF и выделенным виртуальным машинам доступные не по умолчанию виртуальные порты. Максимальное число виртуальных портов, которые можно создать и назначить PF, совпадает с значением, которое драйвер сообщает в элементе MaxNumVPorts . Драйвер мини-порта должен зарезервировать один порт VPort, который будет использоваться в качестве порта VPort по умолчанию, назначенного PF. В результате максимальное количество виртуальных портов, которые могут быть назначены PF и использоваться для очередей получения виртуальных машин, равно (MaxNumVPorts – 1).

Примечание

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

Если флаг NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL не задан, создание и назначение неотступных виртуальных портов зарезервировано для назначения VF. Максимальное число дополнительных виртуальных портов, которые могут быть созданы и назначены PF и использованы для очередей получения виртуальных машин, — (MaxNumVPortsMaxNumVFs).

Дополнительные сведения о VMQ см. в разделе Очередь виртуальных машин (VMQ).