Déployez bRPC sur des instances ECS compatibles avec eRDMA pour réduire la latence, augmenter le débit et diminuer l'utilisation du CPU.
bRPC est un framework RPC généraliste haute performance écrit en C++. Il fournit des outils qui simplifient le développement et le déploiement de services. Les cas d'usage courants incluent la recherche, le stockage, l'apprentissage automatique et la publicité. bRPC convient aux microservices à forte concurrence et faible latence, ainsi qu'aux systèmes distribués à grande échelle. Consultez les instructions de compilation de bRPC.
eRDMA (elastic Remote Direct Memory Access) est un service de mise en réseau RDMA natif du cloud qui offre une faible latence, un débit élevé et une grande élasticité. Consultez la Présentation d'eRDMA.
Étape 1 : Préparer l'environnement
Créez deux instances ECS compatibles avec eRDMA pour servir respectivement de serveur et de client. Spécifiez les éléments de configuration suivants :
Type d'instance : choisissez un type d'instance compatible avec eRDMA. Consultez les Limites. Cette rubrique utilise le type ecs.g8a.8xlarge.
Image : choisissez une image compatible avec eRDMA. Consultez les Limites. Cette rubrique utilise Alibaba Cloud Linux 3.2104 LTS 64 bits.
-
Installation du pilote eRDMA : Sélectionnez Installer le pilote eRDMAInstall eRDMA driver. Le pilote s'installe automatiquement au démarrage de l'instance.
RemarqueAprès le démarrage de l'instance, attendez 3 à 5 minutes que l'installation du pilote se termine. Consultez la section Activer eRDMA sur les instances de niveau entreprise.
-
Mise en réseau :
Activez l'accès à Internet pour les deux instances.
L'interconnexion des services est activée par défaut au sein du même VPC.
Pour l'ENI, sélectionnez Interface Elastic RDMAElastic RDMA interface à côté de la carte réseau.
Pour les autres paramètres, consultez la rubrique Personnaliser et acheter une instance.
Étape 2 : Déployer et compiler bRPC
Déployez et compilez bRPC sur les deux instances. Les étapes suivantes utilisent Alibaba Cloud Linux 3 comme exemple. Pour les autres systèmes d'exploitation, consultez la page Compiler bRPC.
Connectez-vous aux deux instances ECS. Consultez la section Utiliser Workbench pour se connecter à une instance Linux.
-
Modifiez le mode d'établissement de connexion pour eRDMA et bRPC afin d'assurer la compatibilité.
RemarquePar défaut, eRDMA utilise RDMA_CM pour établir les connexions, tandis que bRPC utilise le mode Out-of-Band (OOB). Modifiez le mode de connexion des deux composants pour garantir leur compatibilité.
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 -
Supprimez les limites de verrouillage de la mémoire. Les applications eRDMA nécessitent généralement de grandes quantités de mémoire.
-
Modifiez le fichier
limits.conf.sudo vi /etc/security/limits.conf -
Ajoutez les lignes suivantes à la fin du fichier et enregistrez les modifications.
* soft memlock unlimited * hard memlock unlimited
-
-
Déployez l'application 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 -
Appliquez le correctif suivant sur les deux instances pour améliorer les performances de bRPC avec eRDMA.
-
Dans le répertoire
brpc, créez un fichier nomméerdma-multi-sge.patch:cd ~/brpc sudo vi erdma-multi-sge.patch -
Ajoutez le contenu suivant et enregistrez le fichier.
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 -
Appliquez le correctif au code source de bRPC.
patch -p1 < erdma-multi-sge.patch -
Compilez le code source de bRPC.
sh config_brpc.sh --with-rdma --headers="/usr/include" --libs="/usr/lib64 /usr/bin" make -j cd example/rdma_performance; make -j
-
Étape 3 : Tester les performances
Testez les performances de bRPC avec et sans eRDMA, puis comparez les résultats.
-
Testez les performances de bRPC dans les deux scénarios suivants.
Avec eRDMA activé
-
Sur le serveur, démarrez le serveur avec eRDMA activé.
./server --rdma_gid_index=1 --rdma_prepared_qp_cnt=0 --use_rdma=true -
Sur le client, connectez-vous au serveur avec eRDMA activé.
./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=16Paramètres :
Remplacez
<server private IP address>par l'adresse IP privée du serveur.--attachment_size: taille des données jointes à chaque appel bRPC. Des valeurs plus élevées permettent de mieux tirer parti d'eRDMA, mais augmentent la complexité de la gestion de la mémoire. Définissez cette valeur en fonction de vos besoins de test.--queue_depth: nombre de requêtes simultanées que la file d'attente peut contenir. Une profondeur plus élevée aide à gérer les pics de trafic, mais consomme davantage de mémoire. Définissez cette valeur en fonction de vos besoins de test.
Sans eRDMA activé
-
Sur le serveur, démarrez le serveur avec TCP.
./server --rdma_gid_index=1 --rdma_prepared_qp_cnt=0 --use_rdma=false -
Sur le client, connectez-vous au serveur avec 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=16Paramètres :
Remplacez
<server private IP address>par l'adresse IP privée du serveur.--attachment_size: taille des données jointes à chaque appel bRPC. Des valeurs plus élevées permettent de mieux tirer parti d'eRDMA, mais augmentent la complexité de la gestion de la mémoire. Définissez cette valeur en fonction de vos besoins de test.--queue_depth: nombre de requêtes simultanées que la file d'attente peut contenir. Une profondeur plus élevée aide à gérer les pics de trafic, mais consomme davantage de mémoire. Définissez cette valeur en fonction de vos besoins de test.
-
Comparez les résultats des deux scénarios. Vérifiez le champ
Avg-Latencypour la latence et le champQPSpour le débit afin d'évaluer les gains de performance apportés par eRDMA.