Tous les produits
Search
Centre de documentation

Alibaba Cloud Linux:Méthode de configuration de XPS sur Alibaba Cloud Linux 3 et impacts de la configuration

Dernière mise à jour :Aug 31, 2026

Lorsque vous créez des instances Elastic Compute Service (ECS) exécutant le système d'exploitation Alibaba Cloud Linux 3 dans la console ECS, la fonctionnalité Transmit Packet Steering (XPS) est automatiquement activée pour ces instances. Si XPS est désactivée sur une instance ECS exécutant Alibaba Cloud Linux 3, vous pouvez suivre les procédures décrites dans cette rubrique pour configurer XPS sur l'instance.

Présentation de XPS

XPS est un mécanisme qui sélectionne automatiquement une file d'attente de transmission lors de l'envoi de paquets de données sur une interface réseau (NIC) multi-files d'attente. XPS établit des correspondances entre les files d'attente de transmission et les ensembles de CPU. Lorsqu'un CPU est utilisé pour transmettre des paquets de données, le noyau sélectionne automatiquement la file d'attente de transmission associée à ce CPU pour envoyer les paquets. Le noyau enregistre la file d'attente de transmission sélectionnée pour le premier paquet d'un flux de données et utilise cette même file pour transmettre les paquets suivants du flux. Ce mécanisme de transmission réduit la charge de calcul liée à la sélection d'une file d'attente de transmission pour chaque paquet.

XPS offre les avantages suivants :

  • XPS atténue la concurrence entre différents CPU pour l'accès à la même file d'attente de transmission. Cela réduit les conflits de verrouillage lors de l'utilisation de la file pour la transmission des données et améliore l'efficacité de la transmission des paquets.

  • XPS crée des mappages entre les files d'attente de transmission et les CPU qui sont cohérents avec les affinités des NIC virtio auxquelles ces files sont liées. Cela réduit le risque d'échecs de cache lors de la transmission des paquets et les échecs de cache provoqués par la contention des verrous, améliorant ainsi les performances de transmission réseau.

Configuration de XPS

  1. Connectez-vous à distance à l'instance ECS cible.

    Pour plus d'informations, consultez la rubrique Connexion à une instance Linux via Workbench.

  2. Exécutez la commande suivante pour vérifier si XPS est configurée sur l'instance ECS. Assurez-vous que l'option CONFIG_XPS est activée dans le noyau.

    Dans cet exemple, l'interface eth0 est utilisée.

    cat /sys/class/net/eth0/queues/tx-*/xps_cpus

    Si la sortie de la commande renvoie uniquement des zéros, comme illustré dans la figure ci-dessous, cela signifie que XPS est désactivée sur l'instance ECS. Dans ce cas, poursuivez les opérations suivantes pour configurer XPS.

    image.png

  3. Configurez les paramètres XPS pour toutes les interfaces NIC virtio en fonction du nombre de CPU et de files d'attente de transmission disponibles pour ces interfaces. Veillez à ce que les paramètres XPS respectent la politique utilisée par le noyau pour allouer les CPU à chaque file d'attente de transmission.

    1. Exécutez la commande suivante pour créer un fichier de configuration XPS dans le répertoire courant. Par exemple, créez le fichier xps_config.py.

      vim xps_config.py
    2. Appuyez sur la touche I pour passer en mode Insertion et copiez le contenu suivant dans le fichier xps_config.py :

      # encoding: utf-8
      # This implements the default configuration of kernel XPS.
      # Note: The configuration of this script only applies to virtio-net nics.
      
      import os
      import multiprocessing
      
      def setup_xps(dev):
          cpu_count = multiprocessing.cpu_count()
          txq_dir = "/sys/class/net/{0}/queues/".format(dev)
          queue_count = len([f for f in os.listdir(txq_dir) if f.startswith("tx-")])
          if queue_count <= 1:
              print("The number of txq: {0} <= 1, exit...".format(queue_count))
              return
      
          group, stragglers = divmod(cpu_count, queue_count)
          stragglers = 0 if group == 0 else stragglers
          group = max(group, 1)
          cpu = 0
          queue_final_bitmap = ""
      
          # We do not need to care about NUMA node information
          # So we must pay attention to the performance in multiple NUMA node scenes!!
          for i in range(queue_count):
              group_size = (group + 1) if i < stragglers else group
              queue_per_bitmap = 0
              for j in range(group_size):
                  cpu_bitmap = 1 << cpu
                  cpu += 1
                  queue_per_bitmap |= cpu_bitmap
                  cpu = 0 if cpu >= cpu_count else cpu
                  queue_final_bitmap = hex(queue_per_bitmap)[2:]
                  if "L" in queue_final_bitmap:
                          queue_final_bitmap = queue_final_bitmap.replace("L", "")
      
              result_bitmap = output_seg(queue_final_bitmap)
              eth_txq_path = "/sys/class/net/{0}/queues/tx-{1}/xps_cpus".format(dev, i)
              with open(eth_txq_path, "w") as fxps:
                  fxps.write(result_bitmap)
      
          print("{0}'s XPS configuration done.".format(dev))
      
      def output_seg(bitmap):
          result = ""
          count = 0
          for char in reversed(bitmap):
              if count % 8 == 0 and count != 0:
                  result = "," + result
              result = char + result
              count += 1
          return result
      
      def process_devs():
          eth_dir = "/sys/class/net/"
          eth_folders = [f for f in os.listdir(eth_dir) if os.path.isdir(os.path.join(eth_dir, f)) and f.startswith("eth")]
          for eth_folder in eth_folders:
              eth = eth_folder.split("/")[-1]
              setup_xps(eth)
      
      if __name__ == '__main__':
          process_devs()
    3. Appuyez sur la touche Esc puis saisissez :wq pour enregistrer et fermer le fichier.

  4. Exécutez la commande suivante pour configurer XPS :

    sudo python3 xps_config.py
  5. (Facultatif) Exécutez la commande suivante pour vérifier si la configuration de XPS est terminée.

    Dans cet exemple, 32 CPU de l'instance ECS sont mappés à 8 files d'attente de transmission sur l'interface eth0.

    cat /sys/class/net/eth0/queues/tx-*/xps_cpus

    La sortie de commande ci-dessous indique que XPS est configurée. Cette sortie varie en fonction du nombre de CPU ou de files d'attente.

    image.png

Impacts

L'objectif de la configuration de XPS est d'améliorer les performances réseau. Toutefois, il est possible que les performances réseau soient affectées après la configuration de XPS. Si XPS a un impact négatif sur vos performances réseau, exécutez la commande suivante pour effacer les paramètres XPS. Dans cet exemple, l'interface eth0 est utilisée.

sudo sh -c 'for txq in /sys/class/net/eth0/queues/tx-*; do echo 0 > $txq/xps_cpus; done'