效能提升 57% ,SMC-R 透明加速 TCP 實戰解析 | 龍蜥技術
編者按: TCP 協議作為當前使用最為廣泛的網路協議,場景遍佈行動通訊、資料中心等。對於資料中心場景,透過彈性 RDMA 實現高效能網路協議 SMC-R,透明替換應用 TCP 協議,實現應用網路透明加速。 本文整理自 龍蜥大講堂第 15 期,影片 精彩回放已上傳至龍蜥官網 , 歡迎檢視!
為什麼需要新的核心網路協議棧?
Linux 核心網路協議棧沒有銀彈,當前 Linux 網路協議棧是在效能(吞吐、CPU 使用率)、時延和通用性權衡下的實現。在真實場景中,我們可能需要高效能但是並不通用的使用者態協議棧, 亦或是通用、更高效能更低時延的方案,但是基於傳統乙太網卡的方案很難有大幅度的提升,更多是基於硬體的紅利,例如 100G/400G 網路。鑑於此,我們考慮是否可以基於其他高效能網路,提供 TCP 相容的行為和 socket 介面,提供更優的效能。
基於共享記憶體的網路通訊
在談跨主機通訊之前,我們先把視線放到單機維度,如何在單機維度實現 IPC?下面是幾種常見的 IPC 方式:
不出意外, 共享記憶體是最快的 IPC 方式 ,但是缺少一種 OS 層面的統一實現和介面,多數是在語言的 library 中提供。
這裡我們分解一下單機維度的共享記憶體 IPC 流程:
-
傳送方寫到預先分配好的一塊記憶體區域; -
通知對端,並更新新寫入記憶體的偏移量; -
接收方按照新更新的偏移量讀取資料; -
接收方更新讀取記憶體的偏移量。
如果有一種技術,可以實現在兩臺機器間“搬運”記憶體,那麼我們可以把這種高效能 IPC 方案從單機維度擴充到不同的主機間。很顯然, Remote Direct Memory Access RDMA 可以幫助我們高效地搬運記憶體。
相對於單機的共享記憶體通訊流程,基於 RDMA 的流程:
-
傳送方寫到本機預先分配好的一塊記憶體區域; -
透過 RDMA 將該記憶體寫入到對端維護的記憶體區域的相同位置; -
透過 RDMA 通知接收方,並更新新寫入記憶體的偏移量; -
接收方按照新更新的偏移量讀取資料; -
接收方透過 RDMA 更新讀取記憶體的偏移量。
基於 RDMA 的共享記憶體模型,SMC-R 應運而生 ,SMC-R 縮寫即為 Shared Memory Communcation over RDMA。
下面讓我們看下 SMC-R 是如何加速 TCP 應用。
SMC-R 是一種混合協議,即透過 TCP 實現建聯時資訊互動,透過 RDMA 網路實現資料路徑高效能資料傳輸 。 同時,一旦 RDMA 鏈路建聯失敗,可以 fallback 到 TCP,實現兜底 TCP 的能力。除此之外,SMC-R 藉助多個 RNIC,可以實現執行時的故障遷移,確保執行時可靠性。
RDMA 本身提供了 verbs 介面供應用使用,SMC-R 基於共享記憶體的模型,提供了一套完全相容 TCP socket 的核心介面,可以透過 LD_PRELOAD 基於 eBPF 的規則替換等方式,實現將 TCP socket 透明替換成 SMC socket,進而實現透明替換和加速。
基於 SMC-R 透明替換,我們測試了幾種應用場景,其中 Redis 有最高 57% 的效能提升,此時 Redis 無需進行任何改造,即可享受 SMC-R 帶來的效能加速。
使用 SMC-R 加速應用
透明替換並加速 TCP 應用,可以使用下面三種方案:
-
使用 LD_PRELOAD 的方式,這種方式原理是將動態連結的二進位制檔案中,關於 socket 建立的 SOCK_STREAM 協議,替換為 AF_SMC 協議,從而實現將 TCP 透明替換 SMC 協議; -
透過 net namespace 級別的 sysctl,可以實現網路名稱空間(容器等)緯度的所有 TCP 連線的替換; -
透過 eBPF 規則(例如五元組、程式 ID 等),動態匹配需要替換的連線進行替換。
SMC-R 在龍蜥
在龍蜥社群中,我們也正在持續不斷地增強最佳化 SMC,包括效能、使用場景、穩定性和透明替換。參與龍蜥社群貢獻的半年時間內,共為 Linux 上游社群貢獻了 60+ 的補丁。
本次分享只是拋磚引玉,後期更多精彩技術分享還請持續關注龍蜥公眾號不迷路。歡迎大家在龍蜥社群交流和分享, 相關資料及往期技術文章參考可移步龍蜥公眾號(OpenAnolis龍蜥)2022年5月18日相同推送檢視。
關於回放和課件獲取
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70004278/viewspace-2895352/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 系列解讀SMC-R:透明無感提升雲上 TCP 應用網路效能(一)| 龍蜥技術TCP
- 系列解讀 SMC-R (二):融合 TCP 與 RDMA 的 SMC-R 通訊 | 龍蜥技術TCP
- 載入速度提升 15%,關於 Python 啟動加速探索與實踐的解析 | 龍蜥技術Python
- 龍蜥開源核心追蹤利器 Surftrace:協議包解析效率提升 10 倍! | 龍蜥技術協議
- 螞蟻安全科技 Nydus 與 Dragonfly 映象加速實踐 | 龍蜥技術Go
- 助力Koordinator雲原生單機混部,龍蜥混部技術提升CPU利用率達60%|龍蜥技術
- 技術門檻高?來看 Intel 機密計算技術在龍蜥社群的實踐 | 龍蜥技術Intel
- 龍蜥利器:系統運維工具 SysAK的雲上應用效能診斷 | 龍蜥技術運維
- 入門即享受!coolbpf 硬核提升 BPF 開發效率 | 龍蜥技術
- 龍蜥社群高效能儲存技術 SIG 11 月運營回顧 | 龍蜥 SIG
- 龍蜥開源Plugsched:首次實現 Linux kernel 排程器熱升級 | 龍蜥技術Linux
- SysOM 案例解析:消失的記憶體都去哪了 !| 龍蜥技術記憶體
- 技術解讀:Dragonfly 基於 P2P 的智慧映象加速系統 | 龍蜥技術Go
- 從編譯到可執行,eBPF 加速容器網路的原理分析 | 龍蜥技術編譯eBPF
- eBPF 雙子座:天使 or 惡魔?| 龍蜥技術eBPF
- 基於 Coolbpf 的應用可觀測實踐 | 龍蜥技術
- 簡單、透明、安全、高度整合!龍蜥可信 SBOM 能力探索與實踐
- 深入解讀基礎軟體雲原生面臨的挑戰 | 龍蜥技術
- 跨語言程式設計的探索 | 龍蜥技術程式設計
- 效能提升1倍,成本直降50%!基於龍蜥指令加速的下一代雲原生閘道器
- 虛擬化解決方案 virtio 的技術趨勢與 DPU 實踐解讀 | 龍蜥技術
- 萬里資料庫加入龍蜥社群,打造基於“龍蜥+GreatSQL”的開源技術底座資料庫SQL
- Hybrid App技術解析 — 實戰篇APP
- Hybrid App技術解析 -- 實戰篇APP
- 倒數計時 2 天!聚焦 Arm 效能提升,助力龍蜥生態落地應用
- 從新手小白到運維大咖,SysOM 多場景當機例項解析 | 龍蜥技術運維
- 大影片時代智慧加速引擎湧現科技加入龍蜥社群
- Elasticsearch技術解析與實戰(六)Elasticsearch併發Elasticsearch
- 利用DDP技術提升Tungsten Fabric vRouter效能VR
- 軟體調優方法有哪些?看看飛騰技術專家怎麼說 | 龍蜥技術
- 浪潮資訊 KOS 助力企業核心業務完成 CentOS 遷移替換,效能提升 10%|龍蜥案例CentOS
- Golang pprof 效能調優實戰,效能提升 3 倍!Golang
- 龍蜥社群&龍蜥開發者獲CSDN2021年度技術影響力「年度開源專案」獎和「年度社群之星」
- 如何透過 open-local 玩轉容器本地儲存? | 龍蜥技術
- 深入解讀雲場景下的網路抖動 | 龍蜥技術
- 依然順滑!Dragonwell 11如何改造全新垃圾回收器ZGC? | 龍蜥技術GoGC
- 致敬 hacker :盤點記憶體虛擬化探索之路|龍蜥技術記憶體
- SysAK 應用抖動診斷篇—— eBPF又立功了! | 龍蜥技術eBPF