Daha düşük gecikme süresi, daha yüksek aktarım hızı ve daha az CPU kullanımı elde etmek için bRPC'yi eRDMA özellikli ECS örneklerine dağıtın.
bRPC, C++ dilinde yazılmış yüksek performanslı ve genel amaçlı bir RPC çerçevesidir. Hizmet geliştirme ve dağıtım süreçlerini basitleştiren araçlar sunar. Arama, depolama, makine öğrenimi ve reklamcılık gibi alanlarda yaygın olarak kullanılır. bRPC, yüksek eşzamanlılık gerektiren, düşük gecikme süreli mikroservisler ve büyük ölçekli dağıtık sistemler için uygundur. Ayrıntılı bilgi için bkz. bRPC oluşturma talimatları.
eRDMA (elastic Remote Direct Memory Access), düşük gecikme süresi, yüksek aktarım hızı ve yüksek esneklik sağlayan cloud-native bir RDMA ağ hizmetidir. Ayrıntılı bilgi için bkz. eRDMA'ya Genel Bakış.
Adım 1: Ortamı hazırlama
Sunucu ve istemci olarak kullanmak üzere iki adet eRDMA özellikli ECS örneği oluşturun. Aşağıdaki yapılandırma öğelerini belirtin:
Örnek türü: eRDMA özellikli bir örnek türü seçin. Ayrıntılar için bkz. Sınırlamalar. Bu konuda ecs.g8a.8xlarge kullanılmaktadır.
Görüntü: eRDMA ile uyumlu bir görüntü seçin. Ayrıntılar için bkz. Sınırlamalar. Bu konuda Alibaba Cloud Linux 3.2104 LTS 64-bit kullanılmaktadır.
-
eRDMA sürücüsünü yükleyin: Install eRDMA driver seçeneğini belirleyin. Sürücü, örnek başlatma sırasında otomatik olarak yüklenir.
NotÖrnek başladıktan sonra sürücü kurulumunun tamamlanması için 3 ila 5 dakika bekleyin. Ayrıntılı bilgi için bkz. Kurumsal düzeydeki örneklerde eRDMA'yı etkinleştirme.
-
Ağ yapılandırması:
Her iki örnek için de İnternet erişimini etkinleştirin.
Aynı VPC içindeki hizmetler arasında bağlantı varsayılan olarak etkindir.
ENI için NIC yanındaki Elastic RDMA interface seçeneğini belirleyin.
Diğer parametreler için bkz. Özel bir örnek özelleştirme ve satın alma.
Adım 2: bRPC'yi dağıtma ve derleme
bRPC'yi her iki örneğe de dağıtın ve derleyin. Aşağıdaki adımlarda örnek olarak Alibaba Cloud Linux 3 kullanılmıştır. Diğer işletim sistemleri için bkz. bRPC Derleme.
Her iki ECS örneğinde de oturum açın. Ayrıntılı bilgi için bkz. Workbench kullanarak bir Linux örneğinde oturum açma.
-
Uyumluluğu sağlamak için eRDMA ve bRPC arasındaki bağlantı kurulum modunu değiştirin.
NotVarsayılan olarak eRDMA, bağlantıları kurmak için RDMA_CM kullanırken bRPC Out-of-Band (OOB) modunu kullanır. Uyumluluğu sağlamak için her ikisinin bağlantı modunu değiştirin.
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 -
Bellek kilitleme sınırlarını kaldırın. eRDMA uygulamaları genellikle büyük miktarda bellek gerektirir.
-
limits.confdosyasını düzenleyin.sudo vi /etc/security/limits.conf -
Dosyanın sonuna aşağıdaki satırları ekleyin ve kaydedin.
* soft memlock unlimited * hard memlock unlimited
-
-
bRPC uygulamasını dağıtın.
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 -
eRDMA ile bRPC performansını artırmak için her iki örnekte de aşağıdaki yamayı uygulayın.
-
brpcdizinindeerdma-multi-sge.patchadlı bir dosya oluşturun:cd ~/brpc sudo vi erdma-multi-sge.patch -
Aşağıdaki içeriği ekleyin ve kaydedin.
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 -
Yamayı bRPC kaynak koduna uygulayın.
patch -p1 < erdma-multi-sge.patch -
bRPC kaynak kodunu derleyin.
sh config_brpc.sh --with-rdma --headers="/usr/include" --libs="/usr/lib64 /usr/bin" make -j cd example/rdma_performance; make -j
-
Adım 3: Performansı test etme
bRPC performansını eRDMA etkinken ve etkisizken test edin, ardından sonuçları karşılaştırın.
-
bRPC performansını aşağıdaki iki senaryoda test edin.
eRDMA etkinken
-
Sunucuda, eRDMA etkinken sunucuyu başlatın.
./server --rdma_gid_index=1 --rdma_prepared_qp_cnt=0 --use_rdma=true -
İstemcide, eRDMA etkinken sunucuya bağlanın.
./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=16Parametreler:
<server private IP address>ifadesini sunucunun özel IP adresiyle değiştirin.--attachment_size: Her bir bRPC çağrısına eklenen veri boyutu. Daha büyük değerler eRDMA'dan daha iyi yararlanılmasını sağlar ancak bellek yönetimi karmaşıklığını artırır. Test gereksinimlerinize göre ayarlayın.--queue_depth: Kuyruğun tutabileceği eşzamanlı istek sayısı. Daha yüksek bir derinlik, trafik artışlarını işlemeye yardımcı olur ancak daha fazla bellek tüketir. Test gereksinimlerinize göre ayarlayın.
eRDMA etkisizken
-
Sunucuda, TCP kullanarak sunucuyu başlatın.
./server --rdma_gid_index=1 --rdma_prepared_qp_cnt=0 --use_rdma=false -
İstemcide, TCP kullanarak sunucuya bağlanın.
./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=16Parametreler:
<server private IP address>ifadesini sunucunun özel IP adresiyle değiştirin.--attachment_size: Her bir bRPC çağrısına eklenen veri boyutu. Daha büyük değerler eRDMA'dan daha iyi yararlanılmasını sağlar ancak bellek yönetimi karmaşıklığını artırır. Test gereksinimlerinize göre ayarlayın.--queue_depth: Kuyruğun tutabileceği eşzamanlı istek sayısı. Daha yüksek bir derinlik, trafik artışlarını işlemeye yardımcı olur ancak daha fazla bellek tüketir. Test gereksinimlerinize göre ayarlayın.
-
Her iki senaryodaki sonuçları karşılaştırın. Gecikme süresini değerlendirmek için
Avg-Latencyalanını, aktarım hızını değerlendirmek içinQPSalanını kontrol ederek eRDMA'nın performans kazancını değerlendirin.