DPDK based Open vSwitch热升级设计与实现

本文介绍字节跳动系统部STE团队在DPDK-based OpenvSwitch上实现的热升级技术,解决了虚拟交换机升级过程中的业务扰动问题。通过双进程升级方案,实现了快速迭代开发,大幅降低了升级导致的断网时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文是由字节跳动系统部 STE 团队出品的文章。

系统级服务的无扰动升级(non distruptive upgrade,下文简称为热升级)对服务的快速迭代开发有非常重要的意义。虚拟交换机(vSwitch)作为虚拟网络的入口,需求多变,但频繁升级断网会影响虚机上运行的业务。此外,一般每台宿主机上只有一个虚拟交换机,在架构上也不好做主备。因此热升级技术对 vSwitch 的快速迭代至关重要。

本文介绍了我们在 DPDK based Open vSwtich(下简称 ovs-dpdk)上的热更新技术的实践,希望和业界同行共同探讨。

现状

  1. Open vSwitch(下简称 ovs)已有的“热升级”方案基本是为 ovs-kernel 而实现的。在 ovs-kernel 中,vswitchd 进程是慢路径,kernel 模块是快速路径。升级 vswitchd 进程时可不替换 kernel 模块,让大部分流量经过 kernel 中 flow cache 转发,减少网络扰动。升级 kernel 模块则可能会有较长的断网风险。这块的详细信息可以参考链接: http://docs.openvswitch.org/en/latest/intro/install/general/?highlight=hot%20upgrade#hot-upgrading

  2. ovs-dpdk 中,快速路径和慢速路径都集成在 vswitchd 进程中,如果简单的重启 vswtichd,由于 DPDK 的初始化(主要是大页初始化,1G 大页耗时约 600ms)、网卡的初始化(实测 Mellanox CX5 驱动初始化耗时接近 1s)都比较耗时,因此会有秒级断网。

  3. 为了实现快速的迭代开发,降低升级导致的断网带来的业务扰动,需要开发 ovs-dpdk 的热升级特性。

方案与折衷

实现热更新有很多实现方式:

  • 插件式升级(形象的说就是热补丁):将主要的包处理逻辑变成动态链接库,通过热加载插件的方式,避免耗时的 dpdk 初始化和网卡初始化。(DPDK 主从模式也可被认为是这种方式的变体)

    • 优点:常规升级断网时间非常小,可以做到纳秒级。

    • 缺点:框架升级和插件升级成为了两种升级,框架和插件之间必然有相互调用的 API 和共享数据结构,开发人员需要保持框架和插件之间的 ABI(Application Binary Interface)一致。一个简单的例子是流表的结构体可能会在框架和插件之间共享,如果升级修改了流表的结构体,框架也需要升级,否则会因为不一致而导致内存错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值