Todos los productos
Search
Centro de documentos

Alibaba Cloud Linux:Método para configurar XPS en Alibaba Cloud Linux 3 e impactos de la configuración

Última actualización: Sep 06, 2026

Cuando crea instancias de Elastic Compute Service (ECS) con el sistema operativo Alibaba Cloud Linux 3 en la consola de ECS, Transmit Packet Steering (XPS) se habilita automáticamente. Si XPS está deshabilitado en una instancia de ECS con Alibaba Cloud Linux 3, siga los pasos descritos en este tema para configurarlo.

Descripción general de XPS

XPS es un mecanismo que selecciona automáticamente una cola de transmisión cuando se envían paquetes de datos por una interfaz de red (NIC) con varias colas. Este mecanismo crea asignaciones entre las colas de transmisión y los conjuntos de CPU. Cuando una CPU transmite paquetes de datos, el kernel selecciona automáticamente la cola de transmisión asignada a dicha CPU. El kernel registra la cola de transmisión elegida para el primer paquete de un flujo de datos y la utiliza para enviar los paquetes posteriores del mismo flujo. Esto reduce la sobrecarga computacional que implica elegir una cola de transmisión para cada paquete.

XPS ofrece las siguientes ventajas:

  • Reduce la competencia entre distintas CPU por la misma cola de transmisión. Esto disminuye los conflictos de bloqueo al transmitir datos y mejora la eficiencia de envío de los paquetes.

  • Crea asignaciones entre las colas de transmisión y las CPU que coinciden con las afinidades de las NIC virtio a las que están vinculadas dichas colas. Así se reduce la probabilidad de fallos de caché durante la transmisión de paquetes o por contención de bloqueos, lo que mejora el rendimiento de la red.

Configurar XPS

  1. Conéctese de forma remota a la instancia de ECS de destino.

    Para obtener más información, consulte Log in to a Linux instance using Workbench.

  2. Ejecute el siguiente comando para comprobar si XPS está configurado en la instancia de ECS. Asegúrese de que CONFIG_XPS esté habilitado en el kernel.

    En este ejemplo se utiliza la NIC eth0.

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

    Si el resultado del comando muestra solo ceros, como en la siguiente imagen, XPS está deshabilitado en la instancia de ECS. En ese caso, continúe con los pasos siguientes para configurar XPS.

    image.png

  3. Configure los parámetros de XPS para todas las NIC virtio según la cantidad de CPU y de colas de transmisión disponibles. Verifique que esta configuración cumpla con la política que usa el kernel para asignar CPU a cada cola de transmisión.

    1. Ejecute el siguiente comando para crear un archivo de configuración de XPS en el directorio actual. Por ejemplo, cree el archivo xps_config.py.

      vim xps_config.py
    2. Presione la tecla I para entrar al modo de inserción y copie el siguiente contenido en el archivo 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. Presione la tecla Esc e introduzca :wq para guardar y cerrar el archivo.

  4. Ejecute el siguiente comando para configurar XPS:

    sudo python3 xps_config.py
  5. (Opcional) Ejecute el siguiente comando para comprobar si la configuración de XPS se completó correctamente.

    En este ejemplo, 32 CPU de la instancia de ECS se asignan a 8 colas de transmisión de la NIC eth0.

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

    El siguiente resultado indica que XPS está configurado. La salida varía según la cantidad de CPU o de colas.

    image.png

Impactos

El objetivo de configurar XPS es mejorar el rendimiento de la red. Sin embargo, es posible que el rendimiento se vea afectado después de aplicar esta configuración. Si esto ocurre, ejecute el siguiente comando para borrar los parámetros de XPS. En este ejemplo se utiliza la NIC eth0.

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