高效能網路SIG月度動態:virtio-net 支援動態中斷調節,SMC v2 協議增加新擴充套件

OpenAnolis小助手發表於2023-04-13


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

01 本月 SIG 整體進展

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


本月關鍵進展:


  • 本月 SIG 小組和 IBM SMC 開發團隊在 SMC v2 的協議擴充套件上達成了一致,至此 SIG 推進的幾個關鍵協議擴充套件內容(單連線特性支援,LGR 最大連線數可協商支援,RDMA write with immediate 支援,以及可擴充套件的選項等)在 SMC 開發者例會上基本討論完畢。

  • SIG 小組提出並推進的 virtio-net: support the virtqueue coalescing moderation (https://lists.oasis-open.org/archives/virtio-dev/202303/msg00415.html)提案在 virtio 社群投票透過,該提案可以讓 virtio-net 支援動態中斷調節,提升 virtio-net 的效能。

02 Anolis OS

修復

Anolis OS ANCK 5.10 新增以下修復:


  • [Anck 5.10 aarch64][nightly]kernel_selftests 測試套下 net.tls 用例 fail:在 ->get_port() 前將 err 設定成正確的錯誤碼。()

  • [Anck 5.10 nightly][ANCK-5.10-14][x86_64]kernel-selftests:執行 net 目錄下 reuseaddr_ports_exhausted.sh 用例 fail:修復核心為未建立的 socket 附加 ktls ULP 時返回正確的錯誤碼。()

  • 安全


本月網路方向共計修復 17 個 CVE,覆蓋 ulp/wifi/sched/ipv6/sctp/mpls/usb/nfc/netfilter/bluetooth 等模組,CVE 列表:CVE-2022-4129,CVE-2023-0461, CVE-2023-23455,CVE-2023-23559,CVE-2022-47929,CVE-2023-0394,CVE-2023-1074,CVE-2023-26545,CVE-2022-2964,CVE-2023-23454,CVE-2023-1281,CVE-2020-25672,CVE-2023-0590,CVE-2020-25670,CVE-2023-1095,CVE-2022-20566,CVE-2020-25671。

03 高效能網路協議棧 SMC

本月,龍蜥社群高效能網路 SIG 在 SMC 領域的工作,主要聚焦在標準化協議的擴充套件、本機高效能通訊方案和 eBPF 策略替換能力。

本機高效能通訊方案

本機的 loopback 和容器間(跨 netns)通訊已經是一種常見的資料路徑,在資料處理和雲原生場景有著非常廣泛的使用。例如雲原生場景下,service mesh 透過 proxy 程式與業務程式、sidecar 進行通訊。SMC 提供了本機(loopback 和 容器間)的高效能通訊方案,對比傳統的使用者態 IPC、以及核心的 TCP loopback 或者 UNIX domain socket 等方案,除了效能具有非常大的優勢之外(詳細資料可參考 LWN 連結: ),同時對於應用透明無侵入、無修改。本月我們繼續完善已經推送到 Linux 社群的 RFC 提案,併傳送出 v4 版本(LWN 連結)。從當前反饋來看,Linux 社群對於方案的適用場景、可行性已經達成一致。目前聚焦在 SMC 協議如何確保唯 一識別到本機的 loopback 裝置。當前的方案是透過多重 ID 來區分不同的 loopback 裝置,衝突的機率在 1/2^(64*3)。關於 SMC loopback 的更進一步的議題,我們將在 SMC 開發者例會上與 Linux 社群的 Maintainer 進一步溝通。

協議擴充套件

SMC 協議定義在 IETF RFC 7609 和 IBM SMC PDF 手冊之中,協議規定了雙方如何握手直至建立連線並正常通訊。當前協議存在一些問題,例如 SMC v2 協議尚未標準化,以及尚無針對協議設定預期場景之外的擴充。本月龍蜥社群與 Linux 社群在協議擴充套件上達成了一致,至此我們推進的幾個關鍵協議擴充套件內容在 SMC 開發者例會上討論基本完畢,並在經過一系列 review 和 comment 之後,進入正式的協議更新和釋出流程。本次達成一致的協議擴充套件主要包括:單連線的特性的支援,LGR 最大連線數可協商的支援,RDMA write with immediate 的支援,以及可擴充套件的選項等。

eBPF 策略替換

SMC 提供了動態回退 TCP 的能力,當前的回退策略的決策因素主要是由 RDMA / ISM 連線建立是否成功。由於 SMC 短連結效能不如 TCP,為了讓 SMC 更加通用,因此計劃給 SMC 增加基於策略的回退 TCP 的能力,幫助 SMC 更好地適配不同應用模型和場景。基於上面的背景,我們向 Linux 的 BPF 社群推送了基於 eBPF struct ops 特性的 SMC 策略回退的補丁,並於 BPF 的 maintainer 和 struct ops 的作者討論實現細節。基於討論的細節,我們傳送了更新版本的補丁。如果 eBPF 策略替換方案被社群接受後,我們將 eBPF 策略替換的使用者態實現提交到 SMC 工具(smc-tools)之中,簡化使用者使用,同時 SMC ULP 方案也將會被廢棄。

04 virtio

virtio specification 支援 virtqueue notification coalescing

背景:Net DIM (Generic Network Dynamic Interrupt Moderation) 演算法透過統計當前網路中單個佇列的流量資訊和中斷次數,自適應計算中斷調整方向和步長,並將結果配置下發到裝置,以達到提升網路吞吐量的目的。由於目前的 virtio specification 不支援對單個佇列進行中斷引數下發,所以還無法支援 netdim。


高效能網路組推進的 virtio-net: support the virtqueue coalescing moderation 的提案,可以讓 virtio-net 支援動態中斷調節,並對逐個佇列下發中斷調節引數,目前該工作已經被 virtio 社群投票透過( https://lists.oasis-open.org/archives/virtio-dev/202303/msg00415.html)。

virtio-net inner header hash

為了支援 VXLAN、GENEVE、GRE 等隧道協議基於內頭部計算雜湊,提升 RSS 以及監控場景的收包效能,高效能網路 SIG 小組發起了 virtio_net: support inner header hash ( https://lists.oasis-open.org/archives/virtio-dev/202303/msg00415.html)的提案。


本月 v9->v12 的討論主要集中在 inner header hash 如何更好的支援對稱雜湊的主題上:


legacy GRE 等隧道協議基於 IP 頭進行傳輸,其既沒有外部埠號,也沒有可以用於識別 flow-specific 的欄位,所以基於內頭部計算雜湊是十分必要的。另外,VXLAN、GENEVE 等現代隧道協議雖然都可基於 transport header 進行傳輸,即可以透過外部埠號來提高熵,但是在某些監控場景下,它們可能需要同一 流的資料包被雜湊到同一個接收佇列,但是同一條流可能會經過不同隧道封裝,因此,必須使用內頭部計算對稱雜湊才能到達此目的。


目前針對如何找出一個 key 或者 hash 演算法可以同時對稱雜湊 ipv4/ipv6 資料包的問題還沒有達成一致,我們會和社群進一步溝通以讓 inner header hash 更加通用。

virtio-net 支援 AF_XDP zerocopy

背景:AF_XDP 是一個 bypass 核心的新的收發包框架。它可以把驅動的收包直接傳遞到使用者態,使用者態可以直接把包從使用者態傳遞到驅動直接傳送出去。它的效能相比於核心的 UDP PPS 可以提升 3-7 倍。但是它要驅動進行 zerocopy 的支援。


目前這個系列的 patch set 由於數量太多,計劃分成兩個部分:


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

  • 這部分已經基本在社群的 review 透過。

  • virtio-net 支援 AF_XDP。後續的工作在前面一個 patch set 的基礎上,會提交到 net-next 分支上。

  • 這部分的 patch 也進行了拆分,目前在推進對於 virtio-net 的 xdp 進行程式碼重構。這一實現已經和社群基本達成了一致。

  • 後續的 patch 會在下一個版本釋出之後,net 部分包含了 virtio core 的程式碼更新之後再提交。


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


—— 完 ——



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

相關文章