全部產品
Search
文件中心

Elastic Compute Service:基於eRDMA部署SMC-R和Redis

更新時間:Apr 24, 2025

使用彈性eRDMA可以獲得超低的延遲,更快地處理請求。本文介紹如何基於eRDMA部署共用記憶體通訊SMC(Shared Memory Communication)和Redis,然後基於SMC測試Redis處理請求的能力。

背景資訊

  • 共用記憶體通訊SMC是一種相容socket層、使用共用記憶體技術實現的高效能核心網路通訊協定棧。根據共用記憶體技術的不同,SMC又可以細分為基於Internal Shared Memory(ISM)技術的SMC over DMA(SMC-D)和基於Remote Direct Memory Access(RDMA)技術的SMC over RDMA(SMC-R)。詳細資料,請參見共用記憶體通訊(SMC)適用性說明

  • 目前Alibaba Cloud Linux 3基於彈性RDMA(eRDMA)提供SMC-R加速能力,在阿里雲上使用SMC-R需要建立支援eRDMA的ECS執行個體,以獲得雲上彈性RDMA(eRDMA)能力。

準備工作

購買兩台支援eRDMA的執行個體,勾選自動安裝eRDMA驅動,並且在主網卡開啟eRDMA網路介面。兩台ECS執行個體分別作為服務端和用戶端。具體操作,請參見自訂購買執行個體

本樣本參數如下所示:

  • 規格:ecs.g8i.8xlarge

  • 鏡像:Alibaba Cloud Linux 3.2104 LTS 64位

  • 網路:兩台執行個體屬於同一安全性群組,預設內網互連

  • 執行個體主網卡的私網IP地址:Server端(192.168.0.25)、Client端(192.168.0.24)。您需要根據實際情況替換IP地址。

    說明
    • 本文以在執行個體的主網卡上開啟eRDMA網路介面為例進行測試,那麼這裡的192.168.0.25即服務端所在ECS執行個體的主網卡的私網IP地址。

    • 如果您是通過輔助彈性網卡上開啟eRDMA網路介面進行測試,那麼這裡的IP地址,需要改為您實際的輔助彈性網卡的私網IP地址。更多資訊,請參見步驟三:為ECS執行個體綁定ERI

購買過程重要參數樣本

購買執行個體過程中需注意以下配置項(其他參數,請參見自訂購買執行個體):

  • 執行個體規格和鏡像:請參見使用限制鏡像需要選中安裝eRDMA驅動。執行個體啟動過程中會自動安裝eRDMA驅動,無需您再手動安裝。

    image

  • 彈性網卡:在主網卡右側選中彈性RDMA介面

    重要

    建立執行個體時,僅支援為主網卡啟用彈性RDMA介面,且單台ECS執行個體最多隻能綁定一個啟用彈性RDMA介面的網卡。如果您需要使用輔助網卡配置eRDMA,只能在建立執行個體後,單獨建立輔助彈性網卡並為其啟用彈性RDMA介面,然後綁定至ECS執行個體上使用。具體操作,請參見建立並使用彈性網卡綁定輔助彈性網卡

    image

步驟一:部署SMC

  1. 分別遠端連線Server端和Client端的ECS執行個體。

    具體操作,請參見使用Workbench工具以SSH協議登入Linux執行個體

  2. 分別在兩台ECS執行個體上執行以下命令,部署SMC-R模組。

    modprobe smc && modinfo smc
  3. 分別在兩台執行個體上執行以下命令,關閉原生IPv6模式,確保ERI下可以正常建立eRDMA串連。

    重要
    • 阿里雲eRDMA裝置與SMC目前均不支援使用IPv6地址。如果應用程式層使用IPv6地址,會導致SMC回退到TCP協議棧。更多資訊,請參見啟用SMC後使用IPv6地址出現回退

    • ANCK 5.10.134-17.3版本開始,SMC支援使用IPv4-mapped IPv6地址。

    sysctl net.ipv6.conf.all.disable_ipv6=1
  4. 分別在兩台執行個體上執行以下命令,開啟SMC eRDMA開關,使流量優先走eRDMA。

    此後新建立的TCP socket將被轉變為SMC socket,而存量的TCP socket不受影響。

    sysctl net.smc.tcp2smc=1
  5. 分別在兩台執行個體上執行以下命令,安裝SMC的監控診斷工具集smc-tools。

    smc-tools是IBM開發的SMC-R監控診斷工具,為您提供了多個維度SMC-R跟蹤診斷,主要包括:

    • smcr:提供SMC-R相關資源統計資訊。

    • smcss:提供SMC socket相關資訊。

    yum install -y smc-tools

    安裝完成後,可以執行smcss -a命令查看當前的流量路徑。smcss查看

步驟二:部署Redis

在ECS執行個體上部署SMC後,您需要繼續在執行個體上部署Redis。

  1. 分別遠端連線Server端和Client端的ECS執行個體。

    具體操作,請參見使用Workbench工具以SSH協議登入Linux執行個體

  2. 執行以下命令,分別為兩台執行個體安裝Redis。

    sudo yum install -y redis
  3. 在Server端執行個體上執行以下命令,啟動Redis服務端。

    redis-server --bind 192.168.0.25 --port 6379 --protected-mode no --save
    說明

    192.168.0.25為Server端執行個體主網卡的主私人IP,6379為需要監聽的連接埠,請您在自行測試時按實際情況替換。

    image

  4. 在Redis用戶端上串連和測試。

    • 執行以下命令,串連Redis服務端。

      redis-cli -h 192.168.0.25 -p 6379
    • 執行以下命令,使用redis-benchmark進行壓測。

      以下命令類比從100個用戶端向服務端發送1,000,000次SET命令的請求:

      redis-benchmark -h 192.168.0.25 -p 6379 -n 1000000 -t set -c 100

您也可以在開啟SMC-R後,啟動多個壓測進程進行混合壓測,參考以上步驟再部署1個Redis用戶端,在2個Redis用戶端上分別啟動多個壓測進程,然後在Redis服務端上查看每秒的操作次數OPS(Operation Per Second)。

  • 在Redis用戶端上同時啟動8個SET壓測進程的樣本命令:

    redis-benchmark -h 192.168.0.25 -p 6379 -n 100000000 -t set --threads 8 -c 100
  • 在Redis用戶端上同時啟動8個GET壓測進程的樣本命令:

    redis-benchmark -h 192.168.0.25 -p 6379 -n 1000000 -t get --threads 8 -c 100
  • 在Redis服務端上查看OPS的樣本命令:

    redis-cli -h 192.168.0.25 -p 6379 info | grep instantaneous_ops_per_sec
    說明

    請新開啟一個遠端連線視窗,然後輸入查看命令。