Network Accelerator (NetACC) adalah pustaka akselerasi jaringan mode pengguna yang memanfaatkan elastic Remote Direct Memory Access (eRDMA), seperti latensi rendah dan throughput tinggi, serta menggunakan antarmuka soket yang kompatibel untuk mempercepat aplikasi TCP yang ada. Untuk aplikasi TCP yang memerlukan kinerja komunikasi tinggi, latensi rendah, dan throughput tinggi, Anda dapat menggunakan NetACC untuk mengadaptasi eRDMA dan mempercepat komunikasi jaringan tanpa perlu memodifikasi kode aplikasi.
NetACC sedang dalam pratinjau publik.
Skenario
NetACC cocok untuk skenario dengan overhead jaringan tinggi.
Skenario di mana laju paket per detik (PPS) tinggi, terutama skenario di mana banyak paket kecil dikirim dan diterima. Anda dapat menggunakan NetACC untuk mengurangi overhead CPU dan meningkatkan throughput sistem dalam skenario tertentu, seperti ketika Redis memproses permintaan.
Skenario sensitif terhadap latensi jaringan: eRDMA menyediakan latensi jaringan lebih rendah daripada TCP untuk mempercepat respons jaringan.
Pembuatan berulang koneksi singkat: NetACC dapat mempercepat proses pembuatan koneksi sekunder untuk mengurangi waktu pembuatan koneksi dan meningkatkan kinerja sistem.
Instal NetACC
Metode Instalasi
Gunakan driver eRDMA untuk menginstal NetACC
Ketika Anda menginstal driver eRDMA, NetACC secara otomatis diinstal. Untuk informasi tentang cara menginstal driver eRDMA, lihat bagian Langkah 2: Instal driver eRDMA pada Instance ECS dari topik "Gunakan eRDMA".
Instal NetACC secara terpisah
Jalankan perintah berikut untuk menginstal versi tertentu dari NetACC secara terpisah atau sementara gunakan NetACC pada instance Elastic Compute Service (ECS):
sudo curl -fsSL https://netacc-release.oss-cn-hangzhou.aliyuncs.com/release/netacc_download_install.sh | sudo sh
File Konfigurasi dan Parameter Dioptimalkan
Setelah Anda menginstal NetACC, file konfigurasi
/etc/netacc.confsecara otomatis dibuat. Untuk mengoptimalkan kinerja NetACC, Anda dapat mengonfigurasi parameter tertentu dalam file konfigurasi berdasarkan kebutuhan bisnis Anda, 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 wilayah memori (MR) pertama yang didaftarkan oleh RDMA. NACC_RDMA_MR_MAX_INC_SIZE menentukan ukuran maksimum MR yang didaftarkan oleh RDMA. NACC_SOR_CONN_PER_QP menentukan jumlah koneksi per pasangan antrian (QP). NACC_SOR_IO_THREADS menentukan jumlah thread NetACC.Kode sampel berikut memberikan contoh cara mengonfigurasi parameter dalam file konfigurasi:
Gunakan NetACC
Untuk menggunakan NetACC dalam aplikasi, jalankan perintah netacc_run atau konfigurasikan variabel lingkungan LD_PRELOAD. Sebelum menggunakan NetACC, Anda harus membaca bagian Pertimbangan dari 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 memulai aplikasi dan memuat NetACC pada saat yang sama. <COMMAND> menentukan perintah yang digunakan untuk memulai aplikasi.
netacc_run menyediakan beberapa parameter untuk meningkatkan kinerja NetACC. Misalnya, -t menentukan jumlah thread I/O dan -p menentukan jumlah koneksi per QP. Parameter yang Anda konfigurasikan saat menjalankan perintah netacc_run menimpa parameter dalam file konfigurasi.
Contoh:
Dalam contoh berikut, aplikasi Redis digunakan. Tambahkan
netacc_runsebelum perintah Redis untuk memulai aplikasi Redis dan memuat NetACC pada saat yang sama.Jalankan perintah berikut untuk memulai Redis dan memuat NetACC pada saat yang sama:
netacc_run redis-serverJalankan perintah berikut untuk memulai utilitas redis-benchmark dan memuat NetACC pada saat yang sama:
netacc_run redis-benchmark
Konfigurasikan variabel lingkungan LD_PRELOAD
Variabel lingkungan LD_PRELOAD menentukan pustaka bersama yang dimuat sebelumnya saat program dimulai. Untuk mengotomatiskan pemuatan NetACC, tentukan NetACC dalam nilai variabel lingkungan LD_PRELOAD di skrip terkait.
Jalankan perintah berikut untuk menanyakan lokasi pustaka dinamis NetACC:
ldconfig -p | grep netaccKeluaran perintah berikut dikembalikan.

Jalankan perintah berikut untuk mengonfigurasi variabel lingkungan
LD_PRELOADuntuk 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, aplikasi Redis digunakan.
Jalankan perintah berikut untuk memulai Redis dan memuat NetACC pada saat yang sama:
LD_PRELOAD=/lib64/libnetacc-preload.so redis-serverJalankan perintah berikut untuk memulai utilitas redis-benchmark dan memuat NetACC pada saat yang sama:
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 oleh NetACC. Untuk memantau NetACC, Anda dapat menjalankan perintah pada server dan klien.
Jalankan perintah berikut untuk menanyakan status data yang dikirim dan diterima oleh proses aplikasi TCP yang dipercepat oleh NetACC:
netacc_ss -s all -p <ID Proses>Untuk menanyakan ID proses, jalankan perintah ps -ef | grep <Nama Proses>.
Pertimbangan
Saat menggunakan NetACC, perhatikan bahwa hanya koneksi TCP yang dibuat menggunakan antarmuka jaringan elastis (ENI) yang memiliki fitur eRDMA Interface (ERI) yang diaktifkan yang dikonversi menjadi koneksi RDMA. Koneksi lain tetap sebagai koneksi TCP.
CatatanJika kedua ujung komunikasi jaringan tidak mendukung ENI dengan ERI diaktifkan, NetACC tidak dapat membuat koneksi RDMA dan kembali ke TCP.
Jika Anda ingin beberapa proses berkomunikasi satu sama lain saat menggunakan NetACC, Anda tidak dapat mengirim deskriptor file soket RDMA ke proses lain menggunakan mekanisme komunikasi antar-proses (IPC) kernel.
CatatanKoneksi RDMA dibuat berdasarkan QP tertentu. QP tidak dapat langsung dibagikan di antara proses. Akibatnya, koneksi RDMA tidak dapat dibagikan di antara proses.
Kerangka kerja NetACC tidak mendukung IPv6. Untuk mencegah konflik atau kesalahan terkait IPv6 saat menggunakan NetACC, kami sarankan Anda menjalankan perintah
sysctl net.ipv6.conf.all.disable_ipv6=1untuk menonaktifkan IPv6.NetACC tidak mendukung pembaruan panas. Pembaruan panas ke NetACC dapat menyebabkan kesalahan tak terduga. Sebelum memperbarui NetACC, Anda harus menghentikan proses aplikasi yang dipercepat oleh NetACC.
NetACC tidak mendukung opsi soket TCP tertentu, seperti SO_REUSEPORT, SO_ZEROCOPY, dan TCP_INQ.
NetACC bergantung pada GNU C Library (glibc) dan tidak dapat berjalan di lingkungan non-glibc, seperti lingkungan Golang.
Sebelum menggunakan NetACC, kami sarankan Anda menjalankan perintah
ulimit -l unlimiteduntuk mengatur jumlah maksimum memori fisik yang dapat dikunci oleh proses menjadi tidak terbatas.CatatanJika nilai parameter ulimit -l terlalu kecil, RDMA mungkin gagal mendaftarkan MR karena ukuran MR melebihi jumlah maksimum memori yang diizinkan untuk dikunci.
Saat aplikasi yang dipercepat oleh NetACC mendengarkan port TCP untuk komunikasi, NetACC juga mendengarkan port RDMA (port TCP ditambah 20000) untuk mencapai transfer data efisien dalam lingkungan jaringan RDMA.
CatatanJika port RDMA ditempati atau berada di luar rentang port yang valid, koneksi tidak dapat dibuat. Alokasikan port dengan benar untuk mencegah konflik port.
Dalam NetACC, proses anak tidak mewarisi koneksi soket yang sudah dibuat oleh proses induk setelah proses induk membuat proses anak menggunakan panggilan sistem
fork().CatatanIni dapat menyebabkan kegagalan komunikasi. Dalam hal ini, proses anak harus membuat koneksi soket baru.
Secara default, fitur penggunaan kembali QP dinonaktifkan dalam NetACC.
Anda dapat mengatur jumlah koneksi per QP (-p) ke nilai lebih besar dari 1 dengan mengonfigurasi parameter
NACC_SOR_CONN_PER_QPdalam file konfigurasi NetACC atau saat menjalankan perintahnetacc_rununtuk mengaktifkan fitur penggunaan kembali QP dan mengizinkan beberapa koneksi menggunakan kembali QP.Saat fitur penggunaan kembali QP diaktifkan, jumlah QP, overhead manajemen, dan konsumsi sumber daya berkurang untuk meningkatkan efisiensi komunikasi keseluruhan, terutama dalam skenario di mana terdapat sejumlah besar koneksi konkuren.
Setelah Anda mengaktifkan fitur penggunaan kembali QP, beberapa koneksi RDMA mungkin berbagi nomor port lokal. Dalam RDMA, nomor port mengidentifikasi QP, bukan koneksi. Jika beberapa koneksi berbagi QP, koneksi tersebut juga berbagi nomor port lokal.
CatatanJika aplikasi memerlukan nomor port lokal yang berbeda, seperti untuk menyediakan layanan berbeda atau mendengarkan port berbeda, nonaktifkan fitur penggunaan kembali QP. Jika fitur penggunaan kembali 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 sejumlah besar permintaan per detik. NetACC mengurangi overhead CPU dan meningkatkan throughput sistem.
Mempercepat Respons Jaringan
NetACC memanfaatkan manfaat latensi rendah dari eRDMA untuk secara signifikan mempercepat respons jaringan ke aplikasi Redis.
NetACC digunakan dalam benchmark kinerja Redis
Redis-benchmark adalah utilitas benchmark bawaan Redis, yang dirancang untuk mengukur kinerja server Redis di bawah berbagai beban kerja dengan mensimulasikan sejumlah klien untuk mengirim permintaan secara bersamaan ke server Redis.
Skema pengujian
Gunakan NetACC dalam utilitas redis-benchmark untuk mensimulasikan 100 klien dan 4 thread untuk membuat 5 juta permintaan SET.
Persiapan
Buat dua instance ECS dengan kemampuan eRDMA pada halaman pembelian instance di konsol ECS. Pilih Auto-install eRDMA Driver lalu pilih eRDMA Interface untuk mengaktifkan fitur ERI pada ENI utama. Gunakan satu instance ECS sebagai server Redis dan instance ECS lainnya sebagai klien Redis.
Instance ECS memiliki konfigurasi berikut:
Gambar: Alibaba Cloud Linux 3
Tipe Instance: ecs.g8ae.4xlarge
Alamat IP Privat ENI Utama: 172.17.0.90 untuk server dan 172.17.0.91 untuk klien. Dalam benchmark berikut, ganti alamat IP tersebut dengan nilai aktual berdasarkan kebutuhan bisnis Anda.
CatatanDalam topik ini, fitur ERI diaktifkan untuk ENI utama instance ECS untuk melakukan benchmark. 172.17.0.90 adalah alamat IP privat ENI utama instance ECS yang berfungsi sebagai server Redis.
Jika Anda mengaktifkan fitur ERI untuk ENI sekunder instance ECS, ganti alamat IP sebelumnya dengan alamat IP privat ENI sekunder. Untuk informasi lebih lanjut, lihat bagian Langkah 3: Ikat ERIs ke Instance ECS dari topik "Gunakan eRDMA".
Prosedur
Sambungkan ke instance ECS yang berfungsi sebagai server Redis dan instance ECS yang berfungsi sebagai klien Redis.
Untuk informasi lebih lanjut, lihat Gunakan Workbench untuk masuk ke instance Linux melalui SSH.
Periksa apakah driver eRDMA terinstal pada instance ECS.
Setelah instance ECS dimulai, jalankan perintah
ibv_devinfountuk memeriksa apakah driver eRDMA terinstal.Keluaran perintah berikut menunjukkan bahwa driver eRDMA terinstal.

Keluaran perintah berikut menunjukkan bahwa driver eRDMA sedang diinstal. Tunggu beberapa menit hingga driver eRDMA terinstal, lalu coba lagi nanti.

Jalankan perintah berikut pada instance ECS untuk menginstal Redis:
sudo yum install -y redisKeluaran perintah berikut menunjukkan bahwa Redis terinstal.

Gunakan utilitas
redis-benchmarkuntuk membandingkan kinerja Redis.Lakukan benchmark menggunakan NetACC
Jalankan perintah berikut pada instance ECS yang berfungsi sebagai server Redis untuk memulai Redis dan mempercepat Redis menggunakan NetACC:
netacc_run redis-server --port 6379 --protected-mode noCatatanGanti 6379 dengan nomor port aktual tempat Anda ingin memulai Redis. Untuk informasi lebih lanjut, lihat bagian Parameter Umum yang Digunakan Bersama dengan Perintah redis-server dari topik ini.
Dalam contoh ini, perintah
netacc_rundijalankan untuk menggunakan NetACC. Untuk metode lain menggunakan NetACC, lihat bagian Gunakan NetACC dari topik ini.
Keluaran perintah berikut menunjukkan bahwa Redis dimulai sesuai harapan.

Jalankan perintah berikut pada instance ECS yang berfungsi sebagai klien Redis untuk memulai 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 dimulai. Untuk informasi lebih lanjut, lihat bagian Parameter Perintah Umum yang Digunakan Bersama dengan redis-benchmark dari topik ini.
Hasil benchmark mungkin bervariasi berdasarkan kondisi jaringan. Data benchmark yang disediakan dalam topik ini hanya untuk referensi.
Bagian Summary di akhir hasil benchmark sebelumnya 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 dari topik ini.
Lakukan benchmark tanpa NetACC
Jalankan perintah berikut pada instance ECS yang berfungsi sebagai server Redis untuk memulai Redis:
redis-server --port 6379 --protected-mode no --saveCatatanGanti 6379 dengan nomor port aktual tempat Anda ingin memulai Redis. Untuk informasi lebih lanjut, lihat bagian Parameter Umum yang Digunakan Bersama dengan Perintah redis-server dari topik ini.
Keluaran perintah berikut menunjukkan bahwa Redis dimulai sesuai harapan.

Jalankan perintah berikut pada instance ECS yang berfungsi sebagai klien Redis untuk memulai 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 dimulai. Untuk informasi lebih lanjut, lihat bagian Parameter Perintah Umum yang Digunakan Bersama dengan redis-benchmark dari topik ini.
Hasil benchmark mungkin bervariasi berdasarkan kondisi jaringan. Data benchmark yang disediakan dalam topik ini hanya untuk referensi.
Bagian Summary di akhir hasil benchmark sebelumnya 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 dari topik ini.



