flow

OVS架构

吃可爱长大的小学妹 提交于 2019-11-28 07:23:07
先看下OVS整体架构,用户空间主要组件有数据库服务ovsdb-server和守护进程ovs-vswitchd。kernel中是datapath内核模块。最上面的Controller表示OpenFlow控制器,控制器与OVS是通过OpenFlow协议进行连接,控制器不一定位于OVS主机上,下面分别介绍图中各组件 ovs1 ovs-vswitchd ovs-vswitchd 守护进程是OVS的核心部件,它和 datapath 内核模块一起实现OVS基于流的数据交换。作为核心组件,它使用openflow协议与上层OpenFlow控制器通信,使用OVSDB协议与 ovsdb-server 通信,使用 netlink 和 datapath 内核模块通信。 ovs-vswitchd 在启动时会读取 ovsdb-server 中配置信息,然后配置内核中的 datapaths 和所有OVS switches,当ovsdb中的配置信息改变时(例如使用ovs-vsctl工具), ovs-vswitchd 也会自动更新其配置以保持与数据库同步 # ps -ef |grep ovs-vs root 22176 22175 0 Jan17 ? 00:16:56 ovs-vswitchd unix:/var/run/openvswitch/db.sock -vconsole:emer -vsyslog:err

Openvswitch原理与代码分析(3): openvswitch内核模块的加载

穿精又带淫゛_ 提交于 2019-11-28 07:21:34
上一节我们讲了ovs-vswitchd,其中虚拟网桥初始化的时候,对调用内核模块来添加虚拟网卡。 我们从openvswitch内核模块的加载过程,来看这个过程。 在datapath/datapath.c中会调用module_init(dp_init);来初始化内核模块。 static int __init dp_init(void) { int err; BUILD_BUG_ON(sizeof(struct ovs_skb_cb) > FIELD_SIZEOF(struct sk_buff, cb)); pr_info("Open vSwitch switching datapath %s\n", VERSION); err = compat_init(); if (err) goto error; err = action_fifos_init(); if (err) goto error_compat_exit; err = ovs_internal_dev_rtnl_link_register(); if (err) goto error_action_fifos_exit; err = ovs_flow_init(); if (err) goto error_unreg_rtnl_link; err = ovs_vport_init(); if (err) goto

BZOJ 2039 人员雇佣 (最小割)

六眼飞鱼酱① 提交于 2019-11-28 07:05:26
题面: BZOJ传送门 网络流的题真神仙= = 大致分为三种情况 选某个人$i$,收益减少$a_{i}$ 选了$i$选了$j$,收益增加$2e_{ij}$ 选了$i$不选$j$,收益减少$e_{ij}$ 收益问题用最小割的常用套路,实际收益$=$可能的收益总和$sum-$最小割 考虑最小割如何建图 源点$S$向$i$连流量为$\sum_{j}e_{ij}$的边,$i,j$之间连流量为$2e_{ij}$的双向边,$i$向汇点$T$连流量为$a_{i}$的边 对于两个人$i$和$j$,把上述三种情况带入 选了i选了j $i,j$和$T$之间的边被割断,流量为$a_{i}$和$a_{j}$,减掉即可,$2e_{ij}$这部分收益已经在$sum$里了,不需要管 选了i不选j $i$和$T$之间的边被割断,$S$和$j$之间的边被割断。 此时,连接在$i,j$之间流量为$2e_{ij}$的边就要发挥作用了 如果想继续保持现在的割边状态,会有一条流量为$2e_{ij}$的流$S$->$i$->$j$->$T$ 其中$e_{ji}$($j$对这种情况的贡献)已经在割$S->j$时从$sum$里去掉了 我们不仅要去掉$sum$里的$e_{ij}$($i$的贡献)。还要去掉一份e_{ij},因为题目要求选$i$不选$j$会带来额外的负收益$e_{ij}$,一共是$2e_{ij}$ 所以$i,j

How can I find the minimum cut on a graph using a maximum flow algorithm?

瘦欲@ 提交于 2019-11-28 03:19:03
I need to find the minimum cut on a graph. I've been reading about flow networks, but all I can find are maximum flow algorithms such as Ford-Fulkerson, push-relabel, etc. Given the max flow-min cut theorem, is it possible to use one of those algorithms to find the minimum cut on a graph using a maximum flow algorithm? How? The best information I have found so far is that if I find "saturated" edges i.e. edges where flow equals capacity, those edges correspond to the minimum cut. Is that true? It doesn't sound 100% right to me. It is true that all edges on the minimum cut will be saturated,

POJ - 2112 Optimal Milking (dijkstra + 二分 + 最大流Dinic)

做~自己de王妃 提交于 2019-11-28 01:49:54
(点击此处查看原题) 题目分析 题意: 在一个农场中有k台挤奶器和c只奶牛,每个挤奶器最多只能为m只奶牛挤奶,每个挤奶器和奶牛都视为一个点,将编号1~k记为挤奶器的位置,编号k+1~k+c记为奶牛的位置,奶牛只能在这k+c个位置之间移动,输入将给出每个位置和其余k+c个位置的之间道路距离,其中0代表无法到达 问让所有奶牛进行挤奶的情况下(也就是让每头奶牛都走到一个挤奶器的位置上去,而且这个挤奶器上的奶牛不得超过m个),求c只奶牛中走的最远的奶牛的最小移动总距离。 思路: 首先思考到这题目要二分答案,因为移动最远的奶牛的移动总距离越大,就越有可能满足要求 然后我们用c次dijkstra求出每个奶牛到所有挤奶器的最近距离,再根据我们二分的奶牛移动最远距离,限制了每个奶牛可以到达的挤奶器 随后我们就要判断这种情况下是否所有奶牛都可以到达一个挤奶器,而且每个挤奶器上的奶牛不超过m个,此时就是一个明显的求最大流问题了,建图如下: 1)由源点向每个奶牛建一条容量为1的边 2)由每个挤奶器向汇点建一条容量为m的边 3)由每个奶牛向其可以到达的所有挤奶器建一条容量为inf的边 最后,我们跑出这个图的最大流,如果最大流等于c,说明当前的情况是满足的,需要尝试更小的最远的距离;如果最大流不等于c,说明当前的最远距离太小了,以至于有奶牛无法到达挤奶器,需要尝试更大的最远距离。 代码区 #include

P3376 网络流-最大流模板题(Dinic+当前弧优化)

耗尽温柔 提交于 2019-11-28 01:12:51
(点击此处查看原题) Dinic算法 Dinic算法相对于EK算法,主要区别在于Dinic算法对图实现了分层,使得我们可以用一次bfs,一次dfs使得多条增广路得到增广 普通的Dinic算法已经可以处理绝大多数最大流(最小割)的题目了,但是总是有些题目会卡住普通的Dinic算法,此时我们就需要用到当前弧优化了 当前弧优化简述 不要小看当前弧优化,这个优化效果可是很明显的,就这个例题来说,我用普通的Dinic算法用时约1.7s,而使用了当前弧优化的Dinic算法后,只用了176ms,由此可以看出这个优化的强大 当前弧优化的核心思想为:避免遍历已经满流的边,总所周知,已经满流的边已经再构成增广路,而普通Dinic算法中,我们总是遍历所有的边,后判断这条边是否满流,这样相当于白白消耗时间 回想一下我们普通Dinic算法中将增广路增广的方法:我们总是尽可能地将某一条边的容量完全利用,因为我们建立了反边,可以“反悔”,因此我们可以完全利用这条边的容量;而对于被完全利用的边,因为这条边已经满流了,之后的增广路中不会用到这条边,那么我们就可以标记一下从每个点出发的第一条不满流边,下次从这个点开始求增广路的时候,就可以跳过之前已经满流的那些边,直接从不满流边开始遍历了 具体操作的话,我们用cur数组记录以每个点为起点的边当前可用的第一条不满流边,在dfs之前我们将head数组的值复制给cur数组

Flow

家住魔仙堡 提交于 2019-11-27 21:39:45
1. 定义变量类型 // @flow function getStrLength(str: string): number{ return str.length; } getStrLength(‘Hello World’); 需要编译去掉标注后浏览器才认识,Flow 提供 flow-remove-types 和 babel 插件 两种方式来去除标注内容 2. 对哪一个文件进行检查? 
// @flow // 或者下面这种 /* @flow */ 如果你想对一个文件进行类型检查,必须在文件头部加上一行注释; 意思简单明了,AT 一下 Flow 检查器,意思是:“嘿, Flow,来验一下我”。 当我们写完代码后,运行 flow check(或者配置的相应 npm 命令),Flow 会对加上了这行注释的 JS 文件进行类型检查,并且只会对加了这行注释的 JS 文件进行类型检查;这样可以方便的使你渐进式的把你项目中 JS 文件一个个的改写得符合规范。 3. 自动类型推导 在我们将一个 JS 文件加入类型检测的范围之后,运行 flow check, Flow 会怎么对这些文件进行操作呢?Flow 有一个自动的类型推导机制,很多情况下,Flow 都自动推导出变量的类型并持续跟踪其使用;比如: let name = 'zhihu'; 来源: https://www.cnblogs.com

layui flow loading占位图实现方法

﹥>﹥吖頭↗ 提交于 2019-11-27 18:03:32
如果流图片要加载失败, 就会显示找不到图片的裂痕 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="layui/css/layui.css" media="all"> </head> <body> <img lay-src="loadingImg/aaa.jpg"> <img src="loadingImg/bbb.jpg" alt="该图片不会加载"> <!--ddd.jpg 图片不存在--> <img src="loadingImg/ddd.jpg"> <img src="loadingImg/loading.gif" lay-src="ddd.jpg"> <img src="loadingImg/loading.gif" lay-src="loadingImg/aaa.jpg"> <script src="layui/layui.js"></script> <script type="text/javascript"> var $; layui.use(['flow', 'jquery'], function () { var flow = layui.flow; $ = layui.jquery; flow

Proactive vs. Reactive

旧巷老猫 提交于 2019-11-27 17:21:39
前不久一个研究SDN的博士生和博主抱怨说:现在开源的SDN控制器性能都好差啊,每秒钟2K个新流就会提示packet-in太多,停止工作。博主问他是如何定义一个流的,他说用TCP 5 tuple。博主又问他是怎么产生那么密集的packet-in的,他说是用一台服务器直接向SDN控制器发packet-in。博主接着问那台服务器和SDN控制器的配置,他说服务器是8核,SDN控制器是4核。博主没有继续问更多的问题,而是在想:是什么原因让人们设计出这样的实验?如果这个实验的数据正确,那么又意味着什么呢? 直到今天,不少人对SDN和OpenFlow都抱有**两个误解。第一,采用OpenFlow的SDN控制器是在per flow的更新流表。第二,每个flow有自己的生命周期,控制器只为active flow更新流表,其余的表项则会被删除。**之所以是误解,是因为任何一个版本的OpenFlow标准都没有说per flow的更新,更没有说只为active flow更新流表。事实上,OpenFlow仅仅定义了控制器和交换机之间的一种接口,根本没提要如何使用这些接口。 一个非常有趣的问题是:人们为什么会对SDN和OpenFlow有以上的误解?首先,OpenFlow这个名字非常糟糕,它本身似乎在暗示人们这个协议是per flow的,但事实根本不是这样。如果有机会为这个协议重新起名

【转载】基于 Open vSwitch 的 OpenFlow 实践

旧时模样 提交于 2019-11-27 17:21:24
Open vSwitch 概述 Open vSwitch(下面简称为 OVS)是由 Nicira Networks 主导的,运行在虚拟化平台(例如 KVM,Xen)上的虚拟交换机。在虚拟化平台上,OVS 可以为动态变化的端点提供 2 层交换功能,很好的控制虚拟网络中的访问策略、网络隔离、流量监控等等。 OVS 遵循 Apache 2.0 许可证, 能同时支持多种标准的管理接口和协议。OVS 也提供了对 OpenFlow 协议的支持,用户可以使用任何支持 OpenFlow 协议的控制器对 OVS 进行远程管理控制。 Open vSwitch 概述 在 OVS 中, 有几个非常重要的概念: Bridge: Bridge 代表一个以太网交换机(Switch),一个主机中可以创建一个或者多个 Bridge 设备。 Port: 端口与物理交换机的端口概念类似,每个 Port 都隶属于一个 Bridge。 Interface: 连接到 Port 的网络接口设备。在通常情况下,Port 和 Interface 是一对一的关系, 只有在配置 Port 为 bond 模式后,Port 和 Interface 是一对多的关系。 Controller: OpenFlow 控制器。OVS 可以同时接受一个或者多个 OpenFlow 控制器的管理。 datapath: 在 OVS 中,datapath