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


Выделение виртуальных портов для VMMQ

NDIS выделяет VPorts, когда присутствует возможность виртуальных машин с несколькими очередями (VMMQ) следующим образом.

NDIS создает не стандартный VPort на минипорт-адаптере, выдав запрос OID OID_NIC_SWITCH_CREATE_VPORT. При создании физической функции (PF) RSS VPort, NDIS инициализирует структуру NDIS_NIC_SWITCH_VPORT_PARAMETERS следующим образом:

  • NDIS задает для поля AttachedFunctionId значение NDIS_PF_FUNCTION_ID.

  • Если VMMQ включен, NDIS задает значение в поле NumQueuePairs, равное количеству пар очередей VMMQ, которые следует использовать для этого VPort. Это число включает обработчик RSS по умолчанию для этого VPort. Гарантируется, что общее число процессоров не превысит это число. Если VMMQ отключен, NDIS задает это значение для одного.

  • Если VMMQ включен, поле ProcessorAffinity определяет битовую маску потенциальных RSS-процессоров, которые минипорт-адаптер должен использовать для этого VPort. Процессоры, которые сетевой стек использует для заполнения записей таблицы косвенного обращения для VPort, являются подмножеством процессоров, которые определяет эта битовая маска. Маска будет подмножеством процессоров RSS, возвращаемых из вызова NdisGetRssProcessorInformation, и число установленных битов может превышать количество очередей RSS, запрошенных для VPort. Если VMMQ отключен, минипорт-адаптер должен использовать наименьший номер процессора, указанный в этой битовой маске, при установке привязки очереди VPort.

  • NDIS задает флаг NDIS_NIC_SWITCH_VPORT_PARAMS_NUM_QUEUE_PAIRS_CHANGED, указывающий, что параметр NumQueuePairs был изменен после создания VPort. Если VMMQ включен, можно обновить количество очередей для стандартных и нестандартных виртуальных портов.