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


Реклама возможностей VMMQ

Драйверы минипорта регистрируют возможность виртуальных машин с несколькими очередями (VMMQ) сетевого адаптера во время инициализации адаптера мини-порта.

Примечание

Если сетевой адаптер поддерживает VMMQ, VPORT по умолчанию и по крайней мере один порт, отличный от используемого по умолчанию, должны поддерживать VMMQ.

Во время инициализации драйвер мини-порта должен проверить INF-ключевое слово *RssOnHostVPorts, чтобы определить, следует ли включить функцию VMMQ на сетевом адаптере. Дополнительные сведения об обработке ключевых слов RSS для VMMQ см. в статье Стандартизированные ключевые слова INF для VMMQ.

Кроме того, стек может активировать VMMQ на сетевом адаптере, только если адаптер минипорта поддерживает создание коммутатора сетевой карты. NDIS может создать переключатель сетевой карты на адаптере минипорта, если для параметра *SriovPreferred INF ключевое слово задано значение 1 или значение *SriovPreferred равно нулю, а для параметра *RssOrVmqPreference задано значение 1. Дополнительные сведения см. в разделах Стандартизированные ключевые слова INF для SR-IOV и Стандартизированные ключевые слова INF для VMQ.

Когда драйвер мини-порта настраивает параметры для коммутатора сетевой карты, он должен задать поля структуры NDIS_NIC_SWITCH_PARAMETERS следующим образом:

  1. Задайте для элемента Редакциязаголовказначение NDIS_NIC_SWITCH_PARAMETERS_REVISION_2.

  2. Задайте для NumQueuePairsForDefaultVPort количество пар очередей, назначенных VPort по умолчанию.

Водители минипорта объявляют возможность VMMQ сетевого адаптера через структуру NDIS_NIC_SWITCH_CAPABILITIES . Драйвер мини-порта должен инициализировать NDIS_NIC_SWITCH_CAPABILITIES следующим образом:

  1. Задайте для элемента Редакциязаголовказначение NDIS_NIC_SWITCH_CAPABILITIES_REVISION_3.

  2. Установите флаги NicSwitchCapabilities следующим образом:

    • Задайте для NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL значение , чтобы указать, что в PF можно создавать нестандартные виртуальные порты. Этот флаг должен быть установлен.

    • Задайте NDIS_NIC_SWITCH_CAPS_ASYMMETRIC_QUEUE_PAIRS_FOR_NONDEFAULT_VPORT_SUPPORTED, чтобы указать, что NDIS может выделять произвольное количество очередей VMMQ в каждом VPort. В противном случае все VPort, отличные от стандартных, имеют такое же максимальное число очередей VMMQ, что и в поле MaxNumQueuePairsPerNonDefaultVPort .

    • Задайте для NDIS_NIC_SWITCH_CAPS_RSS_ON_PF_VPORTS_SUPPORTED значение , чтобы указать, что сетевой адаптер поддерживает VMMQ для VPorts PF.

    Примечание

    Если какой-либо из следующих четырех флагов VPort PF не задан, драйверы более высокого уровня будут использовать значения, указанные при установке rss-параметров PF VPorts (включая VPort по умолчанию). Дополнительные сведения см. в разделе Включение, отключение и обновление VMMQ в VPort.

    • Присвойте NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_INDIRECTION_TABLE_SUPPORTED значение 1 , чтобы указать, что сетевой адаптер может поддерживать каждую таблицу косвенного обращения VPort PF. Этот флаг должен быть установлен.

    Примечание

    Следующие три флага NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_HASH_FUNCTION_SUPPORTED, NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_HASH_TYPE_SUPPORTED и NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_HASH_KEY_SUPPORTED должны быть равны нулю или все должны иметь значение 1. Если все они имеют нулевое значение, программное обеспечение пересчитает хэш.

    • Задайте для NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_HASH_FUNCTION_SUPPORTED значение , если сетевой адаптер поддерживает настройку другой хэш-функции для каждого порта PF VPort.

    • Задайте для NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_HASH_TYPE_SUPPORTED значение , если сетевой адаптер поддерживает настройку другого типа хэша для каждого порта PF VPort.

    • Задайте для NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_HASH_KEY_SUPPORTED значение , если сетевой адаптер поддерживает настройку другого хэш-секретного ключа для каждого порта PF VPort.

    • Задайте NDIS_NIC_SWITCH_CAPS_RSS_PER_PF_VPORT_INDIRECTION_TABLE_SIZE_RESTRICTED равным , если сетевой адаптер имеет ограничение на размер таблицы косвенного обращения для VPorts PF. Этот флаг заставляет издателя RSS-идентификатора использовать размер таблицы косвенного обращения VPort по каждому PF, равный количеству очередей VPort, округленных до следующей степени из двух. Этот флаг можно объединить с флагом NDIS_NIC_SWITCH_CAPS_ASYMMETRIC_QUEUE_PAIRS_FOR_NONDEFAULT_VPORT_SUPPORTED (разные VPortы PF могут иметь разное количество очередей). Этот флаг запрещает пользователям VMMQ выполнять детализированное управление очередью.

  3. Задайте параметр MaxNumVPorts , чтобы указать максимальное число виртуальных портов.

  4. Задайте параметр MaxNumQueuePairs , чтобы указать максимальное количество пар очередей, которые могут быть назначены всем виртуальным портам. Сюда входит VPort по умолчанию, подключенный к PF. Это число должно отражать фактические возможности оборудования.

  5. Задайте параметр MaxNumQueuePairsPerNonDefaultVPort , чтобы указать максимальное количество пар очередей, которые могут быть назначены нестандартной виртуальной порту.

  6. Задайте параметр MaxNumRssCapableNonDefaultPFVPorts , чтобы указать максимальное число нестандартных VPorts PF, которые могут поддерживать VMMQ.

  7. Задайте NumberOfIndirectionTableEntriesForDefaultVPort , чтобы указать количество записей таблицы косвенного обращения для VPort по умолчанию.

  8. Задайте NumberOfIndirectionTableEntriesPerNonDefaultPFVPort , чтобы указать количество записей таблицы косвенного обращения для каждого нестандартного VPort PF. Размер таблицы косвенного обращения должен быть одинаковым для всех нестандартных VPorts PF.

  9. Задайте параметр MaxNumQueuePairsForDefaultVPort , чтобы указать максимальное количество пар очередей, которые могут быть назначены VPort по умолчанию во время создания коммутатора сетевой карты.

После объявления возможностей VMMQ NDIS отвечает за обработку OID_GEN_RECEIVE_SCALE_CAPABILITIES OID при его вызове в VPort по умолчанию или в VPort, отличном от VPort по умолчанию. Когда драйвер мини-порта возвращает возможности RSS в структуре NDIS_RECEIVE_SCALE_CAPABILITIES , он не должен ограничивать поля NumberOfInterruptMessages какими-либо стандартными ключевыми словами RSS (например, *MaxRssProcessors). Драйвер верхнего уровня включит это число в алгоритм распределения ЦП узла.