OVS内核态架构图
内核态与用户态交互
OVS的架構分成快速路徑(fast path)與慢速路徑(slow path)
快速路徑是內核空間(kernel space)的openvswitch.ko
慢速路徑是用戶空間(user space)的ovs-vswitchd
OVS+DPDK架构
dpif-netdev:用户态的快速通路,实现了基于netdev设备的dpif API。
ofproto-dpif:实现了基于dpif层的ofproto API。
netdev-dpdk:实现了基于DPDK的netdev API,其定义的几种网络接口如下:
dpdk物理网口:其实现是采用高性能向量化DPDK PMD的驱动。
dpdkvhostuser接口: vhost-user可以挂接到用户态的数据通道上,与虚拟机的virtio网口快速通信。为了性能,在vhost burst收发包个数上,需要和dpdk物理网口设置的burst收发包个数相同。
DPDK加速的OVS数据流转发的大致流程如下:
1)OVS的ovs-vswitchd接收到从OVS连接的某个网络端口发来的数据包,从数据包中提取源/目的IP、源/目的MAC、端口等信息。
2)OVS在用户态查看精确流表和模糊流表,如果命中,则直接转发。
3)如果还不命中,在SDN控制器接入的情况下,经过OpenFlow协议,通告给控制器,由控制器处理。
4)控制器下发新的流表,该数据包重新发起选路,匹配;报文转发,结束。
DPDK加速的OVS与原始OVS的区别在于,从OVS连接的某个网络端口接收到的报文不需要openvswitch.ko内核态的处理,报文通过DPDK PMD驱动直接到达用户态ovs-vswitchd里。
数据流向
从物理或虚拟接口进入OvS-DPDK的数据包会根据其标头字段接收唯一的标识符或哈希,然后将其与三个主要交换表之一中的条目进行匹配:精确匹配缓存(EMC),数据路径分类器(dpcls)或ofproto分类器。数据包的标识符将按顺序遍历这三个表中的每一个,除非找到匹配项,在这种情况下,将执行表中匹配规则指示的适当操作,并在完成所有操作后将数据包转发出交换机。
这三个表具有不同的特性和相关的吞吐量性能/延迟。EMC为有限数量的表条目提供了最快的处理速度。数据包的标识符必须与该表中所有字段(源IP和端口,目标IP和端口以及协议的5元组)的条目完全匹配,以实现最快的处理,否则它将在EMC上“遗漏”并传递给dpcls。dpcls包含更多表条目(安排在多个子表中),并启用数据包标识符的通配符匹配(例如,指定了目标IP和端口,但允许任何源)。这大约提供了EMC吞吐量性能的一半,并且可以满足大量的表条目。
dpcls上的未命中会导致将数据包标识符发送到ofproto分类器,以便OpenFlow控制器可以决定操作。该路径性能最低,比EMC慢10倍以上。ofproto分类器中的匹配导致在更快的交换表中建立新的表条目,以便可以更快地处理相同流中的后续数据包。
EMC插入概率
默认情况下,每100个流中有1个插入到精确匹配缓存(EMC)中。可以通过设置emc-insert-inv-prob选项改变此插入概率:
ovs-vsctl --no-wait set Open_vSwitch . other_config:emc-insert-inv-prob=N
EMC是以PMD为边界的,每个PMD拥有自己的EMC;dpcls是以端口为边界的,每个端口拥有自己的dpcls;ofproto classifier是以桥为边界的,每个桥拥有自己的ofproto classifier
原文链接:https://blog.csdn.net/u013743253/article/details/120291014