高效能網路SIG月度動態:virtio-net 支援動態中斷調節,SMC v2 協議增加新擴充套件
高效能網路 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 高效能網路SIG月度動態:SMC 與 IBM 就擴充套件協議達成一致,virtio 支援 XDP 新特性IBM套件協議
- 高效能網路 SIG 月度動態:推動 virtio 支援動態中斷調節及更靈活的分流機制
- 高效能網路SIG月度動態:virtio 動態中斷調節最佳化、多項核心網路缺陷修復
- 高效能網路SIG月度動態:virtio新裝置進入virtio規範、smc新特性IPC效能比tcp提升88%TCP
- DM8 DMDSC動態擴充套件節點套件
- Spring Cloud Gateway 擴充套件支援動態限流SpringCloudGateway套件
- 高效能儲存SIG月度動態:EROFS支援直接索引容器映象tar包等索引
- 動態選路協議協議
- Azure Load Balancer : 動態擴充套件套件
- c# ExpandoObject動態擴充套件物件C#Object套件物件
- [LAMP]php動態擴充套件模組安裝LAMPPHP套件
- 高效能網路 SIG 月度動態:長期投入得到業界認可,新增一位 virtio reviewerView
- OpenCloudOS Kernel SIG 月度動態:釋出 OCK 6.6.30-4 版本,新增特性支援Cloud
- Java 動態代理機制分析及擴充套件Java套件
- 寫一個針對IQueryable<T>的擴充套件方法支援動態排序套件排序
- 高效能儲存SIG月度動態:DSMS開始適配Anolis OS、將在ANCK 5.10中支援ublk
- 不改表結構如何動態擴充套件欄位套件
- 請教關於JAVA動態擴充套件問題Java套件
- 高效能儲存SIG月度動態:ANCK 5.10正式支援ublk、erofs容器映象按需讀時延最佳化60%
- OpenResty + Lua 動態增加 Zuul 節點RESTZuul
- MoE 系列(三)|使用 Istio 動態更新 Go 擴充套件配置Go套件
- DcatAdmin 擴充套件: 自定義表單(動態表單)套件
- Scala由類的動態擴充套件想到型別類套件型別
- 可動態擴充套件的資料庫模型設計套件資料庫模型
- Linux中什麼是動態路由?動態路由協議有哪些?Linux路由協議
- 高效能儲存SIG月度動態:ublk完成POC、dsms-storage在Anolis OS上成功適配
- Cloud Kernel SIG月度動態:釋出 Anolis 8.8 映象、kABI 社群共建流程Cloud
- 商密SIG月度動態:檔案加密支援SM4演算法、Anolis 8.8將預設整合 | 龍蜥 SIG加密演算法
- OAuth 2.0 擴充套件協議之 PKCEOAuth套件協議
- 單體系統如何實現動態演進擴充套件套件
- mybatis條件判斷及動態sql的簡單擴充MyBatisSQL
- JMeter 擴充套件外掛實現對自定義協議的支援JMeter套件協議
- 跨鏈協議:擴充套件區塊鏈行業應用的生態邊界協議套件區塊鏈行業
- 動態主機配置協議DHCP協議
- 動態主機配置協議(DHCP)協議
- PostgreSQL 原始碼解讀(248)- HTAB動態擴充套件圖解#2SQL原始碼套件圖解
- PostgreSQL 原始碼解讀(247)- HTAB動態擴充套件圖解#1SQL原始碼套件圖解
- PostgreSql擴充套件Sql-動態載入共享庫(C函式)SQL套件函式