Open vSwitch硬件卸载
本文主要介绍OvS的硬件卸载方案
1 硬件卸载分类
因为OvS分为传统的OvS和基于DPDk的OvS,所以OvS卸载到硬件也有两类:
- 内核态的datapath通过TC-Flower卸载到硬件上
- 用户态的DPDK通过rte_flow卸载到硬件上
本文只讨论基于TC-Flower的硬件卸载方案,基本框架如下图所示。Open vSwitch在2018年增加了对TC Flower的支持,OvS的datapath可以卸载到网卡,Flower规则可以下发到网卡的虚机交换机上。
OvS初始化的时候,会向网卡的虚机交换机下发一条默认的规则,如果网络包匹配不了任何其他规则,则会被这条默认规则匹配。这条规则的action就是将网络数据包送到虚机交换机的管理主机,也就是说送到了位于Linux kernel的datapath上。如果这个网络数据包是首包的话,在Kernel的datapath会继续上送到位于用户空间的ovs-vswitchd。因为ovs-vswitchd中有OpenFlow规则,ovs-vswitchd还是可以完成转发。同时ovs-vswitchd通过TC接口将flow规则下发至硬件。这样,同一个数据流的后继报文,可以直接在网卡的虚机交换机中完成转发。