提高SDN控制器的拓扑发现性能(通过改进逻辑)

最近做实验,发现ryu的拓扑发现性能不高,因此阅读了ryu拓扑发现源码,查阅了相关论文,改进了ryu的拓扑发现性能,改写了代码,并且重新做了实验,发现改进的拓扑发现模块能力有所增强,但是还是有局限性,现在先对前面的工作做个总结,以后有时间了继续改进。

一.LLDP拓扑发现原理

传统网络中的链路发现协议为LLDP(Link Layer Discovery Protocol),LLDP允许局域网中的结点告诉其他结点他自己的capabilities和neighbours。在传统以太网交换机中,交换机从自己的每个端口发送LLDP数据包,他不会被其他交换机转发,寿命只有一跳,LLDP负载被封装在以太网帧中,结构如下图,其中深灰色的即为LLDP负载,Chassis ID TLV, Port ID TLV和Time to live TLV三个是强制字段,分别代表交换机标识符(在局域网中是独一无二的),端口号和TTL。这个数据发出并被邻居结点收到之后进行解析,就可以知道这条链路的源目的交换机以及源目的接口。

二. ryu拓扑发现原理

OpenFlow的官方没有规定标准的拓扑发现方法,现在的OFDP(OpenFlow Discovery Protocol)利用的仍然是传统网络中的链路发现协议LLDP,接下来介绍ryu如何利用LLDP发现拓扑,假设现在有两个OpenFlow交换机连接在控制器上,如下图,简述拓扑发现步骤(以S1作为主体,S2的类似):

  1. SDN控制器构造PacketOut消息向S1的三个端口分别发送上图所示的LLDP数据包,其中将Chassis ID TLV和Port ID TLV分别置为S1的dpid和端口号
  2. 控制器向交换机S1中下发流表,流表规则为:将从Controller端口收到的LLDP数据包从他的对应端口发送出去
  3. 控制器向交换机S2中下发流表,流表规则为:将从非Controller接收到LLDP数据包发送给控制器
  4. 控制器通过解析LLDP数据包,得到链路的源交换机,源接口,通过收到的PacketIn消息知道目的交换机和目的接口

三. 存在的问题与改进空间

现在的ryu发现拓扑是对整个数据平面的所有交换机的所有端口发送PacketOut数据包,对于Fattree等网络来说,端口的数量是交换机数量的k倍,因此导致了很多资源的消耗,我用小服务器跑单纯的拓扑链路发现功能,会经常宕机或者发现的拓扑不完全,同时如果消息太多会引起broken pipe的问题,所以是否可以对这个拓扑发现的机制进行改进,让发送的PacketOut消息和交换机的数量相同?

四. 改进后的ryu拓扑发现机理

为了实现在三中所提到的逻辑改进,需要将LLDP负载中的Port ID TLV进行改进,或者有其他的域和Port ID TLV一一映射也可以,这里提供一种解决办法,在LLDP数据包从交换机端口转发出去的时候,将这个以太网数据包的源MAC地址替换成为这个端口的MAC地址,而控制器在早先的配置阶段已经获得了关于交换机的端口的所有信息,所以对控制器来说,MAC地址和交换机的端口号是一一对应的,下面详细讲述改进方案。

  1. 更新控制器的LLDP PacketOut消息数量,由一个端口一个,改为一个交换机一个PacketOut消息,LLDP数据包负载中的域Port ID TLV值置为零
  2. 控制器向流表下发一条规则:所有从端口Controller接收到的LLDP消息被Flood到除了控制器所有的其他端口,同时将以太网数据帧的源MAC地址设置为对应的端口的MAC地址
  3. 更新控制器的PacketIn消息处理机制,根据LLDP数据包的来源,可以得到目的交换机,目的端口,通过解析LLDP数据包,得到源MAC和源交换机,通过源MAC地址查找对应的端口号
  4. 由于是修改的代码,所以不要忘了删除原来的以端口主导的相关代码

添加的主要变量和类做一简介

  • self.switches:是个字典,存储dpid到SwithData的映射
  • SwitchData类:包含了时间戳以及交换机所包含的LLDP数据
  • SwitchDataState:类似于PortDataState类,继承自字典,保存从Switch类到SwitchData类的映射,维护了一个类似双向链表的数据结构

修改了源switches.py文件,修改后的见github:https://github.com/cotyb/enhancement-ryu/tree/master/ryu%20topology%20enhancement,经过实验发现拓扑发现能力有所增强,但是性能什么的还是有待继续提高,以后有时间了继续改进

参考:Ef?cient Topology Discovery in SDN

时间: 2024-08-26 05:57:31

提高SDN控制器的拓扑发现性能(通过改进逻辑)的相关文章

SDN控制器测试专题五:Floodlight性能测试报告(上)

上一篇重点介绍了<SDN控制器测试专题四:Floodlight南向接口测试报告(下)>,给出了控制器的功能测试结果.本篇将根据确定的性能测试项,对floodlight控制器性进行逐项测试验证,并会给出测试结果. 1 测试目的 验证floodlight v1.0控制器的以下几个性能情况: ■验证控制器支交换机上线的最大规模: ■验证控制器支持的交换机上线的最佳数量: ■验证控制器流表下发的速度: ■验证控制器流表下发时延: ■验证控制支持的最大流表数量: ■验证控制器mac地址的学习速度: ■验

万台规模下的SDN控制器集群部署实践

目前在网络世界里,云计算.虚拟化.SDN.NFV这些话题都非常热.今天借这个机会我跟大家一起来一场SDN的深度之旅,从概念一直到实践一直到一些具体的技术. 本次分享分为三个主要部分: SDN & NFV的背景介绍 SDN部署的实际案例 SDN控制器的集群部署方案 我们首先看一下SDN.其实SDN这个东西已经有好几年了,它强调的是什么?控制平面和数据平面分离,中间是由OpenFlow交换机组成的控制器,再往上就是运行在SDN之上的服务或者是应用.这里强调两个,控制器和交换机的接口——我们叫做南向接

Ryu拓扑发现原理分析

Ryu拓扑发现的核心模块是ryu/topology目录下的switches.py,拓扑发现的应用是同目录下的dumper.py.在dumper.py中,会利用_CONTEXTS来实例化switches.py中的Switches类,然后将拓扑发现的相关信息通过日志方式(LOG.debug)显示.启动命令如下所示: ryu-manager --verbose --observe-links ryu.topology.dumper (pip安装的)或者 ryu-manager --verbose --

安装apr来提高tomcat 的可伸缩性和性能

安装apr来提高tomcat 的可伸缩性和性能 一,下载apr 和 apr-util最新版 [[email protected] tomcat]# cd /usr/local/ [[email protected] tomcat]# wget  http://mirrors.cnnic.cn/apache//apr/apr-1.5.2.tar.gz [[email protected] tomcat]# wget http://mirrors.cnnic.cn/apache//apr/apr-u

性能测试--十个命令迅速发现性能问题

十个命令迅速发现性能问题 """ uptime dmesg | tail vmstat 1 mpstat -P ALL 1 pidstat 1 iostat -xz 1 free -m sar -n DEV 1 sar -n TCP,ETCP 1 top """ 1. uptime $ uptime 23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.02 这是一种用来快速查看系统平

预排序遍历树算法牺牲写性能的改进

结合数据结构与以及"预排序遍历树算法", 利用关系数据库系统实现树型层次模型数据库的存储.检 索.遍历.插入和删除等基本算法,并解决了"预排序遍历树算法"的一个缺点(牺牲写的性能). 详细请看<预排序遍历树算法牺牲写性能的改进 > http://wenku.baidu.com/view/634656b0561252d381eb6e8f

使ViewStub 来提高UI的加载的性能

首先看下API中的ViewStub 根据的文档的说明,ViewStub是一种默认不可见的试图,它没有大小,所以不能被改变,也不能通过某些把viewstub添加到布局当中来, 不过我们可以使用inflate()来吧ViewStub中的试图增加进行,这样可以实现动态的添加试图,不必要每次在onCreate()的时候就加载布局,可以提高我们的性能. Demo中的使用方法: 1:新建布局文件 设置<ViewStub>节点 2: 在Activity中进行按钮点击  viewStub = (ViewStu

通过常用监控命令快速发现性能问题

命令大致如下: uptime dmesg | tail vmstat 1 mpstat -P ALL 1 pidstat 1 iostat -xz 1 free -m sar -n DEV 1 sar -n TCP,ETCP 1 top 1. uptime [[email protected] ~]# uptime 21:18:12 up 1 day, 18:36, 2 users, load average: 0.00, 0.01, 0.05 这是一种用来快速查看系统平均负载的方法,它表明了系

提高室内薄型钢结构防火涂料防火性能的方法

泊腾室内薄型钢结构防火涂料工程师简介正确使用室内薄型钢结构防火涂料提高防火性能.钢结构薄型防火涂料施工前须清除钢结构表面的灰尘.油污及杂物,确保表面清洁.现场室内薄型防火涂料施工前需用搅拌枪充分搅拌均匀,如觉太稠可稀释到便于施工.采用油漆刷和滚刷分层刷涂,室内防火涂料薄型靠前遍刷涂涂层应薄,一般为0.4mm,以增强涂层与钢基材的粘结强度. 待头遍涂层干后再进行下一次涂刷,时间间隔为6-8小时,每次涂层厚度应不大于0.6mm.施工环境应达到CECS24:90规定的条件,雨天或钢结构表面有结露现象,