DPDK based Open vSwitch热升级设计与实现,android笔试面试题

  • 同时,老的 ovs 会将所有的 OpenFlow 规则进行备份。

  • 这一切完成之后,老进程会返回 JSON-RPC 的请求的响应。如果上述过程无问题,则返回成功,升级继续。否则返回失败,新进程会退出,升级失败。同时老进程会状态回滚,将之前释放的资源又重新申请回来,回到正常的工作状态。

  • 新进程获得各种状态信息,开始正常初始化。包括 DPDK 初始化内存,ovs 从 ovsdb 中获取网桥、网卡等各种配置开始初始化等。在这个过程中,如果出现异常,新进程 crash,会导致 JSON-RPC 这个 unix socket 连接中断。一旦老进程检测到这个连接中断,就认为新进程初始化失败,自动回滚。

  • 新进程加载之前备份的 OpenFlow 规则。这之间的 OpenFlow 规则变更,会由 local controller 记录并下发。

  • 新进程发起第二阶段 JSON-RPC 请求。

  • 第二阶段:

    • 老进程退出。
  • 新进程开启 pmd 线程开始转发。

  • 升级结束。

下图简单的描述了升级时序图:

由升级时序图可以看出,热升级第一阶段里新 ovs 进程完成了最耗时的初始化工作,同时老 ovs 进程一直在进行转发,并没有断网。断网只是在第二阶段老 ovs 退出和新 ovs 启动 PMD 线程之间发生。

在升级过程中,我们利用了 MLNX 网卡一个特性:同一个网卡设备可以被两个独立的 dpdk 进程同时打开,并且流量会被同时镜像到两个进程中去。如果使用其他的网卡,可以通过多 VF 配合流表规则切换的方法达到同样效果。这里就不再展开叙述了。

断网时间评估

======

我们考察了两种虚拟网卡后端的断网时间:

  1. 采用 representer + VF 的方式,

  2. 采用 vhost-user + virtio 的方式。

测试方法


两台宿主机上两台虚机互相 ping,使用ping -i 0.01。两次 ping 之间相隔 10ms,最后统计在升级中,ping 包未回的数量即表示升级断网时间。iperf -i 1测试,观察 TCP 吞吐是否会受到影响。

representer + VF 方式


ping 测试

10 次试验结果如下:

1524 packets transmitted, 1524 received, +36 duplicates, 0% packet loss, time 16747ms

623 packets transmitted, 622 received, +29 duplicates, 0% packet loss, time 6830ms

662 packets transmitted, 662 received, +30 duplicates, 0% packet loss, time 7263ms

725 packets transmitted, 724 received, +28 duplicates, 0% packet loss, time 7955ms

636 packets transmitted, 635 received, +28 duplicates, 0% packet loss, time 6973ms

752 packets transmitted, 750 received, +27 duplicates, 0% packet loss, time 8251ms

961 packets transmitted, 961 received, +31 duplicates, 0% packet loss, time 10551ms

737 packets transmitted, 737 received, +29 duplicates, 0% packet loss, time 8084ms

869 packets transmitted, 869 received, +27 duplicates, 0% packet loss, time 9543ms

841 packets transmitted, 840 received, +28 duplicates, 0% packet loss, time 9228ms

发现最多出现 1 个丢包,说明断网时间最长 10ms。但是发现了很多 duplicates 的包,这个是因为 mlnx 网卡在 switchdev 模式下有一个 bug:当出现双进程时,本应该流量被镜像到另一个进程,结果 mlnx 网卡让一个进程收到了两个重复包,而另一个进程没有包。目前 mlnx 已经确认了这个问题。

iperf 测试

观测到升级期间,有 1s 速率减半,由满速率 22Gbps 到 13Gbps,估计是和 MLNX bug 引发的重传包和升级断网有关。1s 之后迅速回到 22Gbps。

vhost-user + virtio 模式


ping 测试

断网时间在 70~80ms 左右。通过对日志分析,发现是老进程在退出时,反复进行了 vhost 重连导致,这块通过继续优化,断网时间会进一步降低。这里就不再展开了。

iperf 测试

和 VF 方式结果类似,也是吞吐会有一定的下降,升级完成后立刻恢复。

相关代码

====

我们使用的 ovs-dpdk 已经开源。如果对热升级的具体实现有兴趣,可以参考 vswitchd 目录下 ndu.c 文件。在 utilities 目录下我们提供了 ovs-nductl 工具用于测试热升级 JSON-RPC 服务,可以模拟热升级。升级脚本参考 utilities 目录下的 ovs-hotupgrade.sh。我们的开源链接为:https://github.com/bytedance/ovs-dpdk

更多分享

====

eBPF技术实践:高性能ACL

自动化弹性伸缩如何支持百万级核心错峰混部 | 架构沙龙回顾

字节跳动分布式表格存储系统的演进

字节跳动系统部 STE 团队

=================

字节跳动系统部 STE 团队一直致力于操作系统内核与虚拟化、系统基础软件与基础库的构建和性能优化、超大规模数据中心的稳定性和可靠性建设、新硬件与软件的协同设计等基础技术领域的研发与工程化落地,具备全面的基础软件工程能力,为字节上层业务保驾护航。同时,团队积极关注社区技术动向,拥抱开源和标准。欢迎更多有志之士加入,如有意向可发送简历至  sysrecruitment@bytedance.com

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

这里我特地整理了一份《Android开发核心知识点笔记》,里面就包含了自定义View相关的内容

除了这份笔记,还给大家分享 Android学习PDF+架构视频+面试文档+源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这几块的内容。非常适合近期有面试和想在技术道路上继续精进的朋友。

分享上面这些资源,希望可以帮助到大家提升进阶,如果你觉得还算有用的话,不妨把它们推荐给你的朋友~

喜欢本文的话,给我点个小赞、评论区留言或者转发支持一下呗~

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

fBwmnU-1712486120966)]

分享上面这些资源,希望可以帮助到大家提升进阶,如果你觉得还算有用的话,不妨把它们推荐给你的朋友~

喜欢本文的话,给我点个小赞、评论区留言或者转发支持一下呗~

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值