安装教程:
https://docs.openvswitch.org/en/latest/intro/install/dpdk/
https://docs.openvswitch.org/en/latest/howto/dpdk/
overview和应用
https://www.intel.com/content/www/us/en/developer/articles/technical/open-vswitch-with-dpdk-overview.html
OVS-dpdk中文解析
https://zhuanlan.zhihu.com/p/589707574
gitbook
https://tonydeng.github.io/sdn-handbook/dpdk/ovs-dpdk.html
虚拟交换机是运行在通用平台上的一个软件层,可以连接虚拟机的网络端口、提供一套纯软件的路由交换协议栈的一个机制,帮助平台上运行的虚拟机实例(虚拟机之间、虚拟机与外部网络之间)。
虚拟机的虚拟网卡对应虚拟交换机的一个虚拟端口,通用平台上的物理网卡作为虚拟交换机的上行链路端口。
虽然是虚拟交换机,但是他的工作原理和物理交换机类似。虚拟交换机的主要好处体现在扩展灵活。
DPDK加速的OVS与原始OVS的区别在于,从OVS连接的某个网络端口接收到的报文不需要openvswitch.ko内核态的处理,报文通过DPDK PMD驱动直接到达用户态ovs-vswitchd里。
OvS交换机端口由网络设备(或netdevs)表示。Netdev-dpdk是一个使用DPDK来加速交换机I/O的DPDK加速网络设备,通过三个独立的接口实现:一个物理接口(由DPDK中的librte_eth库处理)和两个虚拟接口(librte_vhost和librte_ring)。它们与连接到虚拟交换机的物理和虚拟设备进行交互。
其他OvS架构层提供进一步的功能并与SDN控制器等进行接口交互。dpif-netdev提供用户空间转发,ofproto是实现OpenFlow交换机的OvS库。它通过网络与OpenFlow控制器通信,并通过ofproto提供程序与交换机硬件或软件通信。ovsdb服务器维护该OvS实例的最新交换表信息,并将其与SDN控制器通信。
从物理或虚拟接口进入OvS-DPDK的数据包会根据其标头字段接收唯一的标识符或哈希,然后将其与三个主要交换表之一中的条目进行匹配:精确匹配缓存(EMC),数据路径分类器(dpcls)或ofproto分类器。
除非找到匹配项,否则数据包的标识符将按顺序遍历这三个表,一旦在表中找到匹配规则所指示的适当操作,数据包将在完成所有操作后从交换机中转发出去。该方案如图所示。这三个表具有不同的特性和相关的吞吐性能/延迟。EMC为有限数量的表项提供最快的处理速度。数据包的标识符必须与该表中的所有字段完全匹配(源IP和端口、目标IP和端口以及协议的五元组),才能以最高速度进行处理,否则将“miss”并经过dpcls。dpcls包含更多的表项(按多个子表排列),并且允许对数据包标识符进行通配符匹配(例如,指定目标IP和端口,但允许任意源IP)。这使得其吞吐性能约为EMC的一半,并适用于更大数量的表项。在dpcls中匹配的数据包流被安装在EMC中,以便后续具有相同标识符的数据包可以以最高速度处理。
dpcls中未找到匹配项将导致数据包标识符被发送至ofproto分类器,以便OpenFlow控制器决定采取的操作。这条路径是性能最低的,比EMC慢十倍以上。ofproto分类器中的匹配结果将在更快的交换表中建立新的表项,以便可以更快地处理同一流中的后续数据包。
数据包的标识符将按顺序遍历这三个表中的每一个,除非找到匹配项,在这种情况下,将执行表中匹配规则指示的适当操作,并在完成所有操作后将数据包转发出交换机。
网络存储优化
参考
《深入浅出DPDK》——OVS中的DPDK性能加速