全部产品
Search
文档中心

Alibaba Cloud Linux:Metode untuk mengonfigurasi XPS pada Alibaba Cloud Linux 3 dan dampak dari konfigurasi tersebut

更新时间:Jun 28, 2025

Saat membuat Instance ECS yang menjalankan sistem operasi Alibaba Cloud Linux 3 di Konsol ECS, Transmit Packet Steering (XPS) secara otomatis diaktifkan. Jika XPS dinonaktifkan pada Instance ECS dengan sistem operasi Alibaba Cloud Linux 3, Anda dapat menggunakan langkah-langkah dalam topik ini untuk mengonfigurasi XPS.

Ikhtisar XPS

XPS adalah mekanisme yang secara otomatis memilih antrian transmisi saat paket data ditransmisikan melalui antarmuka jaringan multi-antrian (NIC). XPS memetakan antrian transmisi ke set CPU. Saat sebuah CPU digunakan untuk mentransmisikan paket data, kernel secara otomatis memilih antrian transmisi yang dipetakan ke CPU tersebut. Kernel mencatat antrian transmisi yang dipilih untuk paket pertama dari aliran data dan menggunakan antrian tersebut untuk mentransmisikan paket-paket berikutnya dalam aliran tersebut. Mekanisme ini mengurangi beban komputasi yang diperlukan untuk memilih antrian transmisi untuk setiap paket.

XPS memberikan manfaat sebagai berikut:

  • Mengurangi persaingan di antara CPU yang berbeda untuk antrian transmisi yang sama, mengurangi konflik kunci saat antrian digunakan untuk mentransmisikan data, serta meningkatkan efisiensi transmisi paket data.

  • Memetakan antrian transmisi ke CPU sesuai dengan afinitas NIC virtio tempat antrian tersebut terikat. Hal ini mengurangi kemungkinan cache miss selama transmisi paket dan meningkatkan performa jaringan.

Konfigurasi XPS

  1. Hubungkan ke Instance ECS tempat Anda ingin mengonfigurasi XPS.

    Untuk informasi lebih lanjut, lihat Hubungkan ke Instance Linux menggunakan kata sandi atau kunci.

  2. Jalankan perintah berikut untuk memeriksa apakah XPS telah dikonfigurasi untuk Instance ECS. Pastikan bahwa CONFIG_XPS diaktifkan di kernel.

    Dalam contoh ini, NIC eth0 digunakan.

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

    Jika keluaran perintah semuanya nol seperti yang ditunjukkan pada gambar berikut, XPS dinonaktifkan untuk Instance ECS. Lanjutkan ke langkah berikutnya untuk mengonfigurasi XPS.

    image.png

  3. Konfigurasikan pengaturan XPS untuk semua NIC virtio berdasarkan jumlah CPU dan antrian transmisi yang tersedia. Pastikan pengaturan XPS sesuai dengan kebijakan yang digunakan oleh kernel untuk mengalokasikan CPU ke setiap antrian transmisi.

    1. Jalankan perintah berikut untuk membuat file yang digunakan untuk mengonfigurasi pengaturan XPS di direktori saat ini. Sebagai contoh, buat file xps_config.py.

      vim xps_config.py
    2. Tekan tombol I untuk masuk ke mode Sisipkan dan salin konten berikut ke file xps_config.py:

      # encoding: utf-8
      # Ini mengimplementasikan konfigurasi default kernel XPS.
      # Catatan: Konfigurasi skrip ini hanya berlaku untuk NIC virtio-net.
      
      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("Jumlah txq: {0} <= 1, keluar...".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 = ""
      
          # Kami tidak perlu memperhatikan informasi node numa
          # Jadi kami harus memperhatikan performa dalam skenario multi-node numa!!
          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 = outputSeg(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 outputSeg(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. Tekan tombol Esc dan masukkan :wq untuk menyimpan dan menutup file.

  4. Jalankan perintah berikut untuk mengonfigurasi XPS:

    sudo python3 xps_config.py
  5. (Opsional) Jalankan perintah berikut untuk memeriksa apakah konfigurasi XPS telah selesai.

    Dalam contoh ini, 32 CPU pada Instance ECS dipetakan ke 8 antrian transmisi pada NIC eth0.

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

    Keluaran perintah berikut menunjukkan bahwa XPS telah dikonfigurasi. Keluaran bervariasi berdasarkan jumlah CPU atau antrian.

    image.png

Dampak dari konfigurasi

Tujuan dari mengonfigurasi XPS adalah untuk meningkatkan performa jaringan. Namun, performa jaringan mungkin terpengaruh setelah mengonfigurasi XPS. Jika XPS memengaruhi performa jaringan Anda, jalankan perintah berikut untuk menghapus pengaturan XPS. Dalam contoh ini, NIC eth0 digunakan.

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