DPDK based Open vSwitch热升级设计与实现( 二 )
- 第二阶段:
- 老进程退出 。
- 新进程开启 pmd 线程开始转发 。
- 升级结束 。
文章插图
由升级时序图可以看出 , 热升级第一阶段里新 ovs 进程完成了最耗时的初始化工作 , 同时老 ovs 进程一直在进行转发 , 并没有断网 。断网只是在第二阶段老 ovs 退出和新 ovs 启动 PMD 线程之间发生 。
在升级过程中 , 我们利用了 MLNX 网卡一个特性:同一个网卡设备可以被两个独立的 dpdk 进程同时打开 , 并且流量会被同时镜像到两个进程中去 。如果使用其他的网卡 , 可以通过多 VF 配合流表规则切换的方法达到同样效果 。这里就不再展开叙述了 。
断网时间评估我们考察了两种虚拟网卡后端的断网时间:
- 采用 representer + VF 的方式 ,
- 采用 vhost-user + virtio 的方式 。
representer + VF 方式ping 测试10 次试验结果如下:
1524 packets transmitted, 1524 received, +36 duplicates, 0% packet loss, time 16747ms623 packets transmitted, 622 received, +29 duplicates, 0% packet loss, time 6830ms662 packets transmitted, 662 received, +30 duplicates, 0% packet loss, time 7263ms725 packets transmitted, 724 received, +28 duplicates, 0% packet loss, time 7955ms636 packets transmitted, 635 received, +28 duplicates, 0% packet loss, time 6973ms752 packets transmitted, 750 received, +27 duplicates, 0% packet loss, time 8251ms961 packets transmitted, 961 received, +31 duplicates, 0% packet loss, time 10551ms737 packets transmitted, 737 received, +29 duplicates, 0% packet loss, time 8084ms869 packets transmitted, 869 received, +27 duplicates, 0% packet loss, time 9543ms841 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 方式结果类似 , 也是吞吐会有一定的下降 , 升级完成后立刻恢复 。
【DPDK based Open vSwitch热升级设计与实现】
推荐阅读
- CentOS7下部署开放式漏洞评估系统OpenVAS
- OpenSSL 精粹:SSL 证书、私钥和 CSR
- OpenCV-dlib-python3实现人脸戴墨镜和含Y的抖音效果
- 使用OpenLAN搭建专有VPN
- nginx中加入opentracing能力
- OpenCV能做哪些好玩的项目?适合初学者学习的五个计算机视觉项目
- CentOS7分布式部署open-falcon0.3.0实践
- IBM开放Open P-TECH远程学习平台
- 从源码层,拆解OracleJDK和OpenJDK有什么区别?
- 利用openresty+lua+redis 实现封杀频繁恶意访问IP地址