高效能網路 SIG 月度動態:長期投入得到業界認可,新增一位 virtio reviewer

OpenAnolis小助手發表於2023-05-11

高效能網路 SIG(Special Interest Group) :在雲端計算時代,軟硬體高速發展,雲原生、微服務等新的應用形態興起,讓更多的資料在程式之間流動,而網路則成為了這些資料流的載體,在整個雲時代扮演著前所未有的重要角色。在這個萬物互聯的時代,雲上的網路通訊效率對各種服務至關重要,高效能網路興趣組致力於利用 XDP、RDMA、VIRTIO 等新高效通訊技術,結合軟硬體一體化的思想,打造高效能網路協議棧,提升雲端計算時代資料中心應用的網路的效能.

01 本月 SIG 整體進展

本月高效能網路 SIG 的主要工作聚焦在 Anolis OS 核心網路、SMC 和 virtio 上。

本月關鍵進展:

  • SIG 成員 Xuan Zhuo 成為上游 Linux kernel 社群 virtio core/virtio-net 子系統的 reviewer。Xuan Zhuo 過去三年在 virtio 社群的投入得到了廣泛的認可。

  • SIG 本月完成了上游 virtio-net 對 XDP socket 零複製的支援,可以大幅提升 virtio 下 XDP socket 的發包效能。該特性在龍蜥的 ANCK 核心上已經支援了一年多的時間,現在,我們將該特性貢獻到 Linux 上游社群,目前社群已完成 virtio-net XDP 重構部分的 review,預計 5.8 視窗期後合入。

02 ANCK 核心網路

本月網路方向新增安全漏洞修復:CVE-2023-1074 (SCTP 相關)。

03 高效能網路協議棧 SMC

本月高效能網路 SIG 在 SMC 領域的工作,主要聚焦在推動本機高效能通訊,以及基於 eBPF 的策略替換兩個方案在 Linux 上游社群的討論。

本機高效能通訊方案

本機的 loopback 和容器間(跨 netns)通訊已經是一種常見的資料路徑,在資料處理和雲原生場景有著非常廣泛的使用。例如雲原生場景下,service mesh 透過 proxy 程式與業務程式、sidecar 進行通訊。SMC 提供了本機(loopback 和容器間)的高效能通訊方案,對比傳統的使用者態 IPC、以及核心的 TCP loopback 或者 UNIX domain socket 等方案,除了效能具有優勢之外(詳細資料可參考 LWN 連結 ),同時對於應用透明無侵入、無修改。

在之前版本的 review 中,社群給出了一些積極的反饋:s390 PCI maintainer Niklas 認可了使用 64bit 隨機 GID + 64 bit token 組成的 loopback 協商流程。從機率上看,要達到 10^(-15) 的衝突機率,需要嘗試 8.2×10^11 次,因此隨機 GID 可以接受。我們與 IBM 的協議所有者 Jerry 進行了充分的溝通,接下來等待社群討論完成並確定最終的方案。

本月 SIG 傳送了 SMC loopback 的方案 v5 版本至 Linux 上游社群,新版本中增加 SEID 的選擇邏輯,修復 unregister_dmb 的潛在問題,修復在 s390 架構下執行異常的問題。

基於 eBPF 策略替換方案

SMC 提供了動態回退 TCP 的能力,當前的回退策略的決策因素主要是由 RDMA / ISM 連線建立是否成功。由於 SMC 短連結效能不如 TCP,為了讓 SMC 更加通用,因此計劃給 SMC 增加基於策略的回退 TCP 的能力,幫助 SMC 更好的適配不同應用模型和場景。

本月傳送了 RFC 和正式的替換補丁到 Linux bpf 和 net 社群,得到了 eBPF maintainer 的反饋,包括一些模組符號到處、檔名等問題,我們正在修改並繼續推動 SMC 和 bpf 社群接受方案。

04 virtio

社群影響力

本月高效能網路 SIG 成員 Xuan Zhuo 成為 linux kernel 社群 virtio core/virtio-net 子系統的 reviewer。Xuan Zhuo 過去三年在 virtio 社群的投入得到了社群的廣泛認可。

本月 SIG 還修復一個 virtio net 的在 xdp 場景下的 bug:[PATCH net] virtio_net: bugfix overflow inside xdp_linearize_page() - Xuan Zhuo

virtio-net 支援 AF_XDP zerocopy

AF_XDP 是一個 bypass 核心協議棧的新收發包框架。它可以把驅動的收包直接傳遞到使用者態, 也可以把包直接從使用者態傳遞到驅動傳送出去。它的效能相比於核心的 UDP 協議棧可以提升 3-7 倍 PPS。但是它依賴驅動進行 zerocopy 的支援。這個工作分成幾個部分:

  • virtio core 支援 DMA premapped

這部分是讓 virtio core 框架支援提交 DMA address 操作(連結)。目前的實現中所有的 DMA 操作都在 virito core 裡面完成,我們要讓驅動支援傳遞 DMA address 給 virtio core,因為 AF_XDP 會提前完成所有的地址的 DMA 操作以及一些 virtqueue reset 相關的操作。

這部分涉及到了 virtio 的 DMA 相關的 API 使用問題。由於 virtio 在一些場景下不能使用 DMA API,我們希望 DMA API 或 AF_XDP 可以支援 virtio 這一場景。這引發了相對廣泛的討論,目前的結論是:

  • AF_XDP 在未來可能會轉向使用 dma-bufs 來處理 DMA API。

  • DMA API 不支援 virtio 這樣的特殊場景。

這些因素導致我們的推進工作陷入了非常大的困難。經過考慮與討論, 我們考慮暫時不支援 virtio 沒有 VIRTIO_F_ACCESS_PLATFORM 的場景,這通常出現在一些舊的 virtio 裝置上。

  • virtio-net XDP 重構

這部分已經完成 review,將會在 5.8 視窗期之後再提交一個版本。

virtio-net inner header hash

隧道協議有時會將不同流的資料包封裝成外頭部五元組相同的資料流,這些資料流會被雜湊到相同的接收佇列,進而損失 RSS 的效能。為了讓 virtio 對隧道協議支援內頭部雜湊,高效能網路 SIG 發起了 virtio_net: support inner header hash 的提案,希望將其在 virtio 中標準化下來。

本月 v12->v13 和 virtio 社群討論了之前 inner header hash 的設計把裝置側支援的隧道型別放置在 PCI device-specific 的配置空間的問題,這種設計的優點是作為裝置常駐能力可以在初始化時只被驅動讀取一次,但是隨著 virtio 現在越來越多新特性的增加,讓裝置特定的配置空間越來越臃腫對一些 tiny 裝置是十分不友好的,因此討論之後將從裝置配置空間移到 control queue(新方法的缺點是每次使用者的 GET 查詢都會返回 configured 和 supported 兩種欄位,但是可接受的)。

另外,inner header hash 支援的隧道型別的數量社群仍在質疑,社群更加傾向於對 legacy 協議的支援,以讓 legacy 協議享受到熵增加帶來的 rss 效能提升,例如 GRE-2784 等,但是我們想支援更多的 modern 隧道協議,例如 VXLAN/GENEVE 等,以讓這些協議可以基於內頭部來做對稱雜湊,在某些場景下獲取到 less locking,warm cache 等效能提升,這塊仍需討論。

以上為 4 月高效能網路 SIG 月度動態,歡迎大家加入共建。更多 SIG 動態前往龍蜥官網獲取。


相關連結可移步龍蜥公眾號(OpenAnolis龍蜥)2023年5月9日相同推送檢視。


—— 完 ——

為給大家提供更好的內容和服務,龍蜥社群誠摯地邀請大家參與問卷調研,請掃描下方二維碼或點此 填寫,我們將篩選出優質反饋,送出龍蜥周邊!

高效能網路 SIG 月度動態:長期投入得到業界認可,新增一位 virtio reviewer



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

相關文章