ovs internal port 对比 veth-pair 性能

先说结果: 通过 internal port 连接到 OVS 比通过 veth-pair 获得( 略微 )更好的性能。

测试结果1

我通过 iperf 工具在我的环境(一台物理机 2 个虚拟机)中以这种方式测试了性能: ovs-internal-port 11.1-11.4Gb/s (1 process) 12.9-13.3Gb/s (4 process)

veth-pair-device 10.8-11.0Gb/s (1 process) 11.8-12.2Gb/s (4 process)

测试结果2

系统是一台 PowerEdge R730,配备英特尔(R) 至强(R) CPU E5-2690 v3 @ 2.60GHz,运行 Linux 内核 4.0 。

以下是每轮 netperf 测试的 5 轮结果。单位为 Mbits/s。

测试脚本

原理分析

有一些一些关于最适合使用哪个接口来连接 Linux 容器或网络命名空间的讨论。有人说 Open vSwitch Internal port 是最好的,因为它的吞吐量。

嗯,如果你看一下 openvswitch 内核源,内部端口实际上是一个用 vport 备份的 netdev 设备。因此,当它被移动到另一个命名空间时,与 vswitch 的链接仍然存在,因为 vport 保留了引用。因此,这非常简单,从命名空间发送的数据包会通过与任何其他设备相同的代码路径,直到到达驱动程序层,该层的路径直接更改为 Open vSwitch 数据路径 (OVS DP)。

现在查看 veth 代码,数据包不会遵循相同的路径,因为默认情况下,veth 有一个 长度为 1000 个数据包的队列。因此,数据包被推送到该队列中,队列规则将运行。此外,使用多个 CPU 同时传输并不能很好地扩展,因为 veth 只有一个队列,因此该队列上会出现锁定争用。

此时,veth 数据包到达与 OVS 内部端口相同的点,但出于安全原因 ,它们不是直接进入 OVS DP ,而是被清理,然后转发 到另一个对等 netdev 设备。在这里,它与从硬件接收的任何其他 netdev 设备一样,因此它将传递 RPS(接收数据包转向)代码来选择目标 CPU(如果启用),然后将数据包推送到 CPU 的积压工作中并安排软中断 运行。 通常, 软中断在此代码路径返回处理队列后立即运行。

这意味着数据包会进入网络堆栈的初始部分 ,在该部分选择了适当的处理程序 - Bridges、Bonding、VLANs、Protocols 等。 由于数据包来自 OVS 端口,因此会调用 OVS DP 处理程序,从现在开始,内部端口和 veth 共享相同的代码路径。 将数据包推送到 CPU 的 backlog 中,然后等待软中断运行的额外开销当然会带来性能损失,但它实际上保证了系统的公平性。

使用场景对比:

  • 在 openstack 的虚拟机、virtual router/network/loadbalancer 的网络命名空间设计中,都是使用internal port 连接到 ovs 网桥
  • 但在所有 pod(容器)场景,不管是 ovs 还是 linux bridge 都是使用 veth-pair,因为需要处理 ovs internal port 和 容器 eth0(k8s 会检测)的命名上的问题

结论:如果不是容器场景,最好还是直接使用 internal port

参考: github.com/antrea-io/a... arthurchiao.art/blog/ovs-de... flavioleitner.blogspot.com/

相关推荐
卷无止境2 小时前
独立开发者的"富矿地带":哪些垂直领域值得你押注一辈子?
后端·python
狼爷3 小时前
从零用 Java 构建 AI Agent 框架:JavaManus 设计与实现深度解析
后端·langchain·aigc
郑州光合科技余经理3 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
专业程序开发源3 小时前
springboot简历管理系统81389-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计
专业程序开发源3 小时前
springboot社区养老系统44071-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·php·课程设计
小呆呆6663 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
周杰伦fans4 小时前
8GB显存下模型量化实战指南
人工智能·后端·c#
小蒜学长4 小时前
基于SpringBoot的佳新超市管理系统设计与实现系统(代码+数据库+LW)
java·数据库·spring boot·后端·佳新超市管理系统
IT_陈寒5 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
打工仔折腾 AI6 小时前
把AI Agent托管在家用电脑:UU远程终端与端口映射实测记录
人工智能·后端·python·langchain·ai agent 实战