日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

基于eRDMA部署高網絡性能的bRPC應用

基于支持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接口

其他更多的參數說明,請參見自定義購買實例

步驟二:部署并編譯bRPC

分別在2臺ECS實例(server端和client端)上部署并編譯bRPC。本示例以Alibaba Cloud Linux 3操作系統為例,其他操作系統部署bRPC的方法,請參見bRPC編譯

  1. 依次登錄2臺ECS實例。

    具體操作,請參見通過密碼或密鑰認證登錄Linux實例

  2. 運行以下命令,修改eRDMA與bRPC的建鏈模式以實現兼容。

    說明

    eRDMA默認使用RDMA_CM模式建鏈,bRPC默認使用OOB(Out-of-Band)模式建鏈,因此需要修改eRDMA與bRPC的建鏈模式以實現兼容。

    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
  3. 解除內存鎖定的限制。對于使用eRDMA技術的應用需要較大內存,通常需要解除內存鎖定的限制,以提高數據傳輸效率。

    1. 運行以下命令,編輯limits.conf文件。

      sudo vi /etc/security/limits.conf
    2. 在文件末尾添加以下內容并保存文件。

      * soft memlock unlimited
      * hard memlock unlimited
  4. 運行以下命令,部署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
  5. 在使用eRDMA測試bRPC時,建議在server端和client端分別安裝以下補丁,以獲得更好的性能。

    1. 根據實際環境在brpc目錄下新建文件,例如文件名稱為erdma-multi-sge.patch。示例命令如下:

      cd ~/brpc
      sudo vi erdma-multi-sge.patch
    2. 增加以下內容并保存文件。

      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
    3. 運行以下命令,將補丁文件應用到bRPC的源代碼中。

      patch -p1 < erdma-multi-sge.patch
    4. 運行以下命令,編譯bRPC的源代碼。

      sh config_brpc.sh --with-rdma --headers="/usr/include" --libs="/usr/lib64 /usr/bin"
      make -j
      cd example/rdma_performance; make -j

步驟三:性能測試

分別在使用eRDMA功能和不使用eRDMA功能的場景中測試bRPC的性能,根據測試結果比較eRDMA對bRPC帶來的性能提升。

  1. 在以下兩種場景中分別測試bRPC的性能。

    使用eRDMA功能

    1. 在server端運行以下命令,啟動server端并通過eRDMA進行通信。

      ./server --rdma_gid_index=1 --rdma_prepared_qp_cnt=0 --use_rdma=true
    2. 在client端運行以下命令,連接到server端并通過eRDMA進行通信。

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

      其中:

      • <server端私網IP地址>需根據實際環境替換。

      • --attachment_size用于指定每次bRPC調用或數據傳輸時附帶數據的大小,該參數影響數據傳輸的效率,大塊數據傳輸可以更高效地利用eRDMA的優勢,但如果數據過大,也可能導致內存管理復雜度增加,請您根據實際測試需求合理設置。

      • --queue_depth:用于設定請求隊列的深度,即隊列中可以同時存在的請求數量。較高的隊列深度有助于應對高并發場景下的請求洪峰,避免因隊列滿而導致的請求拒絕,但過大的隊列深度可能會占用更多內存資源,請您根據實際測試需求合理設置。

    不使用eRDMA功能

    1. 在server端運行以下命令,啟動server端并通過TCP進行通信。

      ./server --rdma_gid_index=1 --rdma_prepared_qp_cnt=0 --use_rdma=false
    2. 在client端運行以下命令,連接到server端并通過TCP進行通信。

      ./client --servers=<server端私網IP地址>:8002 --rpc_timeout_ms=-1 --attachment_size=1024 --rdma_gid_index=1 --rdma_prepared_qp_cnt=0 --use_rdma=false --queue_depth=16

      其中:

      • <server端私網IP地址>需根據實際環境替換。

      • --attachment_size用于指定每次bRPC調用或數據傳輸時附帶數據的大小,該參數影響數據傳輸的效率,大塊數據傳輸可以更高效地利用eRDMA的優勢,但如果數據過大,也可能導致內存管理復雜度增加,請您根據實際測試需求合理設置。

      • --queue_depth:用于設定請求隊列的深度,即隊列中可以同時存在的請求數量。較高的隊列深度有助于應對高并發場景下的請求洪峰,避免因隊列滿而導致的請求拒絕,但過大的隊列深度可能會占用更多內存資源,請您根據實際測試需求合理設置。

  2. 獲取兩種測試結果,比較eRDMA對bRPC在時延(查看Avg-Latency字段)和帶寬(查看QPS字段)等方面帶來的性能提升。