NIC Teaming
L’agrégat de cartes réseaux est disponible depuis plusieurs versions de Windows mais la méthode a quelque peu évolué depuis Windows Server 2016, notamment à cause de la façon dont la prise en charge des liens de débit supérieur au gigabit et à leur intégration dans l'OS et Hyper-V.
Il y a donc deux façons de réaliser cet agrégat de cartes réseaux pour permettre l'équilibrage de charge et la redondance :
Il est important de distinguer les scénarii supportant LBFO et ceux supportant SET :
Serveurs Physiques : Le NIC Teaming traditionnel à base de LBFO est toujours supporté par les environnements physiques sous Windows 2022/2025+. Cela signifie que si vous disposez d'un serveur dédié à SQL, à du partage de fichiers ou n'importe lequel des rôles (sauf Hyper-V), vous pouvez continuer à utiliser LBFO. Il est également possible de le mettre en place dans les clusters autonomes (pas pour les flux virutels par contre) mais uniquement pour les liens support des clusters.
Serveurs de virtualisation : Pour n'importe lequel des scenarii impliquant un switch virtuel pour Hyper-V, il est obligatoire d'utiliser SET. La mise en place d'un external vSwitch avec Hyper-V reposant sur un teaming LBFO ne sera pas possible. Pour résumer, tout ce qui implique un switch virtuel DOIT utiliser SET. Ce sera le cas dans les SDN, Azure Stck HCI, les machines virtuelles traditionnelles d'Hyper-V.
La mise en place par GUI est relativement simple en suivant les étapes ci-après :
Avec Powershell, la mise en place est relativement simple. Commencez par récupérer la liste des cartes réseau disponibles par
Get-NetAdapter
Créez le teaming par :
New-NetLbfoTeam -Name "Team01" -TeamMembers "Ethernet","Ethernet 2" -TeamingMode SwitchIndependent -LoadBalancingAlgorithm Dynamic
Pour récupérer les informations du teaming :
Get-NetLbfoTeam
Pour supprimer le teaming :
Remove-NetLbfoTeam -Name "Team01"
Le Switch Embedded Teaming ne se configure que par Powershell. Commencez par récupérer la liste des cartes réseau disponibles par
Get-NetAdapter
Ensuite créez l'équipe. Cette équipe peut être mise en place avec une seule carte et se voir ajouter des cartes complémentaires ultérieurement. Par exemple avec deux cartes réseau :
Net-VMSwitch -Name "VMSet" -NetAdapterName "Ethernet","Ethernet 1" -EnableEmbeddedTeaming $true -AllowManagementOs $true.
Vérifiez la configuration du SET
Get-VMSwitch [-Name "VMSet"]
Pour configurer la carte virtuelle
New-NetIPAddress -InterfaceAlias "VMSet" -IPAddress 192.168.1.10 -PrefixLength 24 -DefaultGateway 192.168.1.1
Set-DnsClientServerAddress -InterfaceAlias "VMSet" -ServerAddresses 8.8.8.8,9.9.9.9
Pour supprimer le SET
Remove-VMSwitch -Name "VMSet"
Si vous avez un SET auquel vous souhaitez refaire l'association de cartes, soit en ajoutant, soit en supprimant une ou plusieurs cartes réseau, faites :
Set-VMSwitch -Name "VMSet" -NetAdapterName "Ethernet","Ethernet 1","Ethernet 2"
Pour faire une transition avec le paragraphe suivant sur SR-IOV et RDMA, les bonnes pratiques de Microsoft conseillent d'utiliser SR-IOV sur un SET si la carte physique le supporte. Il n'est pas possible d'activer sa prise en charge après création. Il faut donc créer le switch SET avec la prise en charge SR-IOV :
New-VMSwitch -Name "VMSet" -NetAdapterName "Ethernet","Ethernet 2" -EnableEmbeddedTeaming $true -EnableIov $true. Pour que les VM prennent en charge SR-IOV, il ne faut pas oublier d'activer
l'option dans les paramètres de la VM > Carte Réseau > Accélération matérielle > Activer SR-IOV.
Vérifiez également que VMQ est bien activé sur les différentes cartes physiques :
Get-NetAdapterVmq. Si ce n'est pas le cas activez VMQ par
Set-NetAdapterVmq -Name "AdapterName" -Enabled $true
Vous trouverez des informations de configuration du mode de load balancing sur le Site officiel Microsoft. Ce qui en ressort est que le mode de création est par défaut Dynamic. Cela convient dans la très grosse majorité des usages et lorsque les débits des cartes réseau ne sont pas saturés sur 1 Gbps et 10 Gbps. Lorsque des débits supérieurs sont requis (comme 10 Gbps, 25 Gbps et plus), il est recommandé de basculer le mode d'équilibrage de la charge réseau sur Hyper-V Port. Changer ce mode peut s'effectuer à chaud avec
Set-VMSwitchTeam -Name "VMSet" -LoadBalancingAlgorithm [Dynamic / HyperVPort]. Et si vous voulez savoir dans quel état se trouve votre switch virtuel
Get-VMSwitch -Name <SwitchName> | fl *. Cela affichera
l'intégralité des propriétés.
SR-IOV (Single Root I/O Virtualization) et RDMA (Remote Direct Memory Access) sont deux technologies qui sont utilisées pour obtenir le maximum de performances des environnements de virtualisation.
Pour discuter avec le "monde réel", le "monde virtuel" doit passer par l'hyperviseur par un switch virtuel pour router le trafic vers la carte réseau physique. Cela consomme du CPU et de la latence car l'hyperviseur doit traiter chaque paquet.
Avec SR-IOV, une carte physique va se présenter au système comme étant plusieurs cartes réseau distinctes que l'on appelle Fonctions Virtuelles (VF). ainsi, chaque VM peut se voir attribuer une Virtual Function dédiée. La VM voit une vraie carte matérielle et contourne l'hyperviseur pour son trafic réseau en accédant directement à la carte réseau. Avec SR-IOV, la VM atteint des débits similaires à ceux d'une machine physique.
Le Remote Direct Memory Access permet de transférer des données dela mémoire d'un ordinateur directement vers la mémoire d'un autre ordinateur, sans impliquer les processeurs ni le système d'exploitation. Quand le serveur A envoie des données vers le serveur B, le CPU du serveur A envoie les données à travers la pile TCP/IP, en encapsulant les données. Sur le serveur B les données sont désencapsulées et copiées en mémoire. Cela génère un usage important des CPU et génère de la latence à cause des copies mémoire multiples.
Le RDMA permet à la carte réseau de lire directement dans la RAM du serveur A et d'écrire directement dans la RAM de l'ordinateur B. C'est le Zero-Copy Networking. RDMA permet d'avoir des latences très faibles, une utilisation CPU quasi nulle, libérant ce dernier pour d'autres calculs pendant que les transferts s'effectuent.
| Technologie | Objectif | Analogie |
| SR-IOV | Virtualisation : plusieurs VM accèdent directement au matériel | C'est comme une autoroute divisée en plusieurs voies pour chaque voiture utilise sa propre voie sans passer par le péage (hyperviseur). |
| RDMA | Transfert de données : déplacer des données entre serveurs sans utiliser le CPU | C'est comme téléporter des meubles directement depuis votre salon vers le salon du voisin sans passer par le hall et les escaliers, ni devoir porter les meubles. |
Sur Windows, si la carte est déjà installée :
# Pour SR-IOV
Get-NetAdapterSriov
# Pour RDMA
Get-NetAdapterRdma
Pour Linux il faut identifier la carte et vérifier ses capacités :
# Identifier la carte :
lspci | grep -i ethernet
# Vérifier les capacités (remplacez XX:XX.X par l'ID de votre carte) :
lspci -s XX:XX.X -vvv | grep SR-IOV
# Si vous voyez une ligne Capabilities: [xxx] Single Root I/O Virtualization (SR-IOV), la carte est compatible.
# Vérifier combien de VFs (Virtual Functions) sont supportées :
cat /sys/class/net/[votre_interface]/device/sriov_totalvfs
# Si cela renvoie un chiffre (ex: 64), la carte le supporte.
# Si le fichier n'existe pas, elle ne le supporte probablement pas.
Pour RDMA, il faut disposer des outils rdma-core ou infiniband-diags.
ibv_devinfo
# Si la commande n'est pas trouvée, installez le paquet libibverbs-utils ou infiniband-diags.
# Si rien ne s'affiche : Aucune carte RDMA n'est détectée ou les pilotes ne sont pas chargés.
# Si cela affiche des infos (hca_id, transport: InfiniBand/iWARP/RoCE) : Votre carte est compatible RDMA.
#Vérifier le lien RDMA qui listera les interfaces capables de faire du RDMA :
rdma link show
En résumé, pour tout savoir sur les cartes :
| Technologie | Linux | Windows |
| SR-IOV | lspci -v | grep -i sriov | Get-NetAdapterSriov |
| cat /sys/class/net/*/device/sriov_totalvfs | Device Manager > Properties | |
| RDMA | rdma link show | Get-NetAdapterRdma |
| ibstat | Device Manager > Drivers | |
| ethtool -i <interface> | grep roce |