Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
Les VMs Azure (VM) ont des paramètres réseau par défaut qui peuvent être davantage optimisés pour le débit du réseau. Cet article décrit comment optimiser le débit du réseau pour les VMs Windows et Linux, y compris les principales distributions telles qu'Ubuntu et Red Hat.
Machines virtuelles Windows
Si votre machine virtuelle Windows prend en charge la mise en réseau accélérée, activez cette fonctionnalité pour un débit optimal. Pour plus d’informations, consultez l’article Créer une machine virtuelle avec les performances réseau accélérées.
Pour toutes les autres machines virtuelles Windows, l’utilisation de la mise à l’échelle côté réception (RSS) peut permettre d’atteindre un débit maximal supérieur à celui d’une machine virtuelle sans RSS. La mise à l’échelle côté réception (RSS) peut être désactivée par défaut sur une machine virtuelle Windows. Pour vérifier si RSS est activé et l’activer, procédez comme suit :
Utilisez la commande PowerShell Get-NetAdapterRss pour déterminer si la mise à l’échelle côté réception (RSS) est activée sur une carte réseau. Dans l'exemple suivant, la sortie renvoyée par le RSS
Get-NetAdapterRssn'est pas activée.Name : Ethernet InterfaceDescription : Microsoft Hyper-V Network Adapter Enabled : FalsePour activer la mise à l’échelle côté réception (RSS), entrez la commande suivante :
Get-NetAdapter | % {Enable-NetAdapterRss -Name $_.Name}Cette commande n’a pas de sortie. La commande modifie les paramètres de la carte d'interface réseau (NIC). Elle provoque une perte de connectivité temporaire pendant environ une minute. Une boîte de dialogue de reconnexion s’affiche lors de la perte de connectivité. En général, la connectivité est rétablie après la troisième tentative.
Vérifiez que la mise à l’échelle côté réception (RSS) est activée sur la machine virtuelle en entrant de nouveau la commande
Get-NetAdapterRss. Si l’opération réussit, l’exemple de sortie suivant est retourné :Name : Ethernet InterfaceDescription : Microsoft Hyper-V Network Adapter Enabled : True
Machines virtuelles Linux
RSS est toujours activé par défaut dans une machine virtuelle Linux dans Azure. Les noyaux Linux publiés depuis octobre 2017 incluent de nouvelles options d’optimisation du réseau qui permettent à une machine virtuelle Linux d’obtenir un débit réseau plus élevé.
Activer la mise en réseau accélérée Azure pour un débit optimal
Azure fournit un réseau accéléré qui peut vraiment améliorer les performances du réseau, la latence et la gigue réseau. Il existe actuellement deux technologies différentes qui sont utilisées en fonction de la taille de la machine virtuelle, Mellanox , qui est largement disponible et MANA qui est développé par Microsoft.
Kernels optimisés pour Azure
Certaines distributions telles que Ubuntu (Canonical) et SUSE ont des noyaux optimisés Azure.
Utilisez la commande suivante pour vous assurer que vous utilisez le noyau Azure, qui contient généralement la chaîne de caractères azure dans le nom.
uname -r
#sample output on Azure kernel on a Ubuntu Linux VM
6.8.0-1017-azure
Autres distributions Linux
La plupart des distributions modernes ont beaucoup évolué grâce aux noyaux récents. Vérifiez la version actuelle du noyau pour vous assurer que vous exécutez un noyau plus récent que la version 4.19, ce qui inclut des améliorations importantes dans la mise en réseau, par exemple la prise en charge de BBR Congestion-Based Congestion Control.
Atteindre des vitesses de transfert cohérentes dans des machines virtuelles Linux dans Azure
Les machines virtuelles Linux rencontrent souvent des problèmes de performances réseau, en particulier lors du transfert de fichiers volumineux (1 Go à 50 Go) entre les régions, telles que l’Europe Ouest et la RÉGION USA Ouest. Ces problèmes sont causés par des versions antérieures du noyau ainsi que des configurations de noyau par défaut, des paramètres de mémoire tampon réseau par défaut et des algorithmes de contrôle de congestion par défaut, ce qui entraîne des paquets retardés, un débit limité et une utilisation inefficace des ressources.
Pour obtenir des performances réseau cohérentes, envisagez d’implémenter les optimisations suivantes qui sont éprouvées efficaces dans de nombreuses situations sur Azure :
-
Paramètres de mémoire tampon réseau : ajustez les paramètres du noyau pour optimiser les mémoires tampons de lecture et d’écriture. Ajoutez ces configurations à
/etc/sysctl.d/99-azure-network-buffers.conf:
net.ipv4.tcp_mem = 4096 87380 67108864
net.ipv4.udp_mem = 4096 87380 33554432
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.core.rmem_default = 33554432
net.core.wmem_default = 33554432
net.ipv4.udp_wmem_min = 16384
net.ipv4.udp_rmem_min = 16384
net.core.wmem_max = 134217728
net.core.rmem_max = 134217728
net.core.busy_poll = 50
net.core.busy_read = 50
-
Congestion-Based Contrôle de Congestion pour les noyaux 4.19 et versions ultérieures : l’activation du contrôle de Congestion avec Bande Passante Limite et Temps de Propagation Aller-Retour (BBR) peut souvent améliorer le débit. Ajoutez cette configuration à
/etc/sysctl.d/99-azure-congestion-control.conf:
net.ipv4.tcp_congestion_control = bbr
-
Paramètres TCP supplémentaires qui aideront généralement à améliorer la cohérence, le débit : ajoutez ces configurations à
/etc/sysctl.d/99-azure-network-extras.conf:
# For deployments where the Linux VM is BEHIND an Azure Load Balancer, timestamps MUST be set to 0
net.ipv4.tcp_timestamps = 1
# Reuse does require tcp_timestamps to be enabled. If tcp_timestamps are disabled because of load balancers, you should set reuse to 2.
net.ipv4.tcp_tw_reuse = 1
# Allowed local port range. This will increase the number of locally available ports (source ports)
net.ipv4.ip_local_port_range = 1024 65535
# Maximum number of packets taken from all interfaces in one polling cycle (NAPI poll). In one polling cycle interfaces which are # registered to polling are probed in a round-robin manner.
net.core.netdev_budget = 1000
# For high-performance environments, it's recommended to increase from the default 20KB to 65KB, in some extreme cases, for environments that support 100G+ networking, you can
# increase it to 1048576
net.core.optmem_max = 65535
# F-RTO is not recommended on wired networks.
net.ipv4.tcp_frto = 0
# Increase the number of incoming connections / number of connections backlog
net.core.somaxconn = 32768
net.core.netdev_max_backlog = 32768
net.core.dev_weight = 64
-
Discipline de file d’attente (qdisc) : le traitement des paquets dans Azure est amélioré en définissant le qdisc
fqpar défaut sur . Ajoutez cette configuration à/etc/sysctl.d/99-azure-qdisc.conf:
net.core.default_qdisc = fq
-
Optimisation des buffers NIC pour TX/RX : créez une règle udev dans
/etc/udev/rules.d/99-azure-ring-buffer.rulespour garantir leur application aux interfaces réseau :
# Setup Accelerated Interface ring buffers (Mellanox / Mana)
SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION=="add", RUN+="/usr/sbin/ethtool -G $env{INTERFACE} rx 1024 tx 1024"
# Setup Synthetic interface ring buffers (hv_netvsc)
SUBSYSTEM=="net", DRIVERS=="hv_netvsc*", ACTION=="add", RUN+="/usr/sbin/ethtool -G $env{INTERFACE} rx 1024 tx 1024"
- Créez une règle udev dans
/etc/udev/rules.d/99-azure-qdisc.rulesafin de vous assurer que le qdisc est appliqué aux interfaces réseau :
ACTION=="add|change", SUBSYSTEM=="net", KERNEL=="enP*", PROGRAM="/sbin/tc qdisc replace dev \$env{INTERFACE} root noqueue"
ACTION=="add|change", SUBSYSTEM=="net", KERNEL=="eth*", PROGRAM="/sbin/tc qdisc replace dev \$env{INTERFACE} root fq“
-
Planification de la demande d’interruption (IRQ) : selon votre charge de travail, vous pouvez empêcher le service irqbalance de planifier les IRQ sur certains nœuds. Lorsque vous utilisez IRQBalance, vous pouvez mettre à jour
/etc/default/irqbalancepour spécifier les processeurs qui ne doivent pas recevoir d'interruptions. Vous devez déterminer le masque qui exclura les processeurs nécessitant une exclusion.
Pour plus d’informations sur la façon de calculer le masque disponible ici.
L’exemple ci-dessous suppose que vous souhaitez exclure les processeurs 8-15
IRQBALANCE_BANNED_CPULIST=0000ff00
-
Règles UDEV : ajoutez des règles pour optimiser la longueur de la file d’attente et gérer efficacement les indicateurs d’appareil. Créez la règle suivante dans
/etc/udev/rules.d/99-azure-txqueue-len.rules:
SUBSYSTEM=="net", ACTION=="add|change", KERNEL=="eth*", ATTR{tx_queue_len}="10000“
Pour les paquets retardés deux fois
Quand il s’agit de la mise en réseau des performances Linux, nous utilisons SR-IOV avec les pilotes Mellanox (mlx4 ou mlx5), quelque chose spécifique à Azure est que cela crée deux interfaces une interface synthétique et une interface virtuelle. En savoir plus.
Remarques supplémentaires
Les administrateurs système peuvent implémenter ces solutions en modifiant des fichiers de configuration tels que /etc/sysctl.d/, /etc/modules-load.d/et /etc/udev/rules.d/. Vérifiez que les mises à jour du pilote de noyau et les configurations système sont examinées pour les régressions potentielles.
Pour plus d’informations sur les configurations et la résolution des problèmes spécifiques, consultez la documentation Azure sur les performances réseau.
Contenu connexe
- Déployer des machines virtuelles proches les unes des autres pour une faible latence avec des groupes de placement de proximité.
- Découvrir le résultat optimisé avec le test de bande passante/débit pour votre scénario.
- Découvrir comment la bande passante est allouée aux machines virtuelles.
- En savoir plus avec le FAQ sur les réseaux virtuels Azure.