Network Accelerator (NetACC) adalah pustaka akselerasi jaringan berbasis user-mode yang memanfaatkan keunggulan elastic Remote Direct Memory Access (eRDMA), seperti latensi rendah dan throughput tinggi, serta menggunakan antarmuka socket yang kompatibel untuk mempercepat aplikasi TCP yang sudah ada. Untuk aplikasi TCP yang memerlukan performa komunikasi tinggi, latensi rendah, dan throughput tinggi, Anda dapat menggunakan NetACC untuk mengadaptasi eRDMA dan mempercepat komunikasi jaringan aplikasi tanpa perlu memodifikasi kode aplikasi.
NetACC sedang dalam pratinjau publik.
Skenario
NetACC cocok untuk skenario dengan overhead jaringan tinggi.
Skenario dengan laju paket per detik (PPS) tinggi, terutama saat sejumlah besar paket kecil dikirim dan diterima. Anda dapat menggunakan NetACC untuk mengurangi beban CPU dan meningkatkan throughput sistem dalam skenario tertentu, seperti saat Redis memproses permintaan.
Skenario sensitif terhadap latensi jaringan: eRDMA menyediakan latensi jaringan lebih rendah dibandingkan TCP untuk mempercepat respons jaringan.
Pembuatan berulang koneksi singkat: NetACC dapat mempercepat proses pembentukan koneksi sekunder untuk mengurangi waktu pembuatan koneksi dan meningkatkan performa sistem.
Instal NetACC
Metode instalasi
Gunakan driver eRDMA untuk menginstal NetACC
Saat Anda menginstal driver eRDMA, NetACC akan diinstal secara otomatis. Untuk informasi cara menginstal driver eRDMA, lihat bagian Langkah 2: Instal driver eRDMA pada Instance ECS dalam topik "Use eRDMA".
Instal NetACC secara terpisah
Jalankan perintah berikut untuk menginstal versi tertentu NetACC atau menggunakan NetACC sementara pada Elastic Compute Service (ECS) instance:
sudo curl -fsSL https://netacc-release.oss-cn-hangzhou.aliyuncs.com/release/netacc_download_install.sh | sudo sh
Berkas konfigurasi dan parameter yang dioptimalkan
Setelah Anda menginstal NetACC, berkas konfigurasi
/etc/netacc.confakan dibuat secara otomatis. Untuk mengoptimalkan performa NetACC, Anda dapat mengonfigurasi parameter tertentu dalam berkas konfigurasi sesuai kebutuhan bisnis, sepertiNACC_SOR_MSG_SIZE,NACC_RDMA_MR_MIN_INC_SIZE,NACC_RDMA_MR_MAX_INC_SIZE,NACC_SOR_CONN_PER_QP, danNACC_SOR_IO_THREADS. NACC_SOR_MSG_SIZE menentukan ukuran buffer. NACC_RDMA_MR_MIN_INC_SIZE menentukan ukuran region memori (MR) pertama yang diregistrasi oleh RDMA. NACC_RDMA_MR_MAX_INC_SIZE menentukan ukuran maksimum MR yang diregistrasi oleh RDMA. NACC_SOR_CONN_PER_QP menentukan jumlah koneksi per queue pair (QP). NACC_SOR_IO_THREADS menentukan jumlah thread NetACC.Kode contoh berikut memberikan contoh cara mengonfigurasi parameter dalam berkas konfigurasi:
Gunakan NetACC
Untuk menggunakan NetACC dalam aplikasi, jalankan perintah netacc_run atau konfigurasikan variabel lingkungan LD_PRELOAD. Sebelum menggunakan NetACC, Anda harus memahami bagian Pertimbangan dalam topik ini.
Jalankan perintah netacc_run
netacc_run adalah alat yang memuat NetACC saat startup aplikasi. Anda dapat menambahkan netacc_run sebelum perintah <COMMAND> untuk menjalankan aplikasi sekaligus memuat NetACC. <COMMAND> adalah perintah yang digunakan untuk menjalankan aplikasi.
netacc_run menyediakan beberapa parameter untuk meningkatkan performa NetACC. Misalnya, -t menentukan jumlah thread I/O dan -p menentukan jumlah koneksi per QP. Parameter yang Anda konfigurasi saat menjalankan perintah netacc_run menimpa parameter dalam berkas konfigurasi.
Contoh:
Dalam contoh berikut, digunakan aplikasi Redis. Tambahkan
netacc_runsebelum perintah Redis untuk menjalankan aplikasi Redis sekaligus memuat NetACC.Jalankan perintah berikut untuk menjalankan Redis dan memuat NetACC secara bersamaan:
netacc_run redis-serverJalankan perintah berikut untuk menjalankan utilitas redis-benchmark dan memuat NetACC secara bersamaan:
netacc_run redis-benchmark
Konfigurasikan variabel lingkungan LD_PRELOAD
Variabel lingkungan LD_PRELOAD menentukan pustaka bersama yang dimuat sebelum program dijalankan. Untuk mengotomatiskan pemuatan NetACC, tentukan NetACC dalam nilai variabel lingkungan LD_PRELOAD dalam skrip terkait.
Jalankan perintah berikut untuk mengetahui lokasi pustaka dinamis NetACC:
ldconfig -p | grep netaccOutput perintah berikut akan ditampilkan.

Jalankan perintah berikut untuk mengonfigurasi variabel lingkungan
LD_PRELOADguna menentukan pustaka bersama yang dimuat sebelumnya:LD_PRELOAD=/lib64/libnetacc-preload.so your_applicationGanti
your_applicationdengan aplikasi yang ingin Anda percepat.Contoh: Dalam contoh berikut, digunakan aplikasi Redis.
Jalankan perintah berikut untuk menjalankan Redis dan memuat NetACC secara bersamaan:
LD_PRELOAD=/lib64/libnetacc-preload.so redis-serverJalankan perintah berikut untuk menjalankan utilitas redis-benchmark dan memuat NetACC secara bersamaan:
LD_PRELOAD=/lib64/libnetacc-preload.so redis-benchmark
Pantau NetACC
netacc_ss adalah alat pemantauan NetACC. Jalankan perintah netacc_ss untuk memantau status data yang dikirim dan diterima oleh proses aplikasi TCP yang dipercepat NetACC. Untuk memantau NetACC, Anda dapat menjalankan perintah ini di server dan klien.
Jalankan perintah berikut untuk menanyakan status data yang dikirim dan diterima oleh proses aplikasi TCP yang dipercepat NetACC:
netacc_ss -s all -p <Process ID>Untuk mengetahui ID proses, jalankan perintah ps -ef | grep <Process name>.
Pertimbangan
Saat menggunakan NetACC, hanya koneksi TCP yang dibuat melalui elastic network interfaces (ENIs) dengan fitur eRDMA Interface (ERI) yang diaktifkan yang akan dikonversi menjadi koneksi RDMA. Koneksi lain tetap sebagai koneksi TCP.
CatatanJika kedua ujung komunikasi jaringan tidak mendukung ENI dengan ERI yang diaktifkan, NetACC tidak dapat membuat koneksi RDMA dan akan kembali menggunakan TCP.
Jika Anda ingin beberapa proses saling berkomunikasi saat menggunakan NetACC, Anda tidak dapat mengirim deskriptor file socket RDMA ke proses lain menggunakan mekanisme inter-process communication (IPC) kernel.
CatatanKoneksi RDMA dibuat berdasarkan QP tertentu. QP tidak dapat langsung dibagikan antar-proses. Akibatnya, koneksi RDMA tidak dapat dibagikan antar-proses.
Kerangka kerja NetACC tidak mendukung IPv6. Untuk mencegah konflik atau error terkait IPv6 saat menggunakan NetACC, kami menyarankan Anda menjalankan perintah
sysctl net.ipv6.conf.all.disable_ipv6=1untuk menonaktifkan IPv6.NetACC tidak mendukung pembaruan panas (hot updates). Pembaruan panas pada NetACC dapat menyebabkan error tak terduga. Sebelum memperbarui NetACC, Anda harus menghentikan proses aplikasi yang dipercepat NetACC.
NetACC tidak mendukung opsi socket TCP tertentu, seperti SO_REUSEPORT, SO_ZEROCOPY, dan TCP_INQ.
NetACC bergantung pada GNU C Library (glibc) dan tidak dapat dijalankan di lingkungan non-glibc, seperti lingkungan Golang.
Sebelum menggunakan NetACC, kami menyarankan Anda menjalankan perintah
ulimit -l unlimiteduntuk mengatur jumlah maksimum memori fisik yang dapat dikunci oleh proses menjadi tak terbatas.CatatanJika nilai parameter ulimit -l terlalu kecil, RDMA mungkin gagal meregistrasi MR karena ukuran MR melebihi batas maksimum memori yang diizinkan untuk dikunci.
Saat aplikasi yang dipercepat NetACC mendengarkan port TCP untuk komunikasi, NetACC juga mendengarkan port RDMA (port TCP ditambah 20.000) untuk mencapai transfer data efisien di lingkungan jaringan RDMA.
CatatanJika port RDMA sedang digunakan atau berada di luar rentang port yang valid, koneksi tidak dapat dibuat. Alokasikan port dengan tepat untuk mencegah konflik port.
Dalam NetACC, proses anak tidak mewarisi koneksi socket yang telah dibuat oleh proses induk setelah proses induk membuat proses anak menggunakan panggilan sistem
fork().CatatanHal ini dapat menyebabkan kegagalan komunikasi. Dalam kasus ini, proses anak harus membuat koneksi socket baru.
Secara default, fitur reuse QP dinonaktifkan dalam NetACC.
Anda dapat mengatur jumlah koneksi per QP (-p) ke nilai lebih dari 1 dengan mengonfigurasi parameter
NACC_SOR_CONN_PER_QPdalam berkas konfigurasi NetACC atau saat menjalankan perintahnetacc_rununtuk mengaktifkan fitur reuse QP dan memungkinkan beberapa koneksi menggunakan kembali satu QP.Saat fitur reuse QP diaktifkan, jumlah QP, overhead manajemen, dan konsumsi resource berkurang sehingga meningkatkan efisiensi komunikasi secara keseluruhan, terutama dalam skenario dengan banyak koneksi bersamaan.
Setelah Anda mengaktifkan fitur reuse QP, beberapa koneksi RDMA mungkin berbagi nomor port lokal. Dalam RDMA, nomor port mengidentifikasi QP, bukan koneksi. Jika beberapa koneksi berbagi satu QP, koneksi tersebut juga berbagi nomor port lokal.
CatatanJika aplikasi memerlukan nomor port lokal berbeda, misalnya untuk menyediakan layanan berbeda atau mendengarkan port berbeda, nonaktifkan fitur reuse QP. Jika fitur reuse QP diaktifkan, koneksi tidak dapat dibedakan berdasarkan nomor port lokal, yang dapat menyebabkan konflik port.
Gunakan NetACC dalam aplikasi Redis
Manfaat NetACC untuk aplikasi Redis
Meningkatkan throughput sistem
NetACC cocok untuk skenario di mana Redis memproses banyak permintaan per detik. NetACC mengurangi beban CPU dan meningkatkan throughput sistem.
Mempercepat respons jaringan
NetACC memanfaatkan keunggulan latensi rendah eRDMA untuk secara signifikan mempercepat respons jaringan ke aplikasi Redis.
NetACC dalam benchmark performa Redis
Redis-benchmark adalah utilitas benchmark bawaan Redis yang dirancang untuk mengukur performa server Redis di bawah berbagai beban kerja dengan mensimulasikan sejumlah klien yang secara bersamaan mengirim permintaan ke server Redis.
Skenario pengujian
Gunakan NetACC dalam utilitas redis-benchmark untuk mensimulasikan 100 klien dan 4 thread guna membuat 5 juta permintaan SET.
Persiapan
Buat dua Instance ECS yang mendukung eRDMA di halaman pembelian instans dalam Konsol ECS. Pilih Auto-install eRDMA Driver lalu pilih eRDMA Interface untuk mengaktifkan fitur ERI pada ENI primer. Gunakan satu Instance ECS sebagai server Redis dan Instance ECS lainnya sebagai klien Redis.
Instance ECS memiliki konfigurasi berikut:
Image: Alibaba Cloud Linux 3
Tipe instans: ecs.g8ae.4xlarge
Alamat IP pribadi ENI primer: 172.17.0.90 untuk server dan 172.17.0.91 untuk klien. Dalam benchmark berikut, ganti alamat IP tersebut dengan nilai aktual sesuai kebutuhan bisnis Anda.
CatatanDalam topik ini, fitur ERI diaktifkan untuk ENI primer Instance ECS untuk menjalankan benchmark. 172.17.0.90 adalah alamat IP pribadi ENI primer Instance ECS yang berfungsi sebagai server Redis.
Jika Anda mengaktifkan fitur ERI untuk ENI sekunder Instance ECS, ganti alamat IP di atas dengan alamat IP pribadi ENI sekunder. Untuk informasi lebih lanjut, lihat bagian Langkah 3: Bind ERIs ke Instance ECS dalam topik "Use eRDMA".
Prosedur
Sambungkan ke Instance ECS yang berfungsi sebagai server Redis dan Instance ECS yang berfungsi sebagai klien Redis.
Untuk informasi lebih lanjut, lihat Use Workbench to log on to a Linux instance over SSH.
Periksa apakah driver eRDMA telah diinstal pada Instance ECS.
Setelah Instance ECS dijalankan, jalankan perintah
ibv_devinfountuk memeriksa apakah driver eRDMA telah diinstal.Output perintah berikut menunjukkan bahwa driver eRDMA telah diinstal.

Output perintah berikut menunjukkan bahwa driver eRDMA sedang dalam proses instalasi. Tunggu beberapa menit hingga driver eRDMA selesai diinstal, lalu coba lagi.

Jalankan perintah berikut pada Instance ECS untuk menginstal Redis:
sudo yum install -y redisOutput perintah berikut menunjukkan bahwa Redis telah diinstal.

Gunakan utilitas
redis-benchmarkuntuk mengukur performa Redis.Lakukan benchmark menggunakan NetACC
Jalankan perintah berikut pada Instance ECS yang berfungsi sebagai server Redis untuk menjalankan Redis dan mempercepat Redis menggunakan NetACC:
netacc_run redis-server --port 6379 --protected-mode noCatatanGanti 6379 dengan nomor port aktual tempat Anda ingin menjalankan Redis. Untuk informasi lebih lanjut, lihat bagian Parameter umum yang digunakan bersama perintah redis-server dalam topik ini.
Dalam contoh ini, perintah
netacc_rundijalankan untuk menggunakan NetACC. Untuk metode penggunaan NetACC lainnya, lihat bagian Gunakan NetACC dalam topik ini.
Output perintah berikut menunjukkan bahwa Redis telah dijalankan sesuai harapan.

Jalankan perintah berikut pada Instance ECS yang berfungsi sebagai klien Redis untuk menjalankan redis-benchmark dan mempercepat redis-benchmark menggunakan NetACC:
netacc_run redis-benchmark -h 172.17.0.90 -p 6379 -c 100 -n 5000000 -r 10000 --threads 4 -d 512 -t setCatatanGanti 172.17.0.90 dengan alamat IP aktual server Redis dan 6379 dengan nomor port aktual tempat Redis dijalankan. Untuk informasi lebih lanjut, lihat bagian Parameter perintah umum yang digunakan bersama redis-benchmark dalam topik ini.
Hasil benchmark dapat bervariasi tergantung kondisi jaringan. Data benchmark yang disediakan dalam topik ini hanya untuk referensi.
Bagian Summary di akhir hasil benchmark di atas menunjukkan bahwa sekitar 770.000 permintaan dapat diproses per detik. Untuk informasi tentang metrik dalam hasil benchmark Redis, lihat bagian Metrik umum dalam hasil benchmark redis-benchmark dalam topik ini.
Lakukan benchmark tanpa NetACC
Jalankan perintah berikut pada Instance ECS yang berfungsi sebagai server Redis untuk menjalankan Redis:
redis-server --port 6379 --protected-mode no --saveCatatanGanti 6379 dengan nomor port aktual tempat Anda ingin menjalankan Redis. Untuk informasi lebih lanjut, lihat bagian Parameter umum yang digunakan bersama perintah redis-server dalam topik ini.
Output perintah berikut menunjukkan bahwa Redis telah dijalankan sesuai harapan.

Jalankan perintah berikut pada Instance ECS yang berfungsi sebagai klien Redis untuk menjalankan redis-benchmark:
redis-benchmark -h 172.17.0.90 -c 100 -n 5000000 -r 10000 --threads 4 -d 512 -t setCatatanGanti 172.17.0.90 dengan alamat IP aktual server Redis dan 6379 dengan nomor port aktual tempat Redis dijalankan. Untuk informasi lebih lanjut, lihat bagian Parameter perintah umum yang digunakan bersama redis-benchmark dalam topik ini.
Hasil benchmark dapat bervariasi tergantung kondisi jaringan. Data benchmark yang disediakan dalam topik ini hanya untuk referensi.
Bagian Summary di akhir hasil benchmark di atas menunjukkan bahwa sekitar 330.000 permintaan dapat diproses per detik. Untuk informasi tentang metrik dalam hasil benchmark Redis, lihat bagian Metrik umum dalam hasil benchmark redis-benchmark dalam topik ini.



