一种智能化流表更新方法
技术领域
本发明涉及openflow流表表项(flow entry)的智能化更新方法,具体涉及一种基于openflow交换机的流表表项智能化更新方法。
背景技术
目前,为了应对网络规模急剧扩张所导致的大规模数据中心的运维管理等面临的问题,相关学者提出了软件定义网络(SDN)的概念。SDN将转发和控制分离,控制层与转发层通信的主流标准是openflow协议。在SDN中,数据层与控制层分离,交换机将繁重的控制策略部分交由控制器来负责,而它仅根据控制器下发的规则对数据包进行快速转发。
然而,数据包转发策略主要依据的是控制器下发的流表,随着流的数量增加,流表的规模也在急速扩张,由于交换机端的存储空间是有限的,所以需要及时移除一些不常使用的流表表项。
目前openflow协议主要定义了三种表项移除机制:
1.Hard timeout移除机制。从表项下发到交换机端开始计时,当表项在交换机端的生存时间达到了hard_timeout值,则将表项移除。此机制的缺点就是即使该流表项正在被频繁的匹配也会被无情的删除。
2.Idle_timeout移除机制。当表项在idle_timout时间段内没有被任何流匹配,则移除该表项。该机制虽然解决了hard_timeout机制存在的问题,但是并没有考虑交换机端的实际内存情况,如果交换机端内存足够,则完全不必急于移除表项。
3.Importance移除机制。当交换机内存不够时,优先删除那些importance值较小的表项。该机制虽然考虑了交换机端的实际状况,但是并没有考虑表项的实际热度。
综上,openflow协议定义的三种机制共同存在的一个缺陷就是移除策略都是由控制器预先安排的,并没有考虑到交换机端实际运行中的情况。虽然现在也有很多方法考虑了该问题,例如:根据交换机端内存情况来动态的改变hard_timeout和idle_timeout值,以增加表项在内存中的生存时间。但是以上方法存在的问题就是违背了控制器的移除策略,例如:控制器确实只想让某个表项只生存hard_timeout那一段时间,交换机却违背了它的意愿,这可能在将来也会对控制器与交换机之间的交流产生影响,控制器也是给了交换机处理流表的权利的,当内存告警时,交换机可根据流表的importance来更新流表,当idle_timeout和hard_timeout都为0时,代表流表可以一直存在,或者说流表的生存期将交由交换机处置,所以交换机端的优化不必违背控制器的超时移除策略。
因此,本发明针对openflow协议定义的三种机制共同存在的缺陷就是移除策略都是由控制器预先安排的,并没有考虑到交换机端实际运行中的情况,以及目前的机制违背了控制器的移除政策等问题,提供了一种基于openflow交换机的智能化流表的更新方法。
发明内容
本发明的目的是解决当前openflow协议定义的三种机制共同存在的缺陷,上述缺陷的具体内容为移除策略都是由控制器预先安排的,并没有考虑到交换机端实际运行中的情况,以及目前的机制违背了控制器的移除政策等问题。
为实现上述目的,本发明提供了一种基于openflow交换机的智能化流表更新方法,包括以下步骤:一种智能化流表更新方法,包括以下步骤:
通过按表项存在价值value建立有序队列entry_queue,有序队列entry-_queue用于存储各表项占用内存的大小;监控交换机端内存的使用情况,当交换机内存占用未超过内存最大值mem-max时,则检测有序队列entry_queue更新时间间隔;对有序队列entry_queue更新时间间隔进行判断,当有序队列entry_queue更新时间间隔达到预设值时,则计算表项新的存在价值value,并更新有序队列entry_queue。
当交换机内存占用大于内存最大值mem_max时,则删除占用内存的总和为mem_delete大小的至少一个表项,从而达到内存正常值mem_normal的状态;根据表项的重要值importance从小到大选出占用内存总和为两倍mem-_delete大小的至少一个表项,计算表项新的存在价值value,并更新有序队列entry_queue。当有序队列entry_queue更新时间间隔未达到预设值时,则跳转至所述监控交换机端内存的使用情况的步骤,直到当有序队列entry-_queue更新时间间隔达到预设值时,则计算表项新的存在价值value,并更新有序队列entry_queue。
在计算表项新的存在价值value,并更新有序队列entry_queue的步骤之后,还包括:跳转到所述监控交换机端内存的使用情况,当所述交换机内存占用未超过内存最大值mem-max时,则检测所述有序队列entry_queue更新时间间隔的步骤。
通过按表项存在价值value建立有序队列entry_queue的步骤中,value值由以下公式获得:
Value=importance*A-idle_time*B
其中,上述公式的重要值importance来源于openflow表项下发时控制器所设置的importance值;空闲时间idle_time是由交换机在运行时记录的;A和B是对两者进行加权,其中A或B可以设为大于0的任意值。
空闲时间idle_time是由交换机在运行时记录的值,具体的记录方法由以下公式获得:
Idle_time=time_now–time_last
其中,最后时间内time_last为记录最后一次包匹配时的系统时间,然后根据每隔预设值C秒,获得当前系统时间当前时间time_now。预设值C秒小于等于60,即有序队列entry_queue的更新周期小于等于60秒。
内存删除值mem_delete由以下公式获得:
mem_delete=mem_max–mem_normal
其中,当交换机内存占用大于等于内存最大值mem_max时,则删除占用内存的总和为mem_delete大小的至少一个表项,从而达到内存正常mem-_normal的状态。在删除占用内存的总和为mem_delete大小的至少一个表项的步骤中包括:
从有序队列entry_queue中选取排在前面的表项,再满足以下公式时,删除相应的N个表项:
Mem_delete<=entry_queue[0].size+…+entry_queue[N].size
其中,size为在有序队列entry_queue中存储各表项占用内存的大小;0和N为0到N个表项。
其中,有序队列entry_queue的更新步骤包括:先根据表项的重要值importance从小到大,选出占用内存总和为两倍mem_delete大小的至少一个表项,然后在根据计算表项新的存在价值value,并更新有序队列entry-_queue。
本发明的有益效果是:本发明提出了一种基于openflow交换机的流表表项智能化更新方法,实现了更加智能高效的流表更新机制。本发明在保证了遵循控制器移除策略的基础上,充分考虑了交换机端的实际运行情况,实现了更加智能高效的流表更新策略。
附图说明
图1为本发明实施例提供的一种entry_queue存储结构示意图;
图2为本发明实施例提供的一种基于openflow交换机的流表表项智能化更新方法的工作流程图。
具体实施方式
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例提供的一种entry_queue存储结构示意图.如图1所示,建立按表项存在价值value建立递增的有序队列entry_queue,此队列用链表实现,便于动态排序。
对于链表中存储内容,ID表示为表项ID,用来索引待删除表项;value为表项存在价值,由Value=importance*A-idle_time*B公式计算得出;size为表项的大小;next指向下一表项。
图2为本发明实施例提供的一种基于openflow交换机的流表表项智能化更新方法的工作流程图。如图2表示,具体步骤包括:
步骤1:交换机端进行初始化,根据表项important的值从小到大选出两倍mem_delete内存的大小的表项,再根据公式
Value=importance*A-idle_time*B (1)
计算出Value的值,从而更新有序队列entry_queue。
步骤2:监控交换机端内存使用情况:如果交换机端的内存占用未超过mem_max,则执行步骤3;如果交换机端的内存占用超过mem_max,则执行步骤4。
步骤3:检测有序队列entry_queue更新时间间隔是否达到预设值C秒:如果达到预设值C秒,则根据公式Idle_time=time_now–time_last(2)计算出各表项的idle_time,继续执行步骤5;如果未达到预设值C秒,则继续执行步骤2。
步骤4:根据公式mem_delete=mem_max–mem_normal(3)式计算出mem_delete,然后根据公式
Mem_delete<=entry_queue[0].size+…+entry_queue[N].size(4)从entry_queue中选出需要删除的N个表项,将其删除后执行步骤(6)。
步骤5:根据(1)式计算表项新的存在价值value,并更新entry_queue,继续执行步骤2。
具体地,通过按表项存在价值value建立递增的有序队列entry_queue,然后在队列中存储各表项占用内存大小size,其中value值按照公式(1)计算得出:公式(1)中importance来源于openflow表项下发时控制器所设置的importance值,而idle_time则是由交换机在运行时进行记录。A与B则是对两者进行加权,这里A,B可以设为大于0的任意值,通过灵活的设置A值与B值,可以在尊重控制器的表项更新策略与兼顾交换机在实际运行中所观察到的表项动态之间进行权衡和折衷。
其中,idle_time是由交换机在运行时记录的,具体的记录方法是对于每个表项,记录最后一次包匹配时的系统时间time_last,然后每隔预设值C秒,获得当前系统时间time_now,然后根据公式(2)计算出idle_time,然后根据新的idle_time更新entry_queue。
本方法采用每隔预设值C秒更新一次entry_queue,而不是当交换机端内存告警时再生成entry_queue,是为了在内存告警时更高效的删除表项释放出新的内存空间。考虑到网络流量的复杂性,这里预设值C的值一般小于等于60,即entry_queue的更新周期应该小于等于60秒。
所述方法当交换机内存占用达到mem_max时,就会删除占用内存的总和为mem_delete大小的至少一个表项,来达到mem_normal的状态,在这种状态下可以保证交换机能够及时应对新来的数据流。Mem_delete由(3)式计算出来。在删除占用内存的总和为mem_delete大小的至少一个表项时,是从有序队列entry_queue中选取排在前边的表项,然后当(4)满足时,删除相应的N个表项,在entry_queue中并不是对所有表项进行排序,而是先根据表项的importance从小到大选出占用内存总和为两倍mem_delete大小的至少一个表项,然后再根据(1)式计算出这些表项的value值,从而更新entry_queue。这样处理,就可以避免每次更新entry_queue都要遍历所有表项,从而缓解交换机端的计算压力,提高流表更新效率。
本发明实施例提出了一种基于openflow交换机的流表表项智能化更新方法,实现了更加智能高效的流表更新机制。本发明在保证了遵循控制器移除策略的基础上,充分考虑了交换机端的实际运行情况,实现了更加智能高效的流表更新策略。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。