全部产品
Search
文档中心

Elastic Compute Service:Gunakan NetACC untuk mempercepat aplikasi TCP

更新时间:Jun 26, 2025

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.

Penting

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.conf secara otomatis dibuat. Untuk mengoptimalkan kinerja NetACC, Anda dapat mengonfigurasi parameter tertentu dalam file konfigurasi berdasarkan kebutuhan bisnis Anda, seperti NACC_SOR_MSG_SIZE, NACC_RDMA_MR_MIN_INC_SIZE, NACC_RDMA_MR_MAX_INC_SIZE, NACC_SOR_CONN_PER_QP, dan NACC_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:

    Contoh File /etc/netacc.conf Konfigurasi

    [netacc]
    # Ukuran buffer. Jika blok data yang akan dikirim besar, Anda dapat meningkatkan ukuran untuk meningkatkan kinerja atau mengurangi ukuran untuk menghemat memori.
    # int
    NACC_SOR_MSG_SIZE=16384
    
    # Ukuran MR pertama yang didaftarkan oleh RDMA. Anda dapat mengurangi ukuran untuk menghemat memori.
    # Atur parameter ini ke nilai yang merupakan kelipatan pangkat dua dari nilai NACC_SOR_MSG_SIZE. Kelipatan minimum adalah 1.
    NACC_RDMA_MR_MIN_INC_SIZE=16384
    
    # Ukuran maksimum MR yang didaftarkan oleh RDMA, berkisar dari 1 MB hingga 512 MB. Anda dapat mengurangi ukuran untuk menghemat memori.
    # Atur parameter ini ke nilai yang merupakan kelipatan pangkat dua dari nilai NACC_RDMA_MR_MIN_INC_SIZE. Kelipatan minimum adalah 1.
    NACC_RDMA_MR_MAX_INC_SIZE=8388608
    
    # Jumlah koneksi per QP. Anda dapat meningkatkan nilai untuk meningkatkan kinerja. Dalam skenario tertentu, atur parameter ini ke 1.
    # int
    NACC_SOR_CONN_PER_QP=1
    
    # Jumlah thread NetACC. Jika throughput tinggi, tingkatkan nilai.
    # int
    NACC_SOR_IO_THREADS=1
    
    # Waktu kedaluwarsa QP kosong. Unit: milidetik. Nilai 0 menentukan bahwa QP kosong segera kedaluwarsa. Nilai -1 menentukan bahwa QP kosong tidak pernah kedaluwarsa.
    NACC_EMPTY_QP_EXPIRE_MS=60000
    
    # Jumlah maksimum QP kosong yang diizinkan.
    NACC_EMPTY_QP_MAX_ALL=100
    
    # Jumlah maksimum QP kosong yang diizinkan untuk setiap alamat tujuan.
    NACC_EMPTY_QP_MAX_PER=10
    
    # Probabilitas menggunakan RDMA untuk membuat koneksi. Nilai valid: 0 hingga 100.
    NACC_CONNECT_RDMA_PERCENT=100
    
    # Menentukan apakah RDMA diaktifkan secara default.
    NACC_ENABLE_RDMA_DEFAULT=1
    
    # Tingkat log.
    # 0: TRACE
    # 1: DEBUG
    # 2: INFO
    # 3: WARN
    # 4: ERROR
    # 5: FATAL
    NACC_LOG_LEVEL=3
    
    # Jalur log.
    NACC_LOG_PATH="/tmp/netacc.log"
    
    # Parameter berikut jarang digunakan atau tidak perlu dikonfigurasi.
    
    # Afinitas thread.
    # string
    NACC_SOR_AFFINITY=""
    
    # Menentukan apakah akan lebih memilih menggunakan TCP untuk membuat koneksi.
    # bool
    NACC_CONN_TCP_FIRST=0

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.

Parameter Perintah netacc_run

netacc_run -h
Usage: netacc_run [ OPTIONS ] COMMAND

Jalankan COMMAND menggunakan NetACC untuk soket TCP

OPTIONS:
   -f <path>   setel file konfigurasi, default /etc/netacc.conf
   -p <num>    setel maksimum koneksi per QP, default 1
   -t <num>    setel thread io netacc, default 4
   -s <num>    setel ukuran pesan netacc, default 16384
   -F <num>    mode koneksi cepat, default 0
   -d          aktifkan mode debug
   -T          gunakan TCP pertama kali dalam koneksi
   -P <num>    polling cq waktu ms
   -A <str>    daftar afinitas CPU, 0 | 1-3 | 1,3,4
   -i <num>    setel comp_vector cq, default 0
   -h          tampilkan pesan ini
   -v          tampilkan info versi
  • Contoh:

    Dalam contoh berikut, aplikasi Redis digunakan. Tambahkan netacc_run sebelum 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-server
    • Jalankan 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.

  1. Jalankan perintah berikut untuk menanyakan lokasi pustaka dinamis NetACC:

    ldconfig -p | grep netacc

    Keluaran perintah berikut dikembalikan.

    image

  2. Jalankan perintah berikut untuk mengonfigurasi variabel lingkungan LD_PRELOAD untuk menentukan pustaka bersama yang dimuat sebelumnya:

    LD_PRELOAD=/lib64/libnetacc-preload.so your_application

    Ganti your_application dengan 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-server
    • Jalankan perintah berikut untuk memulai utilitas redis-benchmark dan memuat NetACC pada saat yang sama:

      LD_PRELOAD=/lib64/libnetacc-preload.so redis-benchmark

    Konfigurasikan Variabel Lingkungan LD_PRELOAD dalam Skrip

    Jika Anda sering menggunakan NetACC untuk mempercepat aplikasi atau ingin menggunakan skrip untuk mengelola beberapa aplikasi dan mempercepat aplikasi tersebut dengan menggunakan NetACC saat startup aplikasi, konfigurasikan variabel lingkungan LD_PRELOAD dalam skrip. Misalnya, Anda dapat membuat skrip bernama run_with_netacc.

    #!/bin/bash
    LD_PRELOAD=/lib64/libnetacc-preload.so $@

    Jalankan perintah berikut untuk memulai aplikasi dan memuat NetACC pada saat yang sama:

    ./run_with_netacc.sh your_application

    Contoh: Dalam contoh berikut, aplikasi Redis digunakan.

    • Jalankan perintah berikut untuk memulai Redis dan memuat NetACC pada saat yang sama:

      ./run_with_netacc.sh redis-server
    • Jalankan perintah berikut untuk memulai utilitas redis-benchmark dan memuat NetACC pada saat yang sama:

      ./run_with_netacc.sh 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.

Perintah netacc_ss

netacc_ss -h
Usage:
 netacc_ss: [-p] <pid> [options]...
 Tampilkan informasi pemantauan proses netacc yang ditentukan

Options:
 -c   hapus file sock yang tidak digunakan
 -h   tampilkan bantuan ini
 -s   tampilkan metrik pemantauan yang ditentukan[s]. [all|cfg|cnt|mem|qp|sock]
      all: semua informasi pemantauan
      cfg: informasi konfigurasi
      cnt: informasi counter[default]
      mem: informasi memori
      qp : informasi pasangan antrian
      sock: informasi soket
 -v   tampilkan versi netacc

Contoh:
 netacc_ss -p 12345 -s mem,cnt

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>
Catatan

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.

    Catatan

    Jika 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.

    Catatan

    Koneksi 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=1 untuk 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 unlimited untuk mengatur jumlah maksimum memori fisik yang dapat dikunci oleh proses menjadi tidak terbatas.

    Catatan

    Jika 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.

    Catatan

    Jika 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().

    Catatan

    Ini 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_QP dalam file konfigurasi NetACC atau saat menjalankan perintah netacc_run untuk 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.

      Catatan

      Jika 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.

Parameter Umum yang Digunakan Bersama dengan Perintah redis-server

Perintah redis-server digunakan untuk memulai server Redis. Anda dapat menjalankan perintah redis-server -h untuk melihat parameter yang dapat Anda gunakan bersama dengan perintah redis-server. Perhatikan parameter dalam perintah redis-server sampel berikut:

redis-server --port 6379 --protected-mode no
  • --port 6379: Parameter --port menentukan port tempat Anda ingin memulai server Redis. Nilai default: 6379. Jika Anda tidak menentukan parameter, nilai default digunakan. Dalam contoh ini, parameter diatur ke 6379.

  • --protected-mode no: Parameter --protected-mode menentukan apakah akan mengaktifkan mode proteksi untuk server Redis. Mode proteksi adalah fitur keamanan Redis. Saat mode proteksi diaktifkan, server Redis hanya menerima koneksi dari klien yang berjalan di host lokal (127.0.0.1 atau localhost) dan menolak semua koneksi dari host eksternal. Nilai no menentukan bahwa server Redis menerima koneksi dari semua alamat IP.

    Penting

    Jika Anda menonaktifkan mode proteksi dalam lingkungan produksi, lingkungan produksi mungkin terpapar risiko keamanan. Lanjutkan dengan hati-hati dalam lingkungan jaringan terbuka.

Parameter Perintah Umum yang Digunakan Bersama dengan redis-benchmark

redis-benchmark adalah alat uji stres yang disediakan oleh Redis untuk menguji kinerja Redis dengan mensimulasikan beberapa klien untuk mengirim sejumlah besar permintaan. Anda dapat menjalankan perintah redis-benchmark --help untuk melihat parameter yang dapat Anda gunakan bersama dengan perintah redis-benchmark. Perhatikan parameter dalam perintah redis-benchmark sampel berikut:

redis-benchmark -h 172.17.0.90 -p 6379 -c 100 -n 5000000 -r 10000 --threads 4 -d 512 -t set
  • -h 172.17.0.90: Parameter -h menentukan nama host atau alamat IP server Redis. Dalam contoh ini, parameter -h diatur ke 172.17.0.90.

  • -p 6379: Parameter -p menentukan port tempat Redis dimulai. Nilai default: 6379. Jika Redis dimulai pada port 6379, Anda tidak perlu menentukan parameter ini. Jika Redis dimulai pada port berbeda, atur parameter ini ke nomor port tersebut.

    Catatan

    Anda dapat menjalankan perintah sudo grep "^port" /<Path tempat file redis.conf disimpan>/redis.conf untuk menanyakan port tempat Redis dimulai. Secara default, file redis.conf disimpan di path /etc/redis.conf.

  • -c 100: Parameter -c menentukan jumlah koneksi bersamaan (klien). Dalam contoh ini, parameter -c diatur ke 100.

  • -n 5000000: Parameter -n menentukan jumlah total permintaan yang akan dibuat. Dalam contoh ini, parameter -n diatur ke 5000000.

  • -r 10000: Parameter -r menentukan rentang kunci acak yang akan digunakan. Dalam contoh ini, parameter -r diatur ke 10000, yang menentukan bahwa perintah SET menggunakan bilangan bulat acak dari 0 hingga 9999 sebagai bagian dari kunci dalam benchmark.

  • --threads 4: Parameter --threads menentukan jumlah thread. Dalam contoh ini, parameter --threads diatur ke 4. Secara default, redis-benchmark hanya menggunakan satu thread untuk menjalankan benchmark. Namun, sistem tertentu memungkinkan redis-benchmark menggunakan beberapa thread untuk mensimulasikan konkurensi.

  • -d 512: Parameter -d menentukan ukuran data setiap permintaan SET dalam byte. Dalam contoh ini, parameter -d diatur ke 512.

  • -t set: Parameter -t menentukan untuk menjalankan hanya subset tes. Parameter -t diikuti oleh nama perintah yang ingin Anda uji. Dalam contoh ini, parameter -t diatur ke set untuk membandingkan kinerja hanya perintah SET.

Perintah sampel sebelumnya menggunakan empat thread untuk membuat 100 koneksi bersamaan per thread ke server Redis yang berjalan di 172.17.0.90 dan mengirim 5 juta permintaan SET ke server. Setiap permintaan SET berisi 512 byte data acak dan menggunakan bilangan bulat acak dari 0 hingga 9999 sebagai bagian dari kunci.

Metrik Umum dalam Hasil Benchmark redis-benchmark

  • Ringkasan Throughput:

    rps: jumlah permintaan yang dapat diproses server Redis per detik selama benchmark. Misalnya, 332933.81 requests per second menunjukkan bahwa server Redis dapat memproses 332.934 permintaan per detik.

  • Ringkasan Latensi: Satuan: milidetik.

    • avg: latensi rata-rata, yaitu waktu respons rata-rata di semua permintaan.

    • min: latensi minimum, yaitu waktu respons minimum di semua permintaan.

    • p50: persentil ke-50, yang menunjukkan bahwa 50% permintaan lebih cepat dari nilai latensi ini.

    • p95: persentil ke-95, yang menunjukkan bahwa 95% permintaan lebih cepat dari nilai latensi ini.

    • p99: persentil ke-99, yang menunjukkan bahwa 99% permintaan lebih cepat dari nilai latensi ini.

    • max: latensi maksimum, yaitu waktu respons maksimum di semua permintaan.

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.

    Catatan
    • Dalam 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".

Contoh Cara Mengonfigurasi Parameter Tertentu Selama Pembuatan Instance ECS

Saat Anda membuat instance ECS, perhatikan parameter atau opsi berikut. Untuk informasi tentang parameter lain di halaman pembelian instance ECS, lihat Buat Instance pada Tab Peluncuran Kustom.

  • Instances & Images: Pilih tipe instance yang mendukung eRDMA dan instal driver eRDMA.

    • Instance: Untuk informasi lebih lanjut, lihat bagian Batasan dari topik ini.

    • Image: Klik tab Public Images, pilih gambar publik, lalu pilih Auto-install eRDMA Driver. Sistem secara otomatis menginstal driver eRDMA saat instance dimulai.

      eRDMA

  • ENI: Pilih opsi eRDMA Interface di sisi kanan Primary ENI untuk mengikat ERI ke instance ECS.

    image

    Catatan

    Saat Anda membuat instance tingkat perusahaan, Anda hanya dapat mengaktifkan fitur ERI untuk antarmuka jaringan elastis (ENI) utama. Anda dapat mengaktifkan fitur ERI untuk ENI sekunder di konsol ECS atau dengan memanggil operasi API. Untuk informasi lebih lanjut, lihat ERIs.

Catatan

Saat Anda membuat instance tingkat perusahaan, Anda hanya dapat mengaktifkan fitur ERI untuk antarmuka jaringan elastis (ENI) utama. Anda dapat mengaktifkan fitur ERI untuk ENI sekunder di konsol ECS atau dengan memanggil operasi API. Untuk informasi lebih lanjut, lihat ERIs.

Prosedur

  1. 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.

  2. Periksa apakah driver eRDMA terinstal pada instance ECS.

    Setelah instance ECS dimulai, jalankan perintah ibv_devinfo untuk memeriksa apakah driver eRDMA terinstal.

    • Keluaran perintah berikut menunjukkan bahwa driver eRDMA terinstal.

      image

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

      image

  3. Jalankan perintah berikut pada instance ECS untuk menginstal Redis:

    sudo yum install -y redis

    Keluaran perintah berikut menunjukkan bahwa Redis terinstal.

    image

  4. Gunakan utilitas redis-benchmark untuk membandingkan kinerja Redis.

    Lakukan benchmark menggunakan NetACC
    1. 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 no
      Catatan

      Keluaran perintah berikut menunjukkan bahwa Redis dimulai sesuai harapan.

      image

    2. 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 set
      Catatan
      • Ganti 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.

      Contoh Hasil Benchmark Redis

      ====== SET ======                                                      
        5000000 requests completed in 6.52 seconds
        100 parallel clients
        512 bytes payload
        keep alive: 1
        host configuration "save": 3600 1 300 100 60 10000
        host configuration "appendonly": no
        multi-thread: yes
        threads: 4
      
      Latency by percentile distribution:
      0.000% <= 0.039 milliseconds (cumulative count 3)
      50.000% <= 0.127 milliseconds (cumulative count 2677326)
      75.000% <= 0.143 milliseconds (cumulative count 3873096)
      87.500% <= 0.151 milliseconds (cumulative count 4437348)
      93.750% <= 0.159 milliseconds (cumulative count 4715347)
      96.875% <= 0.175 milliseconds (cumulative count 4890339)
      98.438% <= 0.183 milliseconds (cumulative count 4967042)
      99.609% <= 0.191 milliseconds (cumulative count 4991789)
      99.902% <= 0.207 milliseconds (cumulative count 4995847)
      99.951% <= 0.263 milliseconds (cumulative count 4997733)
      99.976% <= 0.303 milliseconds (cumulative count 4998853)
      99.988% <= 0.343 milliseconds (cumulative count 4999403)
      99.994% <= 0.367 milliseconds (cumulative count 4999704)
      99.997% <= 0.391 milliseconds (cumulative count 4999849)
      99.998% <= 2.407 milliseconds (cumulative count 4999924)
      99.999% <= 5.407 milliseconds (cumulative count 4999962)
      100.000% <= 6.847 milliseconds (cumulative count 4999981)
      100.000% <= 8.423 milliseconds (cumulative count 4999991)
      100.000% <= 8.919 milliseconds (cumulative count 4999996)
      100.000% <= 9.271 milliseconds (cumulative count 4999998)
      100.000% <= 9.471 milliseconds (cumulative count 4999999)
      100.000% <= 9.583 milliseconds (cumulative count 5000000)
      100.000% <= 9.583 milliseconds (cumulative count 5000000)
      
      Cumulative distribution of latencies:
      18.820% <= 0.103 milliseconds (cumulative count 941003)
      99.917% <= 0.207 milliseconds (cumulative count 4995847)
      99.977% <= 0.303 milliseconds (cumulative count 4998853)
      99.998% <= 0.407 milliseconds (cumulative count 4999879)
      99.998% <= 0.503 milliseconds (cumulative count 4999903)
      99.998% <= 0.703 milliseconds (cumulative count 4999904)
      99.998% <= 0.807 milliseconds (cumulative count 4999905)
      99.998% <= 0.903 milliseconds (cumulative count 4999906)
      99.998% <= 1.007 milliseconds (cumulative count 4999908)
      99.998% <= 1.103 milliseconds (cumulative count 4999909)
      99.998% <= 1.207 milliseconds (cumulative count 4999912)
      99.998% <= 1.407 milliseconds (cumulative count 4999913)
      99.998% <= 1.503 milliseconds (cumulative count 4999915)
      99.998% <= 1.607 milliseconds (cumulative count 4999916)
      99.998% <= 1.703 milliseconds (cumulative count 4999917)
      99.998% <= 1.807 milliseconds (cumulative count 4999918)
      99.998% <= 1.903 milliseconds (cumulative count 4999919)
      99.998% <= 2.103 milliseconds (cumulative count 4999920)
      99.999% <= 3.103 milliseconds (cumulative count 4999931)
      99.999% <= 4.103 milliseconds (cumulative count 4999944)
      99.999% <= 5.103 milliseconds (cumulative count 4999958)
      99.999% <= 6.103 milliseconds (cumulative count 4999971)
      100.000% <= 7.103 milliseconds (cumulative count 4999984)
      100.000% <= 8.103 milliseconds (cumulative count 4999989)
      100.000% <= 9.103 milliseconds (cumulative count 4999996)
      100.000% <= 10.103 milliseconds (cumulative count 5000000)
      
      Summary:
        throughput summary: 767341.94 requests per second
        latency summary (msec):
                avg       min       p50       p95       p99       max
              0.126     0.032     0.127     0.167     0.183     9.583

      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.

    Gunakan netacc_ss untuk Memantau Server Redis Selama Benchmark

    Selama benchmark, Anda dapat menggunakan netacc_ss pada instance ECS yang berfungsi sebagai server Redis untuk memantau server.

    • Jalankan perintah berikut untuk menanyakan ID proses Redis (redis-server):

      ps -ef | grep redis-server

      Keluaran perintah berikut menunjukkan bahwa ID proses redis-server adalah 114379.

      image

    • Jalankan perintah berikut untuk menanyakan informasi koneksi Redis dan status data yang dikirim dan diterima oleh Redis:

      netacc_ss -p 114379 -s all
      Catatan

      Ganti 114379 dalam perintah sebelumnya dengan ID proses Redis aktual. Untuk informasi lebih lanjut, lihat bagian Perintah netacc_ss dari topik ini.

      Keluaran perintah berikut menunjukkan bahwa koneksi soket yang dibuat untuk Redis adalah koneksi RDMA. Ini karena fitur ERI diaktifkan untuk ENI pada instance ECS yang berfungsi sebagai server Redis dan klien Redis. Empat kolom paling kanan menunjukkan jumlah dan volume pesan yang dikirim dan diterima.

      image

    Lakukan benchmark tanpa NetACC
    1. Jalankan perintah berikut pada instance ECS yang berfungsi sebagai server Redis untuk memulai Redis:

      redis-server --port 6379 --protected-mode no --save
      Catatan

      Ganti 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.

      image

    2. 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 set
      Catatan
      • Ganti 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.

      Contoh Hasil Benchmark Redis

      ====== SET ======                                                         
        5000000 requests completed in 15.02 seconds
        100 parallel clients
        512 bytes payload
        keep alive: 1
        host configuration "save": 
        host configuration "appendonly": no
        multi-thread: yes
        threads: 4
      
      Latency by percentile distribution:
      0.000% <= 0.055 milliseconds (cumulative count 27)
      50.000% <= 0.287 milliseconds (cumulative count 2635010)
      75.000% <= 0.335 milliseconds (cumulative count 3782931)
      87.500% <= 0.367 milliseconds (cumulative count 4459136)
      93.750% <= 0.391 milliseconds (cumulative count 4720397)
      96.875% <= 0.415 milliseconds (cumulative count 4855130)
      98.438% <= 0.439 milliseconds (cumulative count 4936478)
      99.219% <= 0.455 milliseconds (cumulative count 4965765)
      99.609% <= 0.471 milliseconds (cumulative count 4984031)
      99.805% <= 0.487 milliseconds (cumulative count 4993326)
      99.902% <= 0.495 milliseconds (cumulative count 4995579)
      99.951% <= 0.511 milliseconds (cumulative count 4997659)
      99.976% <= 0.551 milliseconds (cumulative count 4998848)
      99.988% <= 0.599 milliseconds (cumulative count 4999468)
      99.994% <= 0.631 milliseconds (cumulative count 4999722)
      99.997% <= 0.663 milliseconds (cumulative count 4999862)
      99.998% <= 0.695 milliseconds (cumulative count 4999924)
      99.999% <= 0.759 milliseconds (cumulative count 4999964)
      100.000% <= 0.807 milliseconds (cumulative count 4999982)
      100.000% <= 1.935 milliseconds (cumulative count 4999993)
      100.000% <= 2.071 milliseconds (cumulative count 4999996)
      100.000% <= 2.111 milliseconds (cumulative count 4999998)
      100.000% <= 2.119 milliseconds (cumulative count 4999999)
      100.000% <= 2.143 milliseconds (cumulative count 5000000)
      100.000% <= 2.143 milliseconds (cumulative count 5000000)
      
      Cumulative distribution of latencies:
      0.028% <= 0.103 milliseconds (cumulative count 1377)
      0.985% <= 0.207 milliseconds (cumulative count 49228)
      60.094% <= 0.303 milliseconds (cumulative count 3004705)
      96.325% <= 0.407 milliseconds (cumulative count 4816230)
      99.938% <= 0.503 milliseconds (cumulative count 4996887)
      99.991% <= 0.607 milliseconds (cumulative count 4999546)
      99.999% <= 0.703 milliseconds (cum<p>Cumulative distribution of latencies:
      0.028% <= 0.103 milliseconds (cumulative count 1377)
      0.985% <= 0.207 milliseconds (cumulative count 49228)
      60.094% <= 0.303 milliseconds (cumulative count 3004705)
      96.325% <= 0.407 milliseconds (cumulative count 4816230)
      99.938% <= 0.503 milliseconds (cumulative count 4996887)
      99.991% <= 0.607 milliseconds (cumulative count 4999546)
      99.999% <= 0.703 milliseconds (cumulative count 4999927)
      100.000% <= 0.807 milliseconds (cumulative count 4999982)
      100.000% <= 0.903 milliseconds (cumulative count 4999987)
      100.000% <= 1.903 milliseconds (cumulative count 4999990)
      100.000% <= 2.007 milliseconds (cumulative count 4999995)
      100.000% <= 2.103 milliseconds (cumulative count 4999997)
      100.000% <= 3.103 milliseconds (cumulative count 5000000)
      
      Summary:
        throughput summary: 332955.97 requests per second
        latency summary (msec):
                avg       min       p50       p95       p99       max
              0.292     0.048     0.287     0.399     0.447     2.143

      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.