效能提升 57% ,SMC-R 透明加速 TCP 實戰解析 | 龍蜥技術

OpenAnolis小助手發表於2022-05-19

編者按: TCP 協議作為當前使用最為廣泛的網路協議,場景遍佈行動通訊、資料中心等。對於資料中心場景,透過彈性 RDMA 實現高效能網路協議 SMC-R,透明替換應用 TCP 協議,實現應用網路透明加速。 本文整理自 龍蜥大講堂第 15 期,影片 精彩回放已上傳至龍蜥官網 歡迎檢視!

  為什麼需要新的核心網路協議棧?

Linux 核心網路協議棧沒有銀彈,當前 Linux 網路協議棧是在效能(吞吐、CPU 使用率)、時延和通用性權衡下的實現。在真實場景中,我們可能需要高效能但是並不通用的使用者態協議棧, 亦或是通用、更高效能更低時延的方案,但是基於傳統乙太網卡的方案很難有大幅度的提升,更多是基於硬體的紅利,例如 100G/400G 網路。鑑於此,我們考慮是否可以基於其他高效能網路,提供 TCP 相容的行為和 socket 介面,提供更優的效能。

  基於共享記憶體的網路通訊

在談跨主機通訊之前,我們先把視線放到單機維度,如何在單機維度實現 IPC?下面是幾種常見的 IPC 方式:

不出意外, 共享記憶體是最快的 IPC 方式 ,但是缺少一種 OS 層面的統一實現和介面,多數是在語言的 library 中提供。

這裡我們分解一下單機維度的共享記憶體 IPC 流程:

  1. 傳送方寫到預先分配好的一塊記憶體區域;
  2. 通知對端,並更新新寫入記憶體的偏移量;
  3. 接收方按照新更新的偏移量讀取資料;
  4. 接收方更新讀取記憶體的偏移量。

如果有一種技術,可以實現在兩臺機器間“搬運”記憶體,那麼我們可以把這種高效能 IPC 方案從單機維度擴充到不同的主機間。很顯然, Remote Direct Memory Access RDMA 可以幫助我們高效地搬運記憶體。

相對於單機的共享記憶體通訊流程,基於 RDMA 的流程:

  1. 傳送方寫到本機預先分配好的一塊記憶體區域;
  2. 透過 RDMA 將該記憶體寫入到對端維護的記憶體區域的相同位置;
  3. 透過 RDMA 通知接收方,並更新新寫入記憶體的偏移量;
  4. 接收方按照新更新的偏移量讀取資料;
  5. 接收方透過 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 應用,可以使用下面三種方案:

  1. 使用 LD_PRELOAD 的方式,這種方式原理是將動態連結的二進位制檔案中,關於 socket 建立的 SOCK_STREAM 協議,替換為 AF_SMC 協議,從而實現將 TCP 透明替換 SMC 協議;
  2. 透過 net namespace 級別的 sysctl,可以實現網路名稱空間(容器等)緯度的所有 TCP 連線的替換;
  3. 透過 eBPF 規則(例如五元組、程式 ID 等),動態匹配需要替換的連線進行替換。

SMC-R 在龍蜥

在龍蜥社群中,我們也正在持續不斷地增強最佳化 SMC,包括效能、使用場景、穩定性和透明替換。參與龍蜥社群貢獻的半年時間內,共為 Linux 上游社群貢獻了 60+ 的補丁。

本次分享只是拋磚引玉,後期更多精彩技術分享還請持續關注龍蜥公眾號不迷路。歡迎大家在龍蜥社群交流和分享, 相關資料及往期技術文章參考可移步龍蜥公眾號(OpenAnolis龍蜥)2022年5月18日相同推送檢視。

關於回放和課件獲取 

【影片回放】:影片回訪已上傳至龍蜥官網 (官網-動態-影片)
【PPT課件獲取】:關注微信公眾號(OpenAnolis),回覆“龍蜥課件” 即可獲取。有任何疑問歡迎隨時諮詢龍蜥助手—小龍 (微信:openanolis_assis)
—— 完 ——


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70004278/viewspace-2895352/,如需轉載,請註明出處,否則將追究法律責任。

相關文章