Openflow Plugin学习笔记2
OpenDaylight OpenFlow Plugin 过载保护
过载保护
OF Plugin中的过载保护按如下流程工作:
ConnectionConductor将消息送入队列,是最靠近OFJava的部分,其中的on*Message方法监听协议栈入消息。ConnectionConductor实现类(ConnectionConductorImpl)将消息送入QueueKeeper,每个ConnectionConductor拥有一个本地的QueueKeeper实例。
QueueKeeper拥有两条队列,均为有限大小及阻塞式:
- Unordered (用于packetIn消息)
- Ordered (用于除packetIn以外的消息)
当某条queue充满后,继续送往该队列的消息将被丢弃。一旦队列能够重新送入消息,harverster将从休眠中被唤醒
QueueZipper包装了2条队列,提供poll方法定期轮询队列,当轮询的队列为空时,则轮询下一队列。(详见QueueKeeperFairImpl)
每个QueueKeeper在QueueKeeperHarvester中注册。Harvester运行一个线程,轮询所有注册的QueueKeeper。轮询消息排队送往QueueProcessor。当所有注册的QueueKeeper为空,Harvester进入休眠
QueueProcessor中多个线程负责将OFJava-API消息转译为MD-SAL消息(保序)。QueueProcessor使用2个线程池:
- 一个线程池处理队列事务
- 另一个线程池将消息发布到MD-SAL
队列充满可能有如下原因:
- MD-SAL过载
- 节点发生泛洪,或其他原因造成处理流程减速
如QueueProcessor中的队列充满,将阻塞Harvester。一旦Harvester阻塞,则QueueKeeper中的队列将无法排空。
Note: The current implementation of the feature offers no checking of the memory or cpu load to actively throttle messages.

过载保护效果
- 当某个节点发生泛洪,来自其他节点的消息不会被阻塞
- 平等消息处理,发生泛洪节点的消息不会优先处理
- 内存不会耗尽,因为消息无法送入本地的队列,一旦失败就会丢弃
- 此功能不会对netty层产生压力
Openflow Plugin学习笔记2的更多相关文章
- Openflow Plugin学习笔记3
MDController.java 中的start方法,创建了SwitchConnectionHandlerImpl实例 SwitchConnectionHandlerImpl switchConne ...
- Openflow Plugin学习笔记1
主入口 ConfigurableOpenFlowProviderModule是OpenFlowPlugin中启动加载的入口,如下: @Override public java.lang.AutoClo ...
- OpenFlow Switch学习笔记(五)——Group Table、Meter Table及Counters
本文主要详述OpenFlow Switch的另外两个主要组件——Group Table和Meter Table,它们在整个OpenFlow Swtich Processing中也起到了重要作用. 1. ...
- OpenFlow Switch学习笔记(四)——Matching
这次我们着重详述来自于网络中的数据包在OpenFlow Switch中与Flow Entries的具体匹配过程,以及当出现Table Miss时的处理方式,下面就将从这两方面说起. 1.Matchin ...
- OpenFlow Switch学习笔记(一)——基础概念
OpenFlow Switch v1.4.0规范是在2013年10月14号发布,规范涵盖了OpenFlow Switch各个组件的功能定义.Controller与Switch之间的通信协议Open F ...
- OpenFlow Switch学习笔记(七)——Matching Fields
Matching Fields in_port=port Matches OpenFlow port port dl_vlan=vlan Matches IEEE 802.1q Virtual LAN ...
- OpenFlow Switch学习笔记(六)——Instructions和Actions
本文主要重点讨论OpenFlow Switch规范的指令集,它们深刻影响着数据包在Switch中的处理行为,下面开始从以下几个部分谈起. 1.Instructions 每一个Flow Entry里都包 ...
- OpenFlow Switch学习笔记(三)——Flow Tables
这次我们主要讨论下OpenFlow Switch的核心组件之一——Flow Tables,以了解其内部的 matching 以及 action handling 机制.下文将会分为几个部分来逐步详述O ...
- OpenFlow Switch学习笔记(二)——OpenFlow Ports
OpenFlow Ports是OpenFlow Switch与剩余网络之间传递Packet的网络接口.OpenFlow Switches之间通过OpenFlow Ports彼此相互逻辑连接.一个Ope ...
随机推荐
- Viewpoint Meta标签
移动web Viewpoint常用得设置方式: [布局viewpoint] = [设备宽度] = [度量viewpoint] <meta name="viewport" co ...
- Linux服务器ping不通域名出现的unknown host 错误解决办法
"ping: unknown host www.baidu.com" 解决方法 如果某台Linux服务器ping不通域名, 如下提示: # ping www.baidu.compi ...
- 集合里面的 E是泛型 暂且认为是object
集合里面的 E是泛型 暂且认为是object
- LOJ2430:[POI2014]沙拉餐厅Salad Bar——题解
https://loj.ac/problem/2430 是的我BZOJ又没卡过……懒得卡了. 参考:https://blog.csdn.net/zqh_wz/article/details/52887 ...
- redis的简单事务
Redis对事务的支持目前还比较简单.Redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令.当一个client在一个连接中发出multi命令时,这个 ...
- 20135239益西拉姆 Linux内核分析 操作系统是怎样工作的?
益西拉姆+ 原创作品+ <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ” 堆栈 堆栈是C语言程序运行时 ...
- bzoj3306: 树(dfs序+倍增+线段树)
比较傻逼的一道题... 显然求子树最小值就是求出dfs序用线段树维护嘛 换根的时候树的形态不会改变,所以我们可以根据相对于根的位置分类讨论. 如果询问的x是根就直接输出整棵树的最小值. 如果询问的x是 ...
- bzoj2956: 模积和(数论)
先算出无限制的情况,再减去i==j的情况. 无限制的情况很好算,有限制的情况需要将式子拆开. 注意最后的地方要用平方和公式,模数+1是6的倍数,于是逆元就是(模数+1)/6 #include<i ...
- 解题:APIO 2014 回文串
题面 初见SAM 洛谷数据太弱了,我SAM写错了居然有90pts=.=??? SAM求一个子串$(l,r)$的出现次数:从右端点对应状态开始在parent树上倍增,当目标节点的$len$大于等于子串长 ...
- 【bzoj2938】病毒
Portal -->bzoj2938 Solution 这题的话..一开始想的是不是上一个trie就消失了但是后来发现好像我还是太年轻qwq 比较容易联想到..AC自动机,多串匹配嘛 然后就.. ...