ovs学习

摘要:
OVSDB协议用于与OVSDB服务器通信,netlink机制用于与内核模块通信,OpenFlow协议用于与控制器通信。Ovsdb服务器:OVS轻量级数据库服务器的服务程序,用于保存整个OVS的配置信息。数据库服务程序使用当前广泛认可的ovsdb协议。Ovs vsctl:网桥和接口的创建、删除、设置和查询。Ovs需要在内核和用户模式下匹配流表规则。通常,数据流的第一条消息将被发送到ovs-vswitchd,随后的消息将直接使用内核中的流表缓存进行处理。对于SDN控制器,因为连接在ovs-vSwitchd和ovsdb服务器之间,所以没有区别。

一、 ovs各大组件示意图

image

ovs-vswitchd:ovs守护进程,实现基于流的交换,实现内核datapath upcall 处理以及ofproto 查表,同时是dpdk datapath处理程序。与ovsdb-server通信使用OVSDB协议,与内核模块使用netlink机制通信,与controller通信使用OpenFlow协议。
ovsdb-server:OVS轻量级的数据库服务器的服务程序,用于保存整个OVS的配置信息。数据库服务程序, 使用目前普遍认可的ovsdb 协议。
ovs-vsctl:网桥、接口等的创建、删除、设置、查询等。
ovs-dpctl:配置vswitch内核模块
ovs-appctl:发送命令消息到ovs-vswithchd, 查看不同模块状态
ovs-ofctl:下发流表信息。该命令可以配置其他openflow 交换机(采用openflow 协议)
datapath: Datapath把流的match和action结果缓存,避免后续同样的流继续upcall到用户空间进行流表匹配。
ovs-db:开放虚拟交换机数据库是一种轻量级的数据库,它是一个JSON文件,默认路径:/etc/openvswitch/conf.db

二、 ovs报文转发过程

image

三、 ovs常用命令

查看open vswitch的网络状态	ovs-vsctl show
添加网桥	ovs-vsctl add-br br0 
删除网桥	ovs-vsctl del-br br0 
ovs-vsctl --timeout=2 --if-exists del-br br0 
查询网桥是否存在	ovs-vsctl br-exists br0 
列出所有网桥
显示存在Vlan的网桥 
显示网桥的父桥	ovs-vsctl list-br
		ovs-vsctl br-to-vlan br0
		ovs-vsctl br-to-parent br0
查看 Open vSwitch 中的端口信息	ovs-ofctl show ovs-switch
查看交换机中的所有 Table	ovs-ofctl dump-tables ovs-switch
	ovs-ofctl dump-tables-desc ovs-switch
查看交换机中的所有流表项
查看br0上各个交换机端口的状态	ovs-ofctl dump-flows ovs-switch
			ovs-ofctl dump-ports br0
			ovs-ofctl dump-ports-desc br0
查看内核中的数据通路
查看内核中的流表	ovs-dpctl show
ovs-dpctl dump flows

四、ovs和linux bridge

linux bridge运行在linux内核中,数据报文不会离开内核,通过mac地址匹配,实现简单的转发功能。
image
ovs需要匹配流表规则,兼具内核态和用户态。一般情况下,一个数据流的第一个报文会发向ovs-vswitchd,后续报文会直接利用内核中的流表缓存进行处理。
image

五、dpdk

dpdk

是一组快速处理数据包的开发平台及接口。有intel主导开发,主要基于Linux系统,用于快速数据包处理的函数库与驱动集合,可以极大提高数据处理性能和吞吐量,提高数据平面应用程序的工作效率。

dpdk作用

在数据平面应用中为快速处理数据包提供一个简单而完善的架构。在理解此工具集之后,开发人员可以以此为基础进行新的原型设计处理大并发网络数据请求。

当前数据包的处理流程是这样:
数据包到达网卡,网卡发送中断通知CPU,CPU将数据包拷贝到内核空间中,应用程序从内核空间中拷贝数据到用户态空间,数据处理。

在这个过程中数据包处理耗时的操作有:

网卡每次收到数据都发送中断,打断cpu的工作。切换和恢复过程都耗时
网络数据包经过TCP/IP协议栈,达到真正的应用处理程序时走过很多的流程
应用程序拿到网络数据时需要经过内核空间到用户态空间的一次copy,增加耗时
image

dpdk解决办法

DPDK技术是重载网卡驱动,直接将数据传递给用户态的应用程序,避免了中间环节的经过TCP/IP协议栈,内核空间到用户空间的copy。
同时针对第一点网卡频繁的中断,应用程序可以使用轮询的方式获取网卡上的数据,避免中断造成的场景切换和恢复浪费的时间。
image

dpdk优缺点

DPDK绕过了内核空间,ovs-DPDK的datapath存在于用户空间,能大幅提升网络性能,并且已经在一些对网络性能有要求的场合使用,例如NFV。
对于SDN controller来说,因为连接的是ovs-vSwitchd和ovsdb-server,所以感觉不到差异。
虽然DPDK在一定程度上解决了性能的问题,并且DPDK社区在不断的进行优化,但是DPDK也有其自身的问题:
首先,DPDK没有集成在操作系统中,使用DPDK就需要额外的安装软件,这增加了维护成本。
其次,绕过了Linux内核空间,也就是绕过了网络协议栈,这使得基于DPDK的应用更难调试和优化,因为大量的基于Linux kernel网络调试监控工具在DPDK下不可用了。
第三个问题,DPDK独占了部分CPU和内存,这实际上分走了本该用来运行应用程序的资源,最直观的感受是,使用了DPDK之后,主机可以部署的虚机数变少了。

六、流表

一个最简单的流表由3部分组成,分别是:匹配项 ,动作 ,计数器。
image
流表(低版本)可以匹配OSI模型的1层至4层,如下图所示,对匹配到的流表做转发、丢弃或者更复杂的操作。具体的匹配项如下图所示:
image

流表字段含义

priority:表示优先级,取值越大,优先级越高,匹配table n时,从优先级高的开始匹配。
in_port:数据包进入端口,用于输出端口时,只允许入端口发送的数据包通过。
dl_vlan:数据包的vlan。
dl_vlan_pcp=priority:VLAN 优先级,改值取值区间为[0-7]。数字越大,表示优先级越高。
dl_src=<MAC>,dl_dst=<MAC>:匹配源或者目标的 MAC
地址01:00:00:00:00:00/01:00:00:00:00:00 代表广播
地址00:00:00:00:00:00/01:00:00:00:00:00 代表单播

dl_type=ethertype:匹配以太网协议类型,其中:dl_type=0x0800 代表 IPv4 协议,dl_type=0x086dd 代表 IPv6 协议,dl_type=0x0806 代表 ARP 协议
nw_src=ip[/netmask],nw_dst=ip[/netmask]:当 dl_typ=0x0800 时,匹配源或者目标的 IPv4 地址,可以使 IP 地址或者域名
nw_proto=proto:和 dl_type 字段协同使用。当 dl_type=0x0800 时,匹配 IP 协议编号,当 dl_type=0x086dd 代表 IPv6 协议编号
table=number:指定要使用的流表的编号,范围是 0-254。在不指定的情况下,默认值为 0 通过使用流表编号,可以创建或者修改多个 Table 中的 Flow
reg<idx>=value[/mask]:交换机中的寄存器的值。当一个数据包进入交换机时,所有的寄存器都被清零,用户可以通过 Action 的指令修改寄存器中的值
tp_src=number:TCP/UDP/SCTP 源端口
tp_dst=number:TCP/UDP/SCTP 目的端口
output:如果没有指定组行动,报文就会按照 output 行动中指定的端口转发。Output 行动最后执行。如果组行动和输出行动均存在,那么组行动优先级高。如果两者均不存在,那么报文被丢弃。
mod_vlan_vid:修改数据包的 VLAN tag
strip_vlan:剥离数据包的 VLAN tag
mod_dl_src/ mod_dl_dest:修改源MAC或目的MAC 地址
mod_nw_src/mod_nw_dst:修改源IPv4 地址或者目的IPv4 地址
resubmit(,n):转至table n重新进行匹配
load:value−>dst[start..end]:写数据到指定的字段
normal:代表传统的非 OpenFlow 流水线。仅可用于为一个输出端口,使用普通的流水线处理数据包。如果交换机不能转发数据包从 OpenFlow 流水线到普通流水线,它必须表明它不支持这一行动。
actions:行动集,对数据包的处理行动

免责声明:文章转载自《ovs学习》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【性能-windows端口限制】TPS上不去,应用无压力只有cpu5%,tomcat线程最高1500,增大并发出现connect 报错linux处理僵尸进程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ovs安装教程

原文链接:https://www.cnblogs.com/goldsunshine/p/10331606.html Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之三ovs-vsctl 命令使用 Ope...

进程简述

简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程...

DPDK 无锁队列Ring Library原理(学习笔记)

参考自DPDK官方文档原文:http://doc.dpdk.org/guides-20.02/prog_guide/ring_lib.html 针对自己的理解做了一些辅助解释。 1 前置知识 1.1 CAS 学习无锁队列前先看一个基本概念,CAS原子指令操作。 CAS(Compare and Swap,比较并替换)原子指令,用来保障数据的一致性。 指令有三...

【官网翻译】性能篇(一)应用待机群组

前言        本文翻译了Android开发者文档中的一篇官方文档,用于介绍Android9的一个新特性——应用待机群组(App Standby Buckets)。        中国版官网原文地址为:https://developer.android.google.cn/topic/performance/appstandby。        路径为...

数据中心网络架构演进 — CLOS 网络模型的第三次应用

目录 文章目录 目录 前文列表 CLOS Networking 胖树(Fat-Tree)型网络架构 Fat-Tree 拓扑 Fat-Tree 的缺陷 叶脊(Spine-Leaf)网络架构 Spine-Leaf 拓扑 Spine-Leaf 与光模块 Spine-Leaf 的优势 Spine-Leaf 的缺陷 前文列表 《数据中心网络架构演进...

eNSP——STP配置和选路规则

原理:         STP是用来避免数据链路层出现逻辑环路的协议,使用BPDU传递网络信息计算出一根无环的树状网络结构,并阻塞特定端口。 在网络出现故障的时候,STP能快速发现链路故障,并尽快找出另外一条路径进行数据传输。         交换机上运行的STP通过BPDU信息的交互,选举根交换机,然后每台非根交换机选择用来与根交换机通信的根端口,之后每...