Выделение виртуальных портов для VMMQ
NDIS выделяет VPorts, если возможность виртуальных машин с несколькими очередями (VMMQ) присутствует следующим образом.
NDIS создает на адаптере минипорта, не используемый по умолчанию, путем выполнения запроса OID OID_NIC_SWITCH_CREATE_VPORT . При создании VPort физической функции RSS (PF) NDIS инициализирует структуру NDIS_NIC_SWITCH_VPORT_PARAMETERS следующим образом:
NDIS задает для поля AttachedFunctionIdзначение NDIS_PF_FUNCTION_ID.
Если VMMQ включен, NDIS задает в поле NumQueuePairs количество пар очередей VMMQ, которые должны использоваться для этого VPort. Это число включает обработчик RSS по умолчанию для этого VPort. Гарантируется, что общее количество процессоров не превысит это число. Если VMMQ отключен, NDIS присваивает этому значению значение 1.
Если VMMQ включен, поле ProcessorAffinity определяет битовую маску потенциальных RSS-процессоров, которые адаптер мини-порта должен использовать для этого порта. Процессоры, которые сетевой стек использовал для заполнения записей таблицы косвенного обращения для VPort, являются подмножеством процессоров, которые идентифицирует эта битовая маска. Маской будет подмножество RSS-процессоров, возвращенных при вызове NdisGetRssProcessorInformation , а количество заданных битов может превышать количество RSS-очередей, запрошенных для VPort. Если VMMQ отключен, адаптер мини-порта должен использовать наименьший номер процессора, указанный в этой битовой маске, при настройке сходства очереди VPort.
NDIS задает флаг NDIS_NIC_SWITCH_VPORT_PARAMS_NUM_QUEUE_PAIRS_CHANGED, указывающий, что член NumQueuePairs был обновлен после создания VPort. Если VMMQ включен, можно обновить количество очередей для виртуальных портов по умолчанию и не по умолчанию.