本文將介紹如何確定目標情境是否適合使用SMC加速,是否具備使用SMC加速的條件。
原理概述
隨著傳統資料中心應用大規模上雲,雲上網路的時延和吞吐面臨新的挑戰。傳統虛擬網卡和TCP協議棧逐漸無法滿足資料中心對網路高吞吐、低時延的訴求。同時,隨著雲端運算情境DPU能力的進一步增強,雲上開始提供RDMA網路,以充分利用硬體能力提升網路效能。在這樣的趨勢下,一種能充分發揮下層DPU硬體效能,同時支撐上層大規模雲上應用,開發部署和營運友好的軟硬體協同協議棧成為雲上資料中心網路的重要選擇。
共用記憶體通訊SMC(Shared Memory Communication)在很大程度上滿足了上述需求。SMC由IBM開源至Linux社區,並經Alibaba Cloud Linux 3增強和維護。SMC作為核心網路通訊協定棧與TCP/IP協議棧平行,不同的是它更加輕量。SMC將網路通訊協定的處理(如資料包的封裝和解析)卸載到底層硬體裝置,有效降低了時延和CPU開銷。同時SMC通過直接對遠程共用記憶體讀寫來完成資料轉送,有效提高了網路吞吐。
根據所用的底層記憶體訪問技術區分,SMC分為基於RDMA技術的SMC-R(SMC over RDMA)和基於ISM技術的SMC-D(SMC over DMA)。目前Alibaba Cloud Linux 3基於彈性RDMA(eRDMA)提供SMC-R加速能力,接下來的說明均針對SMC-R。
總體設計上,SMC協議棧相容傳統的網路socket介面,開發與使用方式和傳統TCP應用無異。更進一步地,通過挾持socket()系統調用替換socket family和protocol參數,可以實現將已有TCP應用無感切換到SMC協議棧,無需修改或重新編譯已有的應用程式。具體操作,請參見共用記憶體通訊(SMC)使能和配置說明。
建立通訊串連時,SMC協議棧會首先和對端建立TCP串連,在TCP三向交握的SYN包中攜帶特殊的TCP選項(類型254,內容0xE2D4C3D9),用以表明將使用SMC協議通訊,並同樣以此判斷對端是否支援SMC協議。若握手成功,兩端將建立對應的RDMA資源並進一步握手,後續的資料流量將通過RDMA網路傳輸;若握手失敗,兩側將安全回到已建立的TCP串連,後續的資料流量將通過TCP網路傳輸,確保網路不會因對端不支援SMC而無法通訊。
串連建立後,SMC協議棧為首個SMC串連建立RDMA RC串連(SMC Link),流量通過SMC Link由RDMA網路傳輸。為儘可能高效利用RDMA鏈路並降低RDMA資源開銷,後續建立的其他SMC串連將嘗試複用此SMC Link,直到複用串連數量達到上限再建立新的SMC Link。同時為了容災,SMC允許多個SMC Link組成SMC Link Group(LGR)提供RDMA傳輸能力。
使用依賴
彈性RDMA能力
在阿里雲ECS上使用SMC-R需要配置彈性RDMA網卡(eRDMA)。目前支援eRDMA的機型以及配置eRDMA步驟請參見在企業級執行個體上使用eRDMA。
作業系統
阿里雲Alibaba Cloud Linux 3作業系統自核心
5.10.134-16起支援SMC-R能力。關於核心查看、修改方式,請參見更換核心版本。
適用情境
SMC因其設計特點,適合在如下情境中發揮優勢:
期望不修改使用者態程式
SMC核心優勢之一是不需要TCP應用程式修改即可使用RDMA技術,進而通過共用記憶體通訊加速網路效能。但相對於通過IB verbs介面改造應用程式直接使用RDMA來說,SMC作為核心協議棧會多出系統調用和核心/使用者態資料拷貝開銷,效能不及原生RDMA應用。因此適用於期望對現有應用無侵入的情境。
追求時延或吞吐指標
SMC將網路通訊協定的處理(如資料包的封裝和解析)卸載到底層硬體裝置,有效降低了時延和CPU開銷。同時通過直接對遠程共用記憶體讀寫來完成資料轉送,有效提高了網路吞吐。因此適用於追求時延、吞吐指標的情境。
內部網路情境
SMC協商成功並使用共用記憶體通訊需兩側均支援SMC協議,因此內部網路情境下更易滿足服務側、客戶側均開啟SMC的條件。另一方面,內部網路情境網路鏈路短,使用SMC帶來的網路優勢更易凸顯。
網路佔比高
SMC帶來的網路時延和吞吐優勢在網路佔比高的服務中更能凸顯。
避免劣勢情境
SMC因其設計特點,在下述情況下表現會劣於TCP或是無法達到預期效果,實際使用中需要避免這些情境。
情境 | 說明 | 解決方案 |
短生命週期通訊 | SMC串連的建立涉及TCP握手、SMC握手及RDMA資源建立(使用SMC-R時)等多個流程,故其建連效能較弱,在短生命週期通訊中效能劣於TCP。 | 使用 |
大量突發串連 | 與短生命週期通訊情境類似,由於SMC的建連效能較弱,大量突發串連將導致串連建立流程的排隊等待,造成建連逾時。 | |
跨網元通訊 | SMC建連首先會和通訊對端建立TCP串連。在TCP三向交握SYN/SYN-ACK包中通過特殊的TCP Experimental Option來表示支援SMC協議。
然而,某些網元在處理TCP Option時會錯誤地將含無法識別Option的SYN包丟棄,或在返回的SYN-ACK包中無條件重放此Option,這可能導致握手逾時或錯誤判斷對端支援SMC,從而引發串連建立逾時或阻塞的情況,偶見於訪問公網服務時。可通過自動化檢查工具檢查服務鏈結路是否經過異常網元。具體操作,請參見自動化檢查工具。 | |
公網通訊 | 與跨網元通訊情境類似,公網通訊常常跨網元訪問,易出現串連建立逾時或是阻塞的情況。 此外,公網通訊中一般較難達到通訊兩側均使用SMC的條件,將會回退到使用TCP通訊。 最後,SMC的設計初衷是為資料中心內部網路加速,未對網路安全做嚴格加固,不適用於非可信環境。 | |
記憶體資源緊張 | SMC基於共用記憶體通訊,使用預申請的緩衝區作為共用記憶體,因此會產生一定的記憶體開銷。 一條SMC串連在通訊單側佔用緩衝區大小預設為 |
|
跨可用性區域通訊 | 跨可用性區域情境下,網路的傳輸時延在百微秒到毫秒級,SMC帶來的時延優勢被稀釋,無明顯收益。另一方面,網路的頻寬時延積增大,導致需要增大收發緩衝區才能跑滿頻寬,增加記憶體資源壓力。 | 通過UEID避免跨可用性區域使用SMC通訊,具體操作,請參見實踐案例:使用EID避免跨可用性區域的SMC-R通訊。 |
自動化檢查工具
Alibaba Cloud Linux 3提供aliyunsmc-check工具,用於自動化檢查SMC相關基礎環境配置、通訊鏈路以及正常通訊能力等。該aliyunsmc-check工具包含在aliyun-smc-extensions工具包中。
安裝工具包
執行以下命令,安裝
aliyun-smc-extensions工具包。sudo yum install -y aliyun-smc-extensions基礎環境配置檢查
基礎環境配置檢查用於檢查環境基礎配置是否正確,如作業系統核心版本,eRDMA裝置的存在情況等。執行以下命令,檢查基礎環境配置。
aliyunsmc-check basic_check輸出結果樣本:

通訊鏈路檢查
通訊鏈路檢查用於檢查鏈路上是否存在影響SMC通訊的網元,以便提前預判鏈路是否適用SMC通訊。執行以下命令,檢查通訊鏈路。其中,
<url>需替換為對應目標URL。aliyunsmc-check syn_check --url <url>輸出結果樣本:

在URL輸入無誤的前提下,任何一項失敗都表示此鏈路不適用SMC通訊,需要使用
smc-ebpf工具避免此鏈路訪問使用SMC通訊,具體操作,請參見基於BPF策略的SMC協商控制。SMC通訊檢查
通訊檢查用於檢查當前機器與指定機器
hosts之間能否使用SMC正常通訊。檢查時會通過ssh登入到指定的hosts,因此需要在命令參數中指定ssh鑒權資訊。通訊檢查允許如下
ssh鑒權方式:使用
keyfile進行SSH登入。<peer ip>需替換為遠程主機的IP地址。<usr>需替換為遠程主機的使用者名稱。<keyfile>需替換為SSH私密金鑰的檔案路徑。
aliyunsmc-check connect_check --hosts <peer ip> --user <usr> --key <keyfile>使用密碼進行SSH登入。
<peer ip>需替換為遠程主機的IP地址。<usr>需替換為遠程主機的使用者名稱。<passwd>需替換為遠程主機的密碼。
aliyunsmc-check connect_check --hosts <peer ip> --user <usr> --pwd <passwd>已配置SSH免密登入。
<peer ip>需替換為遠程主機的IP地址。<usr>需替換為遠程主機的使用者名稱。
aliyunsmc-check connect_check --hosts <peer ip> --user <usr>
輸出結果樣本:

