Amélioration de la latence réseau pour les instances Amazon EC2 basées sur Linux - Amazon Elastic Compute Cloud

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Amélioration de la latence réseau pour les instances Amazon EC2 basées sur Linux

La latence réseau est le temps nécessaire à un paquet de données pour voyager de sa source à sa destination. Les applications qui envoient des données via le réseau ont besoin de réponses rapides pour offrir une expérience utilisateur positive. Une latence réseau élevée peut entraîner divers problèmes, tels que les suivants :

  • Temps de chargement lents des pages Web

  • Retard des flux vidéo

  • Difficulté d’accès aux ressources en ligne

Cette section décrit les mesures que vous pouvez prendre pour améliorer la latence réseau sur les instances Amazon EC2 qui s’exécutent sous Linux. Afin d’obtenir une latence optimale, procédez comme suit pour configurer les paramètres de votre instance, de votre noyau et de votre pilote ENA. Pour obtenir des conseils de configuration supplémentaires, consultez le guide des meilleures pratiques et d'optimisation des performances du pilote Linux ENA surGitHub.

Note

Les étapes et les paramètres peuvent varier légèrement en fonction de votre matériel réseau spécifique, de l’AMI à partir de laquelle vous avez lancé votre instance et du cas d’utilisation de votre application. Avant d’apporter des modifications, testez et surveillez minutieusement les performances de votre réseau pour vous assurer d’obtenir les résultats souhaités.

Réduction des sauts réseau

Chaque saut effectué par un paquet de données lorsqu’il passe d’un routeur à l’autre augmente la latence du réseau. En général, le trafic doit effectuer plusieurs sauts pour atteindre votre destination. Les deux méthodes permettant de réduire les sauts réseau de vos instances Amazon EC2 sont les suivantes :

  • Groupe de placement du cluster : lorsque vous spécifiez un groupe de placement du cluster, Amazon EC2 lance des instances qui sont à proximité les unes des autres, physiquement dans la même zone de disponibilité (AZ) avec une compression plus serrée. La proximité physique des instances du groupe leur permet de profiter d’une connectivité à haut débit, ce qui se traduit par une faible latence et un débit de flux unique élevé.

  • Hôte dédié : un hôte dédié est un serveur physique qui vous est dédié. Avec un hôte dédié, vous pouvez lancer vos instances pour qu’elles s’exécutent sur le même serveur physique. La communication entre les instances qui s’exécutent sur le même hôte dédié peut se faire sans sauts réseau supplémentaires.

Configuration du noyau Linux

La configuration du noyau Linux peut augmenter ou diminuer la latence du réseau. Pour atteindre vos objectifs d’optimisation de la latence, il est important d’affiner la configuration du noyau Linux en fonction des exigences spécifiques de votre charge de travail.

Il existe de nombreuses options de configuration du noyau Linux qui peuvent contribuer à réduire la latence du réseau. Les options les plus efficaces sont les suivantes.

  • Activer le mode d’interrogation occupé : le mode d’interrogation occupé réduit la latence sur le chemin de réception du réseau. Lorsque vous activez le mode d’interrogation occupé, le code de la couche de socket peut interroger directement la file d’attente de réception d’un périphérique réseau. L’inconvénient de l’interrogation intensive est l’utilisation accrue du CPU de l’hôte en raison de l’interrogation en boucle serrée des nouvelles données. Il existe deux paramètres globaux qui contrôlent le nombre de microsecondes d’attente des paquets pour toutes les interfaces.

     

    busy_read

    Un délai d’interrogation intensive de faible latence pour les lectures de sockets. Cela contrôle le nombre de microsecondes à attendre pour que la couche de socket lise les paquets dans la file d’attente du périphérique. Pour activer la fonction globalement avec la commande sysctl, l’organisation Linux Kernel recommande une valeur de 50 microsecondes. Pour plus d’informations, consultez busy_read dans le guide de l’utilisateur et de l’administrateur du noyau Linux.

    $ C:\> sudo sysctl -w net.core.busy_read=50
    busy_poll

    Un délai d’interrogation intensive de faible latence pour poll et select. Cela contrôle le nombre de microsecondes à attendre pour que les événements se produisent. La valeur recommandée se situe entre 50 et 100 microsecondes, en fonction du nombre de sockets que vous interrogez. Plus vous ajoutez de sockets, plus la valeur doit être élevée.

    $ C:\> sudo sysctl -w net.core.busy_poll=50
  • Configurer les états d’alimentation « C-states » du processeur : les états « C-states » contrôlent les niveaux de veille dans lesquels un cœur peut entrer lorsqu’il est inutilisé. Il se peut que vous vouliez contrôler les états « C-state » pour ajuster la latence de votre système par rapport aux performances. Dans les états C profonds, le CPU est essentiellement « en veille » et ne peut pas répondre aux demandes jusqu’à ce qu’il se réveille et repasse a l’état actif. La mise en veille de cœurs prend du temps. Même si un cœur en veille donne plus de marge pour qu’un autre cœur fonctionne à une fréquence plus élevée, ce cœur en veille prend du temps pour se remettre en route et fonctionner.

    Par exemple, si un cœur qui est assigné à la gestion des interruptions de paquets est en veille, il se peut que la prise en charge de cette interruption soit retardée. Vous pouvez configurer le système de manière à ce qu’il n’utilise pas d’états C profonds. Cependant, si cette configuration réduit la latence de réaction du processeur, elle réduit également la marge de manœuvre dont disposent les autres cœurs pour Turbo Boost.

    Pour réduire la latence de réaction du processeur, vous pouvez limiter les états C-states plus approfondis. Pour plus d'informations, consultez la section Performances élevées et faible latence en limitant les états C plus profonds dans le guide de l'utilisateur Amazon Linux 2.

Configuration du pilote ENA

Le pilote réseau ENA permet la communication entre une instance et un réseau. Le pilote traite les paquets réseau et les transmet à la pile réseau ou à la carte Nitro. Lorsqu’un paquet réseau arrive, la carte Nitro génère une interruption pour le CPU afin d’informer le logiciel d’un événement.

Interruption

Une interruption est un signal qu’un périphérique ou une application envoie au processeur. L’interruption indique au processeur qu’un événement s’est produit ou qu’une condition qui a été remplie nécessite une attention immédiate. Les interruptions peuvent gérer des tâches sensibles au temps, telles que la réception de données d’une interface réseau, la gestion d’événements matériels ou le traitement de demandes émanant d’autres périphériques.

Modération des interruptions

La modération des interruptions est une technique qui réduit le nombre d’interruptions générées par un périphérique en les regroupant ou en les retardant. L’objectif de la modération d’interruptions est d’améliorer les performances du système en réduisant la surcharge associée à la gestion d’un grand nombre d’interruptions. Un trop grand nombre d’interruptions augmente l’utilisation du CPU, ce qui a un impact négatif sur le débit, tandis qu’un nombre insuffisant d’interruptions augmente la latence.

Modération dynamique des interruptions

La modération dynamique des interruptions est une forme améliorée de modération des interruptions qui ajuste dynamiquement le taux d’interruption en fonction de la charge actuelle du système et des modèles de trafic. Elle vise à trouver un équilibre entre la réduction du nombre d’interruptions et le nombre de paquets par seconde, ou bande passante.

Note

La modération dynamique des interruptions est activée par défaut dans certaines AMI (mais peut être activée ou désactivée dans toutes les AMI).

Pour minimiser la latence réseau, il peut être nécessaire de désactiver la modération des interruptions Toutefois, cela peut également augmenter la charge de traitement des interruptions. Il est important de trouver le juste équilibre entre la réduction de la latence et la réduction de la charge. Les commandes ethtool peuvent vous aider à configurer la modération des interruptions. Par défaut, rx-usecs a la valeur de 20, et tx-usecs a la valeur 64.

Pour obtenir la configuration actuelle de modification des interruptions, utilisez la commande suivante.

$ C:\> ethtool -c interface | egrep "rx-usecs:|tx-usecs:|Adaptive RX" Adaptive RX: on TX: off rx-usecs: 20 tx-usecs: 64

Pour désactiver la modification des interruptions et la modération dynamique des interruptions, utilisez la commande suivante.

$ C:\> sudo ethtool -C interface adaptive-rx off rx-usecs 0 tx-usecs 0