NetACC adalah pustaka mode pengguna yang mempercepat aplikasi TCP melalui eRDMA dengan antarmuka soket yang kompatibel—tanpa perubahan kode.
NetACC berada dalam pratinjau publik.
Use cases
NetACC cocok untuk skenario dengan overhead jaringan tinggi.
Workload dengan paket per detik (PPS) tinggi, terutama traffic paket kecil. NetACC mengurangi overhead CPU dan meningkatkan throughput, seperti saat Redis memproses permintaan.
Workload sensitif latensi: eRDMA memberikan latensi lebih rendah dibanding TCP, sehingga mempercepat respons jaringan.
Koneksi singkat yang sering: NetACC mempercepat pembentukan koneksi, mengurangi waktu pembuatan, dan meningkatkan performa.
Instal NetACC
Metode instalasi
Gunakan driver eRDMA untuk menginstal NetACC
NetACC diinstal secara otomatis bersama driver eRDMA. Lihat Enable eRDMA pada topik "Use eRDMA".
Instal NetACC secara terpisah
Untuk menginstal versi tertentu NetACC atau menggunakannya sementara pada Instance ECS, jalankan:
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 instalasi, berkas konfigurasi
/etc/netacc.confdihasilkan secara otomatis. Anda dapat menyesuaikan parameter berikut berdasarkan workload Anda:NACC_SOR_MSG_SIZE: ukuran buffer.NACC_RDMA_MR_MIN_INC_SIZE: ukuran Wilayah Memori (MR) pertama yang didaftarkan oleh RDMA.NACC_RDMA_MR_MAX_INC_SIZE: ukuran maksimum MR yang didaftarkan oleh RDMA.NACC_SOR_CONN_PER_QP: koneksi per Queue Pair (QP).NACC_SOR_IO_THREADS: jumlah thread NetACC.
Contoh berikut menunjukkan berkas konfigurasi sampel:
Gunakan NetACC
Gunakan NetACC dalam aplikasi dengan menjalankan perintah netacc_run atau mengatur variabel lingkungan LD_PRELOAD. Baca bagian Considerations sebelum melanjutkan.
Jalankan perintah netacc_run
netacc_run memuat NetACC saat startup aplikasi. Tambahkan awalan perintah aplikasi Anda dengan netacc_run untuk menjalankan aplikasi dengan NetACC diaktifkan.
netacc_run menerima parameter seperti -t (thread I/O) dan -p (koneksi per QP). Parameter yang ditentukan saat menjalankan perintah netacc_run menggantikan berkas konfigurasi.
Contoh:
Contoh berikut menggunakan Redis. Tambahkan awalan perintah Redis dengan
netacc_rununtuk menjalankan Redis dengan NetACC.Jalankan Redis dengan NetACC:
netacc_run redis-serverJalankan redis-benchmark dengan NetACC:
netacc_run redis-benchmark
Konfigurasikan variabel lingkungan LD_PRELOAD
Variabel lingkungan LD_PRELOAD menentukan pustaka bersama yang dimuat sebelum program dijalankan. Atur ke pustaka NetACC dalam variabel LD_PRELOAD untuk memuatnya secara otomatis.
Cari lokasi pustaka dinamis NetACC:
ldconfig -p | grep netaccOutput contoh:

Atur variabel lingkungan
LD_PRELOADke pustaka bersama NetACC:LD_PRELOAD=/lib64/libnetacc-preload.so your_applicationGanti
your_applicationdengan aplikasi target.Contoh (Redis):
Jalankan Redis dengan NetACC:
LD_PRELOAD=/lib64/libnetacc-preload.so redis-serverJalankan redis-benchmark dengan NetACC:
LD_PRELOAD=/lib64/libnetacc-preload.so redis-benchmark
Pantau NetACC
netacc_ss adalah alat pemantauan NetACC. Jalankan perintah netacc_ss untuk memeriksa status transfer data proses TCP yang dipercepat oleh NetACC. Anda dapat menjalankannya baik di server maupun klien.
Periksa status transfer data proses TCP yang dipercepat NetACC:
netacc_ss -s all -p <Process ID>Untuk mencari ID proses, jalankan ps -ef | grep <Process name>.
Catatan penggunaan
Hanya koneksi TCP yang dibentuk melalui ENI dengan fitur eRDMA Interface (ERI) yang diaktifkan yang dikonversi menjadi koneksi RDMA. Koneksi lain tetap menggunakan TCP.
CatatanJika kedua ujung komunikasi tidak memiliki ENI dengan ERI yang diaktifkan, NetACC akan kembali menggunakan TCP.
Deskriptor file soket RDMA tidak dapat dikirim ke proses lain melalui IPC kernel.
CatatanKoneksi RDMA terikat pada QP tertentu yang tidak dapat dibagi antar proses.
NetACC tidak mendukung IPv6. Untuk mencegah konflik, nonaktifkan IPv6 dengan menjalankan
sysctl net.ipv6.conf.all.disable_ipv6=1.NetACC tidak mendukung pembaruan panas (hot updates). Hentikan semua proses yang dipercepat NetACC sebelum memperbarui NetACC.
NetACC tidak mendukung opsi soket TCP tertentu, seperti SO_REUSEPORT, SO_ZEROCOPY, dan TCP_INQ.
NetACC bergantung pada glibc dan tidak dapat dijalankan di lingkungan non-glibc, seperti Golang.
Sebelum menggunakan NetACC, atur memori yang dapat dikunci maksimum menjadi tak terbatas dengan menjalankan
ulimit -l unlimited.CatatanJika nilai ulimit -l terlalu kecil, RDMA mungkin gagal mendaftarkan MR yang melebihi batas tersebut.
Saat aplikasi yang dipercepat NetACC mendengarkan pada port TCP, NetACC juga mendengarkan pada port RDMA (port TCP + 20000) untuk transfer data RDMA.
CatatanJika port RDMA sedang digunakan atau berada di luar rentang yang valid, koneksi akan gagal. Alokasikan port dengan benar untuk menghindari konflik.
Proses anak tidak mewarisi koneksi soket yang dibentuk oleh proses induk setelah pemanggilan
fork().CatatanProses anak harus membentuk koneksi soket baru.
Penggunaan ulang QP dinonaktifkan secara default.
Untuk mengaktifkan penggunaan ulang QP, atur koneksi per QP (-p) ke nilai lebih dari 1 melalui parameter
NACC_SOR_CONN_PER_QPdalam berkas konfigurasi NetACC atau perintahnetacc_run.Penggunaan ulang QP mengurangi jumlah QP, overhead manajemen, dan konsumsi sumber daya, sehingga meningkatkan efisiensi komunikasi dalam skenario konkurensi tinggi.
Dengan penggunaan ulang QP diaktifkan, beberapa koneksi RDMA dapat berbagi nomor port lokal karena nomor port mengidentifikasi QP, bukan koneksi individual.
CatatanJika aplikasi Anda memerlukan nomor port lokal yang berbeda (misalnya, untuk layanan berbeda), nonaktifkan penggunaan ulang QP untuk menghindari konflik port.
Gunakan NetACC dalam aplikasi Redis
Manfaat NetACC untuk aplikasi Redis
Throughput sistem yang lebih baik
NetACC mengurangi overhead CPU dan meningkatkan throughput untuk workload Redis dengan PPS tinggi.
Respons jaringan yang dipercepat
NetACC memanfaatkan latensi rendah eRDMA untuk mempercepat respons jaringan Redis.
NetACC dalam benchmark performa Redis
Redis-benchmark adalah utilitas bawaan Redis yang mengukur performa server dengan mensimulasikan permintaan klien bersamaan.
Skenario pengujian
Gunakan NetACC dengan redis-benchmark untuk mensimulasikan 100 klien pada 4 thread yang mengirim 5 juta permintaan SET.
Prasyarat
Buat dua Instance ECS yang mendukung eRDMA. Pilih Auto-install eRDMA Driver dan eRDMA Interface untuk mengaktifkan ERI pada ENI primer. Gunakan satu instans sebagai server Redis dan yang lain sebagai klien.
Konfigurasi instans:
Image: Alibaba Cloud Linux 3
Tipe instans: ecs.g8ae.4xlarge
Alamat IP privat ENI primer: 172.17.0.90 (server) dan 172.17.0.91 (klien). Ganti dengan nilai aktual dalam benchmark Anda.
CatatanBenchmark ini mengaktifkan ERI pada ENI primer. 172.17.0.90 adalah alamat IP privat ENI primer dari instans server Redis.
Jika ERI diaktifkan pada ENI sekunder, gunakan alamat IP privat mereka sebagai gantinya. Lihat Enable eRDMA pada topik "Use eRDMA".
Prosedur
Sambungkan ke kedua Instance ECS (server dan klien Redis).
Lihat Gunakan Workbench untuk masuk ke instans Linux melalui SSH.
Verifikasi bahwa driver eRDMA telah diinstal.
Setelah instans dijalankan, jalankan
ibv_devinfountuk memeriksa status driver eRDMA.Output berikut menunjukkan driver telah diinstal.

Output berikut menunjukkan driver sedang diinstal. Tunggu beberapa menit lalu coba lagi.

Instal Redis pada kedua instans:
sudo yum install -y redisOutput berikut menunjukkan Redis telah diinstal.

Ukur performa Redis dengan
redis-benchmark.Lakukan benchmark menggunakan NetACC
Pada instans server Redis, jalankan Redis dengan NetACC:
netacc_run redis-server --port 6379 --protected-mode noCatatanGanti 6379 dengan port aktual Anda. Lihat Common parameters used together with the redis-server command.
Contoh ini menggunakan
netacc_run. Untuk metode lain, lihat Use NetACC.
Output berikut menunjukkan Redis berhasil dijalankan.

Pada instans klien Redis, jalankan redis-benchmark dengan 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 IP server Redis dan 6379 dengan port aktual. Lihat Common command parameters used with redis-benchmark.
Hasil benchmark dapat bervariasi tergantung kondisi jaringan. Data dalam topik ini hanya sebagai referensi.
Rangkuman menunjukkan ~770.000 permintaan/detik. Untuk detail metrik, lihat Common metrics in redis-benchmark benchmark results.
Lakukan benchmark tanpa NetACC
Pada instans server Redis, jalankan Redis:
redis-server --port 6379 --protected-mode no --saveCatatanGanti 6379 dengan port aktual Anda. Lihat Common parameters used together with the redis-server command.
Output berikut menunjukkan Redis berhasil dijalankan.

Pada instans klien Redis, jalankan 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 IP server Redis dan 6379 dengan port aktual. Lihat Common command parameters used with redis-benchmark.
Hasil benchmark dapat bervariasi tergantung kondisi jaringan. Data dalam topik ini hanya sebagai referensi.
Rangkuman menunjukkan ~330.000 permintaan/detik. Untuk detail metrik, lihat Common metrics in redis-benchmark benchmark results.



