标签:OVS 架构 EMC 端口 ofproto 数据包 DPDK
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
标签:OVS,架构,EMC,端口,ofproto,数据包,DPDK 来源: https://blog.csdn.net/weixin_44260459/article/details/122632770
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。