

喜讯:国内、香港、海外云服务器租用特惠活动,2核/4G/10M仅需31元每月,点击抢购>>>
点击这里进入阿里云ECS官方页面,立即免费体验云服务器ECS>>>
阿里云老客户点击这里申请VIP账号,享终身8折优惠(续费也打折)>>>
基于支持eRDMA能力的ECS实例部署bRPC应用,可以充分利用eRDMA提供的低延迟、高吞吐以及低CPU占用等特性,以优化bRPC应用的数据传输效率,适用于对消息吞吐量和时延要求较高的应用场景。本文介绍如何基于支持eRDMA能力的ECS实例部署bRPC应用,并测试eRDMA对bRPC应用的性能提升效果。
说明
bRPC是用C++语言编写的一种高性能、通用的远程过程调用RPC(Remote Procedure Call)框架,提供了丰富的特性和工具集来简化服务的开发和部署,常用于搜索、存储、机器学习、广告等场景,适合构建高并发、低延迟的微服务和大型分布式系统。更多信息,请参见bRPC构建说明。
eRDMA(Elastic Remote Direct Memory Access,弹性RDMA),是阿里云提供的低延迟、大吞吐、高弹性的高性能RDMA网络服务。更多信息,请参见eRDMA概述。
本步骤需要创建2台支持eRDMA能力的ECS实例,1台作为server端,1台作为client端。创建过程中需注意以下配置项: 实例规格:选用的实例规格需支持eRDMA能力。更多信息,请参见使用限制。本文示例规格:ecs.g8a.8xlarge。 镜像:选用的镜像需支持eRDMA能力。更多信息,请参见使用限制。本文示例镜像:Alibaba Cloud Linux 3.2104 LTS 64位。 安装eRDMA驱动:在扩展程序中选中eRDMA驱动。实例启动过程中会自动安装eRDMA驱动,无需您再手动安装。 说明 在实例启动后,请您间隔3~5分钟等待eRDMA驱动安装完成后再执行后续操作。更多信息,请参见在企业级实例上配置eRDMA。 网络: 均需开通公网。 在同一个专有网络VPC,默认内网互通。 弹性网卡:在网卡右侧选中弹性RDMA接口。 其他更多的参数说明,请参见自定义购买实例。 分别在2台ECS实例(server端和client端)上部署并编译bRPC。本示例以Alibaba Cloud Linux 3操作系统为例,其他操作系统部署bRPC的方法,请参见bRPC编译。 依次登录2台ECS实例。 具体操作,请参见通过密码或密钥认证登录Linux实例。 运行以下命令,修改eRDMA与bRPC的建链模式兼容。 说明 eRDMA默认使用RDMA_CM模式建链,bRPC默认使用OOB(Out-of-Band)模式建链,因此需要修改eRDMA与bRPC的建链模式兼容。 解除内存锁定的限制。对于使用eRDMA技术的应用需要较大内存,通常需要解除内存锁定的限制,以提高数据传输效率。 运行以下命令,编辑 在文件末尾添加以下内容并保存文件。 运行以下命令,部署bRPC应用。 在使用eRDMA测试bRPC时,建议在server端和client端分别安装以下补丁,可以获得更好的性能。 根据实际环境在 增加以下内容并保存文件。 运行以下命令,将补丁文件应用到bRPC的源代码中。 运行以下命令,编译bRPC的源代码。 分别在使用eRDMA功能和不使用eRDMA功能的场景中测试bRPC的性能,根据测试结果比较eRDMA对bRPC带来的性能提升。 在以下两种场景中分别测试bRPC的性能。 使用eRDMA功能 不使用eRDMA功能 在server端运行以下命令,启动server端并通过eRDMA进行通信。 在client端运行以下命令,连接到server端并通过eRDMA进行通信。 其中: 获取两种测试结果,比较eRDMA对bRPC在时延(查看步骤一:准备环境
步骤二:部署并编译bRPC
sudo sh -c "echo 'options erdma compat_mode=Y' >> /etc/modprobe.d/erdma.conf"
sudo sh -c "echo 'options erdma compat_mode=Y' >> /etc/modprobe.d/erdma.conf"
sudo dracut --force
limits.conf文件。sudo vi /etc/security/limits.conf
* soft memlock unlimited
* hard memlock unlimited
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
brpc目录下新建文件,例如文件名称为erdma-multi-sge.patch。示例命令如下:cd /home/ecs-user/brpc
sudo vi erdma-multi-sge.patch
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.3patch -p1 < erdma-multi-sge.patch
sh config_brpc.sh --with-rdma --headers="/usr/include" --libs="/usr/lib64 /usr/bin"
make -j
cd example/rdma_performance; make -j
步骤三:性能测试
<server端私网IP地址>需根据实际环境替换。--attachment_size用于指定每次bRPC调用或数据传输时附带数据的大小,该参数影响数据传输的效率,大块数据传输可以更高效地利用eRDMA的优势,但如果数据过大,也可能导致内存管理复杂度增加,请您根据实际测试需求合理设置。--queue_depth:用于设定请求队列的深度,即队列中可以同时存在的请求数量。较高的队列深度有助于应对高并发场景下的请求洪峰,避免因队列满而导致的请求拒绝,但过大的队列深度可能会占用更多内存资源,请您根据实际测试需求合理设置。./server --rdma_gid_index=1 --rdma_prepared_qp_cnt=0 --use_rdma=true
./client --servers=<server端私网IP地址>:8002 --rpc_timeout_ms=-1 --attachment_size=1024 --rdma_gid_index=1 --rdma_prepared_qp_cnt=0 --use_rdma=true --queue_depth=16
Avg-Latency字段)和带宽(查看QPS字段)等方面带来的性能提升。
推荐:TOP云智能建站优惠活动,仅880元即可搭建一个后台管理五端合一的智能网站(PC网站、手机网站、百度智能小程序、微信小程序、支付宝小程序),独享百度搜索SEO优势资源,让你的网站不仅有颜值有排面,更有排名,可以实实在在为您带来效益,请点击进入TOP云智能建站>>>,或咨询在线客服了解详情。


湘公网安备43019002001857号
备案号:
客服1