天天看點

高性能網絡 SIG 動态:投入得到業界認可,新增一位 virtio reviewer

作者:龍蜥社群小龍

高性能網絡 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 動态前往龍蜥官網擷取。

相關連結:

高性能網絡 SIG 首頁:

SMC loopback 方案 v5 版本:

DMA address 操作:

virtio-net XDP 重構連結:

virtio_net: support inner header hash :

—— 完 ——

繼續閱讀