Terapkan bRPC pada instans ECS yang mendukung eRDMA untuk mencapai latensi lebih rendah, throughput lebih tinggi, dan penggunaan CPU yang lebih efisien.
-
bRPC adalah framework RPC umum berkinerja tinggi dalam C++. Framework ini menyediakan alat untuk menyederhanakan pengembangan dan penerapan layanan. Kasus penggunaan umum meliputi pencarian, penyimpanan, pembelajaran mesin, dan periklanan. bRPC cocok untuk layanan mikro berkonkurensi tinggi dengan latensi rendah serta sistem terdistribusi berskala besar. Lihat instruksi build bRPC.
-
eRDMA (Elastic Remote Direct Memory Access) adalah layanan jaringan RDMA cloud-native yang menyediakan latensi rendah, throughput tinggi, dan elastisitas tinggi. Lihat Ikhtisar eRDMA.
Langkah 1: Siapkan lingkungan
Buat dua instans ECS yang mendukung eRDMA sebagai server dan klien. Tentukan item konfigurasi berikut:
-
Tipe instans: Pilih tipe instans yang mendukung eRDMA. Lihat Batasan. Topik ini menggunakan ecs.g8a.8xlarge.
-
Image: Pilih image yang kompatibel dengan eRDMA. Lihat Batasan. Topik ini menggunakan Alibaba Cloud Linux 3.2104 LTS 64-bit.
-
Instal driver eRDMA: Pilih Install eRDMA driver. Driver akan terinstal secara otomatis selama startup instans.
CatatanSetelah instans dimulai, tunggu 3 hingga 5 menit hingga instalasi driver selesai. Lihat Aktifkan eRDMA pada instans tingkat enterprise.
-
Jaringan:
-
Aktifkan akses Internet untuk kedua instans.
-
Interkoneksi layanan diaktifkan secara default dalam VPC yang sama.
-
Untuk ENI, pilih Elastic RDMA interface di samping NIC.
-
Untuk parameter lainnya, lihat Sesuaikan dan beli instans.
Langkah 2: Terapkan dan kompilasi bRPC
Terapkan dan kompilasi bRPC pada kedua instans. Langkah-langkah berikut menggunakan Alibaba Cloud Linux 3 sebagai contoh. Untuk sistem operasi lain, lihat Kompilasi bRPC.
-
Login ke kedua instans ECS. Lihat Gunakan Workbench untuk login ke instans Linux.
-
Ubah mode pembentukan koneksi untuk eRDMA dan bRPC agar kompatibel.
CatatanSecara default, eRDMA menggunakan RDMA_CM untuk membentuk koneksi, sedangkan bRPC menggunakan mode Out-of-Band (OOB). Ubah mode koneksi keduanya agar kompatibel.
sudo sh -c "echo 'options erdma compat_mode=Y' >> /etc/modprobe.d/erdma.conf" sudo dracut --force sudo rmmod erdma sudo modprobe erdma compat_mode=Y -
Hapus batasan locking memori. Aplikasi eRDMA biasanya memerlukan jumlah memori yang besar.
-
Edit file
limits.conf.sudo vi /etc/security/limits.conf -
Tambahkan baris berikut di akhir file dan simpan.
* soft memlock unlimited * hard memlock unlimited
-
-
Terapkan aplikasi bRPC.
sudo yum install git gcc-c++ make openssl-devel gflags-devel protobuf-devel protobuf-compiler leveldb-devel -y git clone https://github.com/apache/brpc.git -
Terapkan patch berikut pada kedua instans untuk meningkatkan kinerja bRPC dengan eRDMA.
-
Di direktori
brpc, buat file bernamaerdma-multi-sge.patch:cd ~/brpc sudo vi erdma-multi-sge.patch -
Tambahkan konten berikut dan simpan.
diff --git a/src/brpc/rdma/rdma_helper.cpp b/src/brpc/rdma/rdma_helper.cpp index cf1cce95..d2592cbb 100644 --- a/src/brpc/rdma/rdma_helper.cpp +++ b/src/brpc/rdma/rdma_helper.cpp @@ -619,7 +619,7 @@ void DeregisterMemoryForRdma(void* buf) { } int GetRdmaMaxSge() { - return g_max_sge; + return 4; } int GetRdmaCompVector() { -- 2.39.3 -
Terapkan patch ke kode sumber bRPC.
patch -p1 < erdma-multi-sge.patch -
Kompilasi kode sumber bRPC.
sh config_brpc.sh --with-rdma --headers="/usr/include" --libs="/usr/lib64 /usr/bin" make -j cd example/rdma_performance; make -j
-
Langkah 3: Uji kinerja
Uji kinerja bRPC dengan dan tanpa eRDMA, lalu bandingkan hasilnya.
-
Uji kinerja bRPC dalam dua skenario berikut.
Dengan eRDMA diaktifkan
-
Di server, jalankan server dengan eRDMA diaktifkan.
./server --rdma_gid_index=1 --rdma_prepared_qp_cnt=0 --use_rdma=true -
Di klien, hubungkan ke server dengan eRDMA diaktifkan.
./client --servers=<server private IP address>:8002 --rpc_timeout_ms=-1 --attachment_size=1024 --rdma_gid_index=1 --rdma_prepared_qp_cnt=0 --use_rdma=true --queue_depth=16Parameter:
-
Ganti
<server private IP address>dengan Alamat IP pribadi server. -
--attachment_size: ukuran data yang dilampirkan pada setiap panggilan bRPC. Nilai yang lebih besar lebih memanfaatkan eRDMA tetapi meningkatkan kompleksitas manajemen memori. Atur sesuai kebutuhan pengujian Anda. -
--queue_depth: jumlah permintaan konkuren yang dapat ditampung antrian. Kedalaman yang lebih tinggi membantu menangani lonjakan traffic tetapi mengonsumsi lebih banyak memori. Atur sesuai kebutuhan pengujian Anda.
-
Tanpa eRDMA diaktifkan
-
Di server, jalankan server dengan TCP.
./server --rdma_gid_index=1 --rdma_prepared_qp_cnt=0 --use_rdma=false -
Di klien, hubungkan ke server dengan TCP.
./client --servers=<server private IP address>:8002 --rpc_timeout_ms=-1 --attachment_size=1024 --rdma_gid_index=1 --rdma_prepared_qp_cnt=0 --use_rdma=false --queue_depth=16Parameter:
-
Ganti
<server private IP address>dengan Alamat IP pribadi server. -
--attachment_size: ukuran data yang dilampirkan pada setiap panggilan bRPC. Nilai yang lebih besar lebih memanfaatkan eRDMA tetapi meningkatkan kompleksitas manajemen memori. Atur sesuai kebutuhan pengujian Anda. -
--queue_depth: jumlah permintaan konkuren yang dapat ditampung antrian. Kedalaman yang lebih tinggi membantu menangani lonjakan traffic tetapi mengonsumsi lebih banyak memori. Atur sesuai kebutuhan pengujian Anda.
-
-
-
Bandingkan hasil dari kedua skenario tersebut. Periksa bidang
Avg-Latencyuntuk latensi dan bidangQPSuntuk throughput guna mengevaluasi peningkatan kinerja eRDMA.