All Products
Search
Document Center

Elastic Compute Service:Gunakan NetACC untuk mempercepat aplikasi TCP

Last Updated:Mar 27, 2026

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.

Penting

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.conf akan dibuat secara otomatis. Untuk mengoptimalkan performa NetACC, Anda dapat mengonfigurasi parameter tertentu dalam berkas konfigurasi sesuai kebutuhan bisnis, 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 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:

    Contoh Berkas Konfigurasi /etc/netacc.conf

    [netacc]
    # Ukuran buffer. Jika blok data yang akan dikirim besar, Anda dapat menambah ukuran untuk meningkatkan performa atau mengurangi ukuran untuk menghemat memori.
    # int
    NACC_SOR_MSG_SIZE=16384
    
    # Ukuran MR pertama yang diregistrasi oleh RDMA. Anda dapat mengurangi ukuran untuk menghemat memori.
    # Atur parameter ini ke nilai kelipatan pangkat N dari 2 terhadap nilai NACC_SOR_MSG_SIZE. Kelipatan minimum adalah 1.
    NACC_RDMA_MR_MIN_INC_SIZE=16384
    
    # Ukuran maksimum MR yang diregistrasi oleh RDMA, rentangnya antara 1 MB hingga 512 MB. Anda dapat mengurangi ukuran untuk menghemat memori.
    # Atur parameter ini ke nilai kelipatan pangkat N dari 2 terhadap nilai NACC_RDMA_MR_MIN_INC_SIZE. Kelipatan minimum adalah 1.
    NACC_RDMA_MR_MAX_INC_SIZE=8388608
    
    # Jumlah koneksi per QP. Anda dapat menambah nilai untuk meningkatkan performa. Dalam skenario tertentu, atur parameter ini ke 1.
    # int
    NACC_SOR_CONN_PER_QP=1
    
    # Jumlah thread NetACC. Jika throughput tinggi, tambah nilai ini.
    # int
    NACC_SOR_IO_THREADS=1
    
    # Waktu kedaluwarsa QP kosong. Satuan: milidetik. Nilai 0 berarti QP kosong langsung kedaluwarsa. Nilai -1 berarti 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.
    
    # Afinisitas thread.
    # string
    NACC_SOR_AFFINITY=""
    
    # Menentukan apakah TCP diprioritaskan 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 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.

Parameter perintah netacc_run

netacc_run -h
Usage: netacc_run [ OPTIONS ] COMMAND

Run COMMAND using NetACC for TCP sockets

OPTIONS:
   -f <path>   set config file, default /etc/netacc.conf
   -p <num>    set max connections per QP, default 1
   -t <num>    set netacc io threads, default 4
   -s <num>    set netacc message size, default 16384
   -F <num>    fast connect mode, default 0
   -d          enable debug mode
   -T          use TCP first in connect
   -P <num>    polling cq time ms
   -A <str>    affinity CPU list, 0 | 1-3 | 1,3,4
   -i <num>    set cq comp_vector, default 0
   -h          display this message
   -v          display version info
  • Contoh:

    Dalam contoh berikut, digunakan aplikasi Redis. Tambahkan netacc_run sebelum perintah Redis untuk menjalankan aplikasi Redis sekaligus memuat NetACC.

    • Jalankan perintah berikut untuk menjalankan Redis dan memuat NetACC secara bersamaan:

      netacc_run redis-server
    • Jalankan 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.

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

    ldconfig -p | grep netacc

    Output perintah berikut akan ditampilkan.

    image

  2. Jalankan perintah berikut untuk mengonfigurasi variabel lingkungan LD_PRELOAD guna 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, digunakan aplikasi Redis.

    • Jalankan perintah berikut untuk menjalankan Redis dan memuat NetACC secara bersamaan:

      LD_PRELOAD=/lib64/libnetacc-preload.so redis-server
    • Jalankan perintah berikut untuk menjalankan utilitas redis-benchmark dan memuat NetACC secara bersamaan:

      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 mempercepatnya dengan NetACC saat startup, konfigurasikan variabel lingkungan LD_PRELOAD dalam skrip tersebut. Misalnya, Anda dapat membuat skrip bernama run_with_netacc.

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

    Jalankan perintah berikut untuk menjalankan aplikasi dan memuat NetACC secara bersamaan:

    ./run_with_netacc.sh your_application

    Contoh: Dalam contoh berikut, digunakan aplikasi Redis.

    • Jalankan perintah berikut untuk menjalankan Redis dan memuat NetACC secara bersamaan:

      ./run_with_netacc.sh redis-server
    • Jalankan perintah berikut untuk menjalankan utilitas redis-benchmark dan memuat NetACC secara bersamaan:

      ./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 NetACC. Untuk memantau NetACC, Anda dapat menjalankan perintah ini di server dan klien.

Perintah netacc_ss

netacc_ss -h
Usage:
 netacc_ss: [-p] <pid> [options]...
 Show monitoring information of specified netacc process

Options:
 -c   clear unused sock file
 -h   display this help
 -s   display specified monitoring metric[s]. [all|cfg|cnt|mem|qp|sock]
      all: all monitoring information
      cfg: configuration information
      cnt: counter information[default]
      mem: memory information
      qp : queue pair information
      sock: socket information
 -v   display netacc version

Examples:
 netacc_ss -p 12345 -s mem,cnt

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

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.

    Catatan

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

    Catatan

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

    Catatan

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

    Catatan

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

    Catatan

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

      Catatan

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

Parameter umum yang digunakan bersama perintah redis-server

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

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

  • --protected-mode no: Parameter --protected-mode menentukan apakah mode terlindung diaktifkan untuk server Redis. Mode terlindung adalah fitur keamanan Redis. Saat mode terlindung 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 berarti server Redis menerima koneksi dari semua alamat IP.

    Penting

    Jika Anda menonaktifkan mode terlindung di lingkungan produksi, lingkungan produksi mungkin terpapar risiko keamanan. Lakukan dengan hati-hati di lingkungan jaringan terbuka.

Parameter perintah umum yang digunakan bersama redis-benchmark

redis-benchmark adalah alat uji stres yang disediakan Redis untuk menguji performa Redis dengan mensimulasikan banyak klien yang mengirim banyak permintaan. Anda dapat menjalankan perintah redis-benchmark --help untuk melihat parameter yang dapat digunakan bersama perintah redis-benchmark. Perhatikan parameter dalam contoh perintah redis-benchmark 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 hostname atau alamat IP server Redis. Dalam contoh ini, parameter -h diatur ke 172.17.0.90.

  • -p 6379: Parameter -p menentukan port tempat Redis dijalankan. Nilai default: 6379. Jika Redis dijalankan di port 6379, Anda tidak perlu menentukan parameter ini. Jika Redis dijalankan di 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 mengetahui port tempat Redis dijalankan. 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 5.000.000: Parameter -n menentukan total jumlah permintaan yang akan dibuat. Dalam contoh ini, parameter -n diatur ke 5.000.000.

  • -r 10.000: Parameter -r menentukan rentang kunci acak yang digunakan. Dalam contoh ini, parameter -r diatur ke 10.000, yang berarti perintah SET menggunakan bilangan bulat acak dari 0 hingga 9.999 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 hanya menjalankan subset pengujian tertentu. Parameter -t diikuti oleh nama perintah yang ingin diuji. Dalam contoh ini, parameter -t diatur ke set untuk mengukur performa hanya perintah SET.

Perintah contoh di atas 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 9.999 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, 332.933,81 requests per second berarti server Redis dapat memproses 332.934 permintaan per detik.

  • Ringkasan Latensi: Satuan: milidetik.

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

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

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

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

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

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

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.

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

Contoh cara mengonfigurasi parameter tertentu saat pembuatan Instance ECS

Saat membuat Instance ECS, perhatikan parameter atau opsi berikut. Untuk informasi parameter lain di halaman pembelian Instance ECS, lihat Custom launch ECS instances.

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

    • Instance: Untuk informasi lebih lanjut, lihat bagian Limits dalam topik ini.

    • Images: Klik tab Public Image, pilih image publik, lalu pilih Auto-install eRDMA Driver. Sistem akan secara otomatis menginstal driver eRDMA saat instans dijalankan.

      eRDMA

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

    image

    Catatan

    Saat membuat instans enterprise-level, Anda hanya dapat mengaktifkan fitur ERI untuk elastic network interface (ENI) primer. Anda dapat mengaktifkan fitur ERI untuk ENI sekunder di Konsol ECS atau dengan memanggil operasi API. Untuk informasi lebih lanjut, lihat ERIs.

Catatan

Saat membuat instans enterprise-level, Anda hanya dapat mengaktifkan fitur ERI untuk elastic network interface (ENI) primer. 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 Use Workbench to log on to a Linux instance over SSH.

  2. Periksa apakah driver eRDMA telah diinstal pada Instance ECS.

    Setelah Instance ECS dijalankan, jalankan perintah ibv_devinfo untuk memeriksa apakah driver eRDMA telah diinstal.

    • Output perintah berikut menunjukkan bahwa driver eRDMA telah diinstal.

      image

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

      image

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

    sudo yum install -y redis

    Output perintah berikut menunjukkan bahwa Redis telah diinstal.

    image

  4. Gunakan utilitas redis-benchmark untuk mengukur performa Redis.

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

      Output perintah berikut menunjukkan bahwa Redis telah dijalankan sesuai harapan.

      image

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

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

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

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

      ps -ef | grep redis-server

      Output perintah berikut menunjukkan bahwa ID proses redis-server adalah 114.379.

      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 yang sebenarnya. Untuk informasi selengkapnya, lihat bagian perintah netacc_ss pada topik ini.

      Output perintah berikut menunjukkan bahwa koneksi socket yang dibuat untuk Redis adalah koneksi RDMA. Hal 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 menjalankan Redis:

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

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

      image

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

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