从TCP到RDMA网络最新技术|扩展技术视野
一年一度的云棲大會近日在杭州如約舉行。今年的云棲大會上阿里云發布了第四代神龍架構,其中彈性 RDMA 加速能力尤其值得關注。基于彈性 RDMA,阿里云操作系統 Alibaba Cloud Linux 3 和龍蜥社區操作系統 Anolis OS 在網絡方面基于社區 SMC-R 優化形成兼容 socket 的 RDMA 產品方案,旨在幫助云上應用無修改的享受 RDMA 帶來的性能提升。本文將為您闡述 SMC-R 的產生背景、原理架構以及部分性能數據。
來源:云巔論劍
作者:古聞、無牙、榮旸
文末有福利!
近些年,隨著云計算的飛速發展,特別是阿里云神龍、AWS Nitro 等硬件虛擬化方案的出現,云上的虛擬化網絡性能有了質的飛躍。相比于云網絡的欣欣向榮,CPU 的性能提升卻似“擠牙膏”一般有些力不從心。因此,將部分原本由 CPU 承擔的工作卸載到后端硬件的解決思路成為了云計算領域研究的一個“熱點”。遠程內存直接訪問 (Remote Direct Memory Access, RDMA) 這項追求極致性能,曾經主要應用在高性能計算、高頻交易等特定場景中的技術也因此進入了云廠商的數據中心。
從 TCP 到 RDMA
RDMA 作為一種旁路內核的遠程內存直接訪問技術,被廣泛應用于數據密集型和計算密集型場景中,是高性能計算、機器學習、數據中心、海量存儲等領域的重要解決方案。RDMA 在阿里巴巴已大規模穩定運行多年,支撐了阿里云 ESSD、PolarDB 等核心業務,并在雙十一等重大場景得到充分驗證。
RDMA 具有零拷貝、協議棧卸載的特點。RDMA 將協議棧的實現下沉至 RDMA 網卡 (RNIC),繞過內核直接訪問遠程內存中的數據。由于不經過系統內核協議棧,RDMA 與傳統 TCP/IP 實現相比不僅節省了協議處理和數據拷貝所需的 CPU 資源,同時也提高了網絡吞吐量、降低了網絡通信時延。
在過去,RDMA 只能在一些數據中心網絡中通過網卡和交換機緊密配合使用,部署復雜度高。但如今,阿里云彈性 RDMA 將復雜的 RDMA 技術帶到云上,使普通的 ECS 用戶也能使用高性能的 RDMA 傳輸,無需關心底層復雜的網卡、交換機等物理網絡環境配置,使其成為一種親民、普惠的技術。
從 verbs 到 socket
不過,雖然 RDMA 性能優異,但是由于 RDMA 使用的 IB verbs 接口和常用的 POSIX socket 接口存在巨大的差異,普通應用要使用 RDMA 將面臨著大量的業務改造,高效的將 RDMA 應用于現有業務存在較高的技術門檻。
所以,歷史上存在一些將 RDMA 的 IB verbs 語義封裝成 socket 接口的嘗試,典型如 rsocket、libvma。其中,libvma 通過 LD_PRELOAD 攔截 socket 接口,轉而使用用戶態 verbs 完成數據傳輸。但這些方案存在一些缺陷:由于轉換發生在用戶態,一方面缺少內核統一資源管理,另一方面在兼容性上也存在一些問題。
從資源管理和兼容的角度上看,在內核中實現 socket 接口相比于用戶態來說有著天然的優勢。在 Alibaba Cloud Linux 3 和 Anolis OS 中,我們提供并優化了基于 RDMA 的共享內存通信 (Shared Memory Communications over RDMA, SMC-R) 技術,這是一次基于內核 RDMA 實現 TCP 應用兼容的嘗試。
原生的 SMC-R 支持標準 RoCE 網絡,我們對其進行了擴展,首次實現對 iWARP 的支持,可以完美的支持阿里云自研的彈性 RDMA,從而實現云上應用零修改的享受 RDMA 帶來的性能紅利。
兼備 socket 和 RDMA 的內核實現:SMC-R
用一句話來描述,SMC-R 是一套與 TCP/IP 平行的向上兼容 TCP socket 接口,底層使用 RDMA RC 進行數據傳輸的協議族。
SMC-R 工作于內核空間,處于 socket 層和內核 RDMA 的 IB verbs 層之間。SMC-R 像是一個能力卓越的翻譯兼管家,它接收用戶傳達的 socket 指令,轉而使用 RDMA 的 IB verbs 接口管理 RDMA 資源,完成底層基于 RDMA 的數據傳輸。所以,用戶只需將原有 socket 接口使用的協議族從 AF_INET(6) 修改為 AF_SMC 即可完成從 TCP 協議棧到 SMC-R 協議棧的轉變。
但這還不夠,我們希望在零修改的前提下完成協議替換。為此,Alibaba Cloud Linux 3 和 Anolis OS 在 socket 層增加協議族替換相關的 sysctl 和白名單,提供了 net namespace 和單個應用維度下的 TCP 至 SMC-R 協議棧透明替換能力,使應用不需要任何修改即可讓數據在 RDMA 鏈路這條高速公路上飛馳起來。
然而,僅本地一廂情愿的使用 SMC-R 可不行,遠端節點同樣得具備 SMC-R 能力才能讓高速公路有始有終。因此,SMC-R 具備自動協商和安全回退 TCP 的能力。
SMC-R 建立 RDMA 鏈路時,首先會與通信對端建立 TCP 連接,雙方在握手過程中通過特殊的 TCP 選項表明自身支持 SMC-R。協商成功后,SMC-R 將為用戶態應用申請必要的 RDMA 資源,將接收數據緩沖區注冊為可被遠程節點直接訪問的遠程內存緩沖區 (Remote Memory Buffer, RMB),并將對應的訪問密鑰以及緩沖區起始地址封裝成遠程訪問令牌 (RToken) 告知遠程節點,作為其訪問 RMB 的重要驗證信息。
特殊情況下,若在協商過程中發現收發兩端其一不具備 RDMA 傳輸條件時,將觸發安全回退機制。SMC-R 會使用協商過程中建立的 TCP 連接完成后續的數據傳輸,保證網絡的可靠穩定。
數據傳輸的高速公路建立起來后,交通規則也要安排妥當。顧名思義,SMC-R 是一種通過 RDMA 實現共享內存的通信方式,其將環形 RMB 作為共享內存,配合數據游標實現高效的數據傳輸。
SMC-R 使用 RDMA WRITE 單邊操作的方式將網絡應用傳遞至內核的數據直接、高效地寫入遠程節點環形 RMB 中。同時使用 RDMA SEND/RECV 雙邊操作的方式交互連接數據管理 (Connection Data Control, CDC) 消息,用于更新、同步 RMB 中的數據游標 (Cursor)。針對一側 RMB,讀者更新消費者游標 (Consumer Cursor),標識即將讀取的下一字節地址。為避免數據丟失,寫者不會將數據寫入超過消費者游標的 RMB 空間中。相似的,寫者更新生產者游標 (Producer Cursor),標識即將寫入的下一字節地址。為確保數據的正確性,讀者不會讀取超過生產者游標的 RMB 空間中的內容。就這樣,兩個數據游標在環形 RMB 上你追我趕,貫穿網絡數據傳輸的始終,確保傳輸的安全與可靠。
最后,數據在高速公路上飛馳難免會遇到差錯,為了保證一切都在掌控之中,Alibaba Cloud Linux 3 和 Anolis OS 為 SMC-R 提供了一系列監控診斷接口和工具,包括控制透明替換的 sysctl、查詢 SMC-R socket 狀態的 proc 文件、獲取 SMC-R 各維度信息的 smc-tools 工具集等,以保障網絡的可監控性和易運維性。
通過上述架構概述和理論分析,SMC-R 展現了其兼容 socket 接口,透明替換 TCP,使用 RDMA 完成底層數據傳輸的能力。基于這些,我們終于可以總結出 SMC-R 的核心優勢:
高性能
更輕薄的協議棧;
使用 RDMA 進行通信,網絡時延更低、CPU 占用更少、吞吐量更高;
高效可靠的遠程環形緩沖區直接訪問。
透明替換
兼容 socket 接口的 RDMA 可靠流式傳輸;
自動協議協商和安全回退 TCP 能力;
net namespace 和應用維度的協議棧無損透明替換;
底層兼容彈性 RDMA iWARP 和標準 RoCE 網絡。
性能表現
基于上面的介紹,我們知道 SMC-R 的一個主要優勢在于保證兼容的情況下提供更好的性能,但性能到底如何?我們一起來看看 SMC-R 配合阿里云彈性 RDMA 在幾個典型應用場景中的表現吧。
測試環境
CPU:Intel(R) Xeon(R) Platinum 8269CY CPU @ 2.50GHz 104 核
網卡:彈性 RDMA * 1
OS:Alibaba Cloud Linux 3
「時延敏感的數據庫」 場景
redis
不同 data size 場景下,redis-benchmark 測試 SMC-R 對比 TCP 性能數據
不同 clients 數量場景下,redis-benchmark 測試 SMC-R 對比 TCP 性能數據
在時延敏感的數據查詢與處理場景中,SMC-R + 彈性 RDMA 幫助 Redis 在不同 data size 下平均提升約 50% 的 QPS,在不同 clients 數量下平均提升 20% 的 QPS。
「高性能 RPC」場景
1、thrift
不同類型 RPC 接口下使用 TCP 和 SMC-R 所得 QPS 對比?
2、netty
不同類型 RPC 接口下使用 TCP 和 SMC-R 所得 QPS 對比?
在高性能 RPC 場景中,不同類型接口下 SMC-R + 彈性 RDMA 幫助 thrift 平均提升約 30% 的 QPS;netty 平均提升約 12%?的 QPS。
通過上述實驗數據,我們清晰的看到 SMC-R 在時延敏感型數據查詢、高性能 RPC 場景下具備不俗的性能表現。其實除了上述實驗場景外,SMC-R 還可以應用于集群大規模數據交互、高吞吐大文件傳輸等其他場景。
當然,SMC-R 也不是萬能的,RDMA 的一些缺陷在 SMC-R 中同樣存在。特別是在建連性能上,由于 RDMA 需要與硬件交互,其建連性能遠不如 TCP,所以在大量短連接的場景下,SMC-R 的表現不如 TCP;SMC-R 需要為每個連接預先分配內存,在連接數非常多的情況下,內存占用也會比 TCP 更高。另外,SMC-R 作為一種數據中心內部使用的通信方式,并不適合對公網暴露。
未來,我們希望繼續優化 SMC-R,普惠云上應用。為此,我們將在龍蜥社區高性能網絡 SIG (OpenAnolis: https://openanolis.cn/sig/high-perf-network) 上開源代碼并持續改進。同時,我們將 SMC-R 相關文檔發布于 Alibaba Cloud Linux 3 官網上(https://help.aliyun.com/document_detail/327118.htm)。相信在不久的將來,SMC-R 能夠幫助更多的用戶無侵入的改造應用,方便快捷的享受 RDMA 帶來的網絡性能提升。
最后
送上1024程序員節日福利第一彈:經典書籍全場五折+大額優惠券!愿我們不在孤單!經典書籍是智慧的結晶,是與大師的對話!真正堅持看書學習人不多,希望你是其中一個!
如果提示上面優惠碼用完,可以用下面的:
累計滿200元減50元優惠碼:JHKE7G(長按復制)
累計滿300元減80元優惠碼:JAF2QT(長按復制)
讓我們一起慶祝屬于我們的節日!
- END -
看完一鍵三連在看,轉發,點贊
是對文章最大的贊賞,極客重生感謝你
推薦閱讀
Linux Kernel TCP/IP Stack|Linux網絡硬核系列
深入理解DPDK程序設計|Linux網絡2.0
深入理解Kubernetes容器網絡
總結
以上是生活随笔為你收集整理的从TCP到RDMA网络最新技术|扩展技术视野的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis最佳实践指南
- 下一篇: 如何编写好的代码?