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
Hubungkan ke Instance ECS tempat Anda ingin mengonfigurasi XPS.
Untuk informasi lebih lanjut, lihat Hubungkan ke Instance Linux menggunakan kata sandi atau kunci.
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_cpusJika keluaran perintah semuanya nol seperti yang ditunjukkan pada gambar berikut, XPS dinonaktifkan untuk Instance ECS. Lanjutkan ke langkah berikutnya untuk mengonfigurasi XPS.

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.
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.pyTekan tombol
Iuntuk masuk ke mode Sisipkan dan salin konten berikut ke filexps_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()Tekan tombol
Escdan masukkan:wquntuk menyimpan dan menutup file.
Jalankan perintah berikut untuk mengonfigurasi XPS:
sudo python3 xps_config.py(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_cpusKeluaran perintah berikut menunjukkan bahwa XPS telah dikonfigurasi. Keluaran bervariasi berdasarkan jumlah CPU atau antrian.

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'