Todos os produtos
Search
Central de documentação

Alibaba Cloud Linux:Como configurar o XPS no Alibaba Cloud Linux 3 e impactos da configuração

Última atualização: Aug 31, 2026

Ao criar instâncias do Elastic Compute Service (ECS) com o sistema operacional Alibaba Cloud Linux 3 no console do ECS, o Transmit Packet Steering (XPS) é ativado automaticamente. Se o XPS estiver desativado em uma instância ECS com Alibaba Cloud Linux 3, siga as operações descritas neste tópico para configurá-lo.

Visão geral do XPS

O XPS é um mecanismo que seleciona automaticamente uma fila de transmissão ao enviar pacotes de dados por uma interface de rede (NIC) com múltiplas filas. Ele mapeia filas de transmissão para conjuntos de CPUs. Quando uma CPU transmite pacotes de dados, o kernel seleciona automaticamente a fila de transmissão mapeada para essa CPU. O kernel registra a fila escolhida para o primeiro pacote de um fluxo de dados e a reutiliza para os pacotes subsequentes do mesmo fluxo. Esse mecanismo reduz a sobrecarga computacional necessária para selecionar uma fila de transmissão para cada pacote.

O XPS oferece os seguintes benefícios:

  • Reduz a competição entre diferentes CPUs pela mesma fila de transmissão. Isso diminui conflitos de bloqueio durante o envio de dados e aumenta a eficiência na transmissão de pacotes.

  • Estabelece mapeamentos entre filas de transmissão e CPUs alinhados às afinidades das NICs virtio às quais as filas estão vinculadas. Essa ação diminui a probabilidade de cache misses durante a transmissão de pacotes e de cache misses causados por contenção de bloqueio, melhorando o desempenho da transmissão de rede.

Configurar o XPS

  1. Conecte-se remotamente à instância ECS de destino.

    Para mais informações, consulte Log in to a Linux instance using Workbench.

  2. Execute o comando a seguir para verificar se o XPS está configurado na instância ECS. Certifique-se de que a opção CONFIG_XPS esteja ativada no kernel.

    Este exemplo usa a NIC eth0.

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

    Se a saída do comando retornar apenas zeros, conforme ilustrado na figura a seguir, o XPS está desativado na instância ECS. Nesse caso, prossiga com as etapas seguintes para configurar o XPS.

    image.png

  3. Defina as configurações do XPS para todas as NICs virtio com base no número de CPUs e filas de transmissão disponíveis. Garanta que as definições do XPS estejam em conformidade com a política usada pelo kernel para alocar CPUs a cada fila de transmissão.

    1. Execute o comando a seguir para criar um arquivo de configuração do XPS no diretório atual. Por exemplo, crie o arquivo xps_config.py.

      vim xps_config.py
    2. Pressione a tecla I para insira no modo de inserção e copie o conteúdo a seguir para o arquivo 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. Pressione a tecla Esc e digite :wq para salve e fechar o arquivo.

  4. Execute o comando a seguir para aplicar a configuração do XPS:

    sudo python3 xps_config.py
  5. (Opcional) Execute o comando a seguir para validar se a configuração do XPS foi concluída.

    Neste cenário, 32 CPUs da instância ECS são mapeadas para 8 filas de transmissão na NIC eth0.

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

    A saída de comando a seguir indica que o XPS está configurado. O resultado pode variar dependendo do número de CPUs ou filas.

    image.png

Impactos

A configuração do XPS visa melhorar o desempenho da rede. No entanto, é possível que ocorram efeitos adversos após a ativação. Caso o XPS prejudique o desempenho da sua rede, execute o comando a seguir para limpar as configurações. Este exemplo usa a NIC eth0.

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