使用彈性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。
步驟一:部署SMC
分別遠端連線Server端和Client端的ECS執行個體。
具體操作,請參見使用Workbench工具以SSH協議登入Linux執行個體。
分別在兩台ECS執行個體上執行以下命令,部署SMC-R模組。
modprobe smc && modinfo smc分別在兩台執行個體上執行以下命令,關閉原生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分別在兩台執行個體上執行以下命令,開啟SMC eRDMA開關,使流量優先走eRDMA。
此後新建立的TCP socket將被轉變為SMC socket,而存量的TCP socket不受影響。
sysctl net.smc.tcp2smc=1分別在兩台執行個體上執行以下命令,安裝SMC的監控診斷工具集smc-tools。
smc-tools是IBM開發的SMC-R監控診斷工具,為您提供了多個維度SMC-R跟蹤診斷,主要包括:
smcr:提供SMC-R相關資源統計資訊。
smcss:提供SMC socket相關資訊。
yum install -y smc-tools安裝完成後,可以執行
smcss -a命令查看當前的流量路徑。
步驟二:部署Redis
在ECS執行個體上部署SMC後,您需要繼續在執行個體上部署Redis。
分別遠端連線Server端和Client端的ECS執行個體。
具體操作,請參見使用Workbench工具以SSH協議登入Linux執行個體。
執行以下命令,分別為兩台執行個體安裝Redis。
sudo yum install -y redis在Server端執行個體上執行以下命令,啟動Redis服務端。
redis-server --bind 192.168.0.25 --port 6379 --protected-mode no --save說明192.168.0.25為Server端執行個體主網卡的主私人IP,6379為需要監聽的連接埠,請您在自行測試時按實際情況替換。

在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說明請新開啟一個遠端連線視窗,然後輸入查看命令。

