Ports virtuels non par défaut et VMQ
Le commutateur de carte réseau par défaut est un composant d’une carte réseau qui prend en charge l’interface de virtualisation d’E/S racine unique (SR-IOV). Le commutateur attache toujours le port virtuel par défaut (VPort) à la fonction physique (PF) PCI Express (PCIe). Le commutateur peut attacher un ou plusieurs VPorts non par défaut au pf. Pour plus d’informations, consultez Création d’un port virtuel.
La pile de virtualisation s’exécute dans le système d’exploitation de gestion de la partition parente Hyper-V. Cette pile crée des VPorts en émettant des demandes de méthode d’identificateur d’objet (OID) de OID_NIC_SWITCH_CREATE_VPORT. Toutefois, la pile peut créer plus de VPorts que le nombre de fonctions virtuelles PCIe actives pour lesquelles des ressources ont été allouées via des demandes de méthode OID de OID_NIC_SWITCH_ALLOCATE_VF.
Si SR-IOV est activé sur une carte réseau, la fonctionnalité VMQ complète doit être désactivée. Toutefois, les VPorts non définis par défaut qui sont attachés au pf et qui ne sont pas attachés à un VF peuvent fournir les mêmes fonctionnalités que l’interface de file d’attente de machines virtuelles (VMQ). Les points suivants expliquent comment VPorts peut fournir des chemins de données avec accélération matérielle pour le transfert de paquets similaire à VMQ :
VMQ détermine la machine virtuelle cible par le filtrage mac (Media Access Control) dans le matériel. Cela évite la surcharge liée à la détermination de la machine virtuelle cible dans la pile de virtualisation.
À compter de Windows Server 2012, la pile de virtualisation configure les filtres de réception sur le VPort en émettant des demandes de méthode OID de OID_RECEIVE_FILTER_SET_FILTER. Pour cette demande OID, la pile de virtualisation transmet une structure de NDIS_RECEIVE_FILTER_PARAMETERS qui spécifie l’adresse MAC et l’identificateur VLAN (Virtual LAN) associés à la carte réseau virtuelle. À l’instar de VMQ, il peut configurer plusieurs paires d’adresses MAC et d’ID de réseau local virtuel sur le VPort. La pile de virtualisation spécifie également le VPort cible sur lequel le filtre de réception sera défini.
La carte réseau SR-IOV effectue un filtrage matériel similaire en fonction des critères de filtrage spécifiés par le biais de la demande de OID_RECEIVE_FILTER_SET_FILTER . Lorsqu’un paquet est reçu sur la file d’attente de réception matérielle d’un VPort, le pilote miniport spécifie l’identificateur VPort source dans les données OOB (out-of-band) d’une structure NET_BUFFER_LIST pour le paquet. En fonction de l’identificateur VPort, la pile de virtualisation détermine la machine virtuelle cible et indique les paquets à la pile réseau qui s’exécute dans la machine virtuelle.
De même, la pile de virtualisation spécifie l’identificateur VPort cible dans les données OOB d’une structure NET_BUFFER_LIST pour un paquet de transmission. Lorsque le pilote gère la demande d’envoi du paquet, il place le paquet dans la file d’attente de transmission matérielle du VPort spécifié.
L’identificateur VPort peut être obtenu à partir des données OOB du paquet à l’aide de la macro NET_BUFFER_LIST_RECEIVE_FILTER_VPORT_ID .
Pour plus d’informations sur ce processus, consultez Flux de paquets sur un port virtuel.
Pour plus d’informations sur les exigences de filtrage de réception pour une carte réseau SR-IOV, consultez Détermination des fonctionnalités de filtrage de réception.
VMQ fournit l’interruption et la concurrence DPC.
À compter de NDIS 6.30 et Windows Server 2012, un VPort attaché au pf peut être configuré pour avoir une affinité processeur spécifique. La pile de virtualisation configure les paramètres d’affinité processeur et de modération d’interruption pour un VPort à l’aide de requêtes de méthode OID de OID_NIC_SWITCH_CREATE_VPORT ou de OID_NIC_SWITCH_VPORT_PARAMETERS. En procédant ainsi, la pile de virtualisation configure des paramètres basés sur des interruptions similaires à VMQ pour l’interruption et la concurrence DPC.
Par exemple, lorsque la carte réseau SR-IOV reçoit des paquets sur un VPort configuré pour avoir une affinité processeur spécifique, l’adaptateur génère les interruptions sur le processeur spécifié. Le pilote miniport indique les paquets reçus à NDIS et la pile de virtualisation pour ce processeur.
Le pilote pf miniport publie ses fonctionnalités SR-IOV dans le contexte de l’appel à MiniportInitializeEx. Le pilote initialise une structure NDIS_SRIOV_CAPABILITIES avec ses fonctionnalités et appelle NdisMSetMiniportAttributes pour inscrire ses fonctionnalités. Pour plus d’informations, consultez Détermination des fonctionnalités SR-IOV.
Les membres suivants de la structure NDIS_NIC_SWITCH_CAPABILITIES affectent la façon dont les VPorts sont alloués :
MaxNumVPorts, qui spécifie le nombre maximal de VPorts pouvant être créés sur la carte réseau.
MaxNumVFs, qui spécifie le nombre maximal de machines virtuelles pouvant être allouées sur la carte réseau.
À compter de NDIS 6.30, lorsque le pilote miniport initialise la structure NDIS_NIC_SWITCH_CAPABILITIES , il peut définir l’indicateur NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL dans le membre NicSwitchCapabilities . Cet indicateur spécifie que les VPorts non par défaut peuvent être créés de manière non réservée à partir du pool VPort sur la carte réseau. Cela permet de créer et d’affecter des VPorts non par défaut disponibles en fonction des besoins aux machines virtuelles pf et allouées. Si la carte réseau prend en charge l’interface VMQ, les VPorts non définis par défaut qui sont affectés au pf peuvent également être utilisés pour les files d’attente de réception de machine virtuelle.
Si l’indicateur NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL est défini, les VPorts non par défaut disponibles sont créés et affectés aux machines virtuelles pf et allouées. Le nombre maximal de VPorts pouvant être créés et affectés au pf est la même valeur que celle que le pilote signale dans le membre MaxNumVPorts . Le pilote miniport doit réserver un VPort à utiliser comme VPort par défaut affecté au pf. Par conséquent, le nombre maximal de VPorts non par défaut qui peuvent être affectés au pf et utilisés pour les files d’attente de réception de machine virtuelle est (MaxNumVPorts – 1).
Notes
Si cet indicateur est défini, la création et l’affectation de VPorts non par défaut ne sont pas réservées à l’allocation VF. Par conséquent, des situations peuvent se produire où un VF ne peut pas se voir attribuer un VPort si le pool a été épuisé des VPorts disponibles.
Si l’indicateur de NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL n’est pas défini, la création et l’affectation de VPorts non par défaut sont réservées à l’affectation VF. Le nombre maximal de VPorts non par défaut supplémentaires qui peuvent être créés et affectés au pf et utilisés pour les files d’attente de réception de machine virtuelle est (MaxNumVPorts–MaxNumVFs).
Pour plus d’informations sur VMQ, consultez File d’attente de machines virtuelles (VMQ).