1. OVS 架构总览

1.1 整体架构分层

Open vSwitch (OVS) 采用经典的控制面与数据面分离架构,从上到下依次为:管理面、控制面和数据面。用户空间进程负责策略下发与流表管理,内核模块负责高速包处理。

核心原则: 慢路径(slow path)由用户空间处理,快路径(fast path)由内核模块处理。绝大多数数据包应走内核快路径,避免陷入用户空间。
OVS 整体分层架构 OVS 整体分层架构 用户空间 (User Space) ovs-vswitchd — 流表管理、OpenFlow 协议处理、慢路径转发 ovsdb-server — 配置数据库持久化 ovs-ctl / ovs-appctl — 控制与调试工具 内核空间 (Kernel Space) openvswitch.ko — 内核数据路径模块 流表缓存 (Megaflow Cache) — 高速匹配转发 VXLAN/Geneve/GRE 隧道封装解封装 硬件层 (Hardware) 物理网卡 / DPDK 用户态驱动 / SmartNIC 硬件卸载 数据流方向:上 → 下

1.2 用户空间与内核空间分工

OVS 将控制逻辑与数据转发分离,分工明确,避免单点瓶颈:

维度 用户空间 (ovs-vswitchd) 内核空间 (openvswitch.ko)
职责 控制面:流表管理、OpenFlow 协议、学习、策略下发 数据面:高速包匹配、转发、隧道封装/解封装
处理速度 慢路径(毫秒级),适合控制报文和首包 快路径(微秒级),适合数据流持续转发
流表类型 OpenFlow 流表(完整匹配) Megaflow Cache(掩码匹配,缓存优化)
通信机制 通过 Netlink 与内核模块通信 通过 Netlink 接收用户空间下发的流表
典型操作 ARP 请求、DHCP、首包上送、流表更新 MAC 转发、IP 路由、VXLAN 封装
性能关键: 内核 Megaflow Cache 命中率应保持在 99% 以上。若大量数据包上送用户空间,CPU 开销将急剧上升,导致吞吐下降。

1.3 ovs-vswitchd 与内核模块关系

ovs-vswitchd 是 OVS 用户空间的核心守护进程,openvswitch.ko 是内核数据路径模块。二者通过 Netlink 协议进行双向通信,形成“控制-转发”分离架构。

ovs-vswitchd 与内核模块交互 ovs-vswitchd 与内核模块交互流程 ovs-vswitchd 用户空间守护进程 流表管理 / OpenFlow openvswitch.ko 内核数据路径模块 Megaflow Cache / 转发 Netlink 消息 流表下发 / 统计上报 典型交互流程 1. 数据包到达内核,Megaflow Cache 未命中 → 上送用户空间 2. ovs-vswitchd 执行 OpenFlow 流表查找,决策转发动作 3. 通过 Netlink 将新流表下发至内核 Megaflow Cache 4. 后续同流数据包直接在内核匹配转发,不再上送

1.4 关键通信机制:Netlink

Netlink 是 Linux 内核与用户空间进程进行双向数据传输的 socket 机制。OVS 使用 Generic Netlink 家族 定义自定义消息类型,实现流表下发、统计收集、端口管理等功能。

Netlink 优势: 全双工、异步、支持多播,比 ioctl 更灵活,比 procfs 更高效。OVS 内核模块注册为 Netlink 家族 "ovs_datapath",用户空间通过 libnl 库与之通信。

1.5 数据包处理路径概览

一个数据包从网卡到达 OVS 再到最终转发的完整路径如下:

  1. 物理网卡 接收数据包,通过内核网络栈送入 OVS 内核模块。
  2. 内核模块 提取包特征,在 Megaflow Cache 中查找匹配。
  3. Cache 命中 → 直接执行转发动作(如输出端口、隧道封装)。
  4. Cache 未命中 → 数据包上送用户空间 ovs-vswitchd。
  5. ovs-vswitchd 在 OpenFlow 流表 中精确匹配,计算转发决策。
  6. 将新流表通过 Netlink 下发至内核,同时转发该数据包。
  7. 后续同流数据包直接走 内核快路径,不再上送。
常见误区: 并非所有数据包都走用户空间。生产环境中,首包上送后,后续数千个同流包均在内核完成转发。若观察到大量上送,应检查 Megaflow Cache 大小或流表超时设置。

1.6 架构优势总结

优势 说明
高性能 内核快路径处理大部分流量,避免用户空间上下文切换开销
灵活性 用户空间可运行复杂控制逻辑(如 OpenFlow、学习交换机)
可扩展 支持 VXLAN/Geneve/GRE 等多种隧道,支持硬件卸载
标准化 使用 OpenFlow 协议,兼容多种控制器(如 ODL、ONOS)
可观测性 通过 ovs-appctl 和内核统计接口实时监控流表状态