首页 > 其他分享 >高性能网络SIG月度动态:virtio-net 支持动态中断调节,SMC v2 协议增加新扩展

高性能网络SIG月度动态:virtio-net 支持动态中断调节,SMC v2 协议增加新扩展

时间:2023-07-12 19:32:10浏览次数:58  
标签:virtio v2 SIG CVE 2023 net 动态 SMC

高性能网络 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 新增以下修复:

本月网络方向共计修复 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 链接:https://lwn.net/Articles/927410/),同时对于应用透明无侵入、无修改。本月我们继续完善已经推送到 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)https://www.kernel.org/doc/html/next/networking/net_dim.html算法通过统计当前网络中单个队列的流量信息和中断次数,自适应计算中断调整方向和步长,并将结果配置下发到设备,以达到提升网络吞吐量的目的。由于目前的 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 动态前往龙蜥官网获取:

龙蜥 SIG 主页链接:

https://openanolis.cn/sig

—— 完 ——

高性能网络SIG月度动态:virtio-net 支持动态中断调节,SMC v2 协议增加新扩展_用户态




微信公众号 - OpenAnolis龙蜥(OpenAnolis)。

标签:virtio,v2,SIG,CVE,2023,net,动态,SMC
From: https://blog.51cto.com/u_15308345/6703255

相关文章

  • albumentations 的数据增强为什么是 先 Normalize, 再 ToTensorV2,而 pytorch 正好相反
    albumentations:T+=[A.Normalize(mean=mean,std=std),ToTensorV2()]#NormalizeandconverttoTensortorchvision:T.ToTensor(),T.Normalize(IMAGENET_MEAN,IMAGENET_STD),原因:A.Normalize已经包含了将8位图像(0-255)转换为(0-1)(将mean和stdx255,然后再......
  • P1115 最大子段和 一维动态规划
    #include<iostream>#include<cmath>usingnamespacestd;longlongn,a[200005],dp[200005],ans;intmain(){cin>>n;for(inti=1;i<=n;i++){cin>>a[i];}dp[1]=a[1];ans=a[1];for(inti=2;i<......
  • Leetcode - 动态规划总结(必看!!!)
     一、labuladong动态规划模板思路wiki:https://labuladong.gitee.io/algo/di-ling-zh-bfe1b/dong-tai-g-1e688/题目: 动态规划模板思路: 二、我自己如何理解【状态】【选择】 以714题目《最佳时机去买卖股票+手续费》为例子:1.确定【状态】--寻找原问题和子问题中,......
  • css 自定义动态排列
    需求就是显示一批头像,正常排列,很简单吧!用弹性盒子再加上允许换行,就解决了吗?问题是:头像之间有间隔,就需要加margin-right,问题来了本行最后一个盒子的空隙大了,正好能放下一个头像,这时肯定去掉margin.(这里设定最后一个盒子空隙大,当然也可能正好或者多一点点)。头像容器宽度不确定,......
  • 递归生成表格动态表头
    <render-column:columnList="headList"></render-column><el-table-column><templatev-for="(item,index)incolumnList"><el-table-columnv-if="item.child&&item.child.length>0":......
  • MyBatis实现动态SQL更新
    博主记得在一个周五快下班的下午,产品找到我(为什么总感觉周五快下班就来活......
  • 微信支付V2签名生成
    参数sign_data={"appid":APP_ID,"mch_id":MCAH_ID,"out_trade_no":order.order_num,"transaction_id":order.pay_order,"cu......
  • NV21、NV12、YV12、RGB、YUV、RGBA、RGBX8888等图像色彩编码格式区别
    常用图像颜色编码格式NV21、NV12、YV12、RGB、YUV、RGBA、RGBX8888都是常见的图像颜色编码格式,它们之间的主要区别在于色彩空间和数据排列方式。NV21:NV21是Android系统使用的一种图像颜色编码格式,它采用的是YUV4:2:0的采样方式,意味着垂直方向上每两个像素采样一次,水平方向上每个像......
  • Element-动态控制el-table的行的显示与隐藏
    <el-tableborderstripe:data="form.serialDateList"style="width:100%":row-class-name="rowClassName">//rowClassName<el-table-columntype="index"width="60"align="center"label=&......
  • wpf的动态Tab的例子,使用Prism
    引用Prism.Core,Prism.Wpf和Prism.Unity修改App.xaml的类型替换为 PrismApplication 修改App.xaml.cs:///<summary>///InteractionlogicforApp.xaml///</summary>publicpartialclassApp:PrismApplication{protectedoverride......