用于数据包处理的流表管理方法、装置、设备及存储介质制造方法及图纸

技术编号:39241903 阅读:10 留言:0更新日期:2023-10-30 11:54
本申请涉及计算机技术领域,尤其涉及云技术,提供一种用于数据包处理的流表管理方法、装置、设备及存储介质,采用级联的环形队列数据结构存储和管理流表,提高了流表管理的效率。具体的,针对请求分配流表的各线程,基于各级流表队列的优先级顺序分配流表信息,由于每个线程独享一个第一级流表队列,各线程之间不会发生流表信息的竞争,因此,实现了无锁、并发的流表分配方式,提高了流表的管理效率。同时,针对请求释放流表信息的各线程,采用原子指令将各释放的流表信息存储至第三级流表队列中,从而保证被释放的流表信息能够被重新分配,提高流表信息的利用率。再者,相对于使用数据库存储和管理流表,节省了内存空间的占用。节省了内存空间的占用。节省了内存空间的占用。

【技术实现步骤摘要】
用于数据包处理的流表管理方法、装置、设备及存储介质


[0001]本申请涉及计算机
,尤其涉及一种用于数据包处理的流表管理方法、装置、设备及存储介质。

技术介绍

[0002]在软件定义网络(Software Defined Network,SDN)结构中,通过开放流(OpenFlow)协议,实现控制面与数据面的分离,进而将控制面的操作集中到SDN控制器上,而交换机(如虚拟交换机、SDN交换机等)仅负责在本地进行简单、高速的数据面操作。其中,在交换机进行数据面操作的过程中,其对数据包处理(如查找、修改和转发等)的依据为流表。
[0003]目前,相关技术主要使用独立的数据库来存储流表信息,以实现对流表的分配、释放等管理操作。然而,在SDN网络中,虚拟交换机通信链接的新建与老化速度可达每秒几百万条,这意味着,数据库每秒会收到几百万次的流表管理请求,因此,相关技术为保证流表管理的顺序性与一致性,主要采用单一线程或锁来控制数据库的访问,但这种方式降低了流表管理的效率。同时,数据库中的流表信息,往往存在于一个特定的非一致性内存访问(Non Uniform Memory Access,NUMA)节点上,这样,当多个线程请求分配或释放流表时,会出现跨NUMA节点的访问,从而降低了流表的管理效率。
[0004]因此,实现对流表进行高效、有序的管理,成为SDN网络中对数据包进行处理时亟待解决的问题。

技术实现思路

[0005]本申请实施例提供了一种用于数据包处理的流表管理方法,用于对流表进行高效、有序的管理。
[0006]一方面,本申请实施例提供一种用于数据包处理的流表管理方法,包括:
[0007]分别接收多个线程并发发送的流表管理请求,其中,所述多个线程中至少一个线程运行在一个NUMA节点上;
[0008]针对每一个线程,执行以下操作:
[0009]当所述线程的流表管理请求为流表分配请求时,基于内存文件系统中流表信息池包含的各级流表队列的优先级顺序,无锁的为所述线程分配一个流表信息;其中,所述各级流表队列中,每个第一级流表队列存储有一个线程自身在本地内存中可用的流表信息,每个第二级流表队列存储有一个NUMA节点上的各线程在本地内存中可用的流表信息,第三级流表队列存储有各NUMA节点在总内存中可用的流表信息,所述各级流表队列中的流表信息互不重叠,所述第一级流表队列的优先级高于所述第二级流表队列的优先级,所述第二级流表队列的优先级高于所述第三级流表队列的优先级;
[0010]当所述线程的流表管理请求为流表释放请求时,采用原子指令,将所述流表释放请求携带的流表信息,存储至所述第三级流表队列中。
[0011]另一方面,本申请实施例提供一种用于数据包处理的流表管理装置,包括:
[0012]请求接收模块,用于分别接收多个线程并发发送的流表管理请求,其中,所述多个线程中至少一个线程运行在一个NUMA节点上;
[0013]流表管理模块,用于针对每一个线程,当所述线程的流表管理请求为流表分配请求时,基于内存文件系统中流表信息池包含的各级流表队列的优先级顺序,无锁的为所述线程分配一个流表信息;以及,当所述线程的流表管理请求为流表释放请求时,采用原子指令,将所述流表释放请求携带的流表信息,存储至第三级流表队列中;
[0014]其中,所述各级流表队列中,每个第一级流表队列存储有一个线程自身在本地内存中可用的流表信息,每个第二级流表队列存储有一个NUMA节点上的各线程在本地内存中可用的流表信息,所述第三级流表队列存储有各NUMA节点在总内存中可用的流表信息,所述各级流表队列中的流表信息互不重叠,所述第一级流表队列的优先级高于所述第二级流表队列的优先级,所述第二级流表队列的优先级高于所述第三级流表队列的优先级。
[0015]可选的,所述流表管理模块具体用于:
[0016]当所述线程自身的第一级流表队列不为空时,从所述第一级流表队列中为所述线程分配一个流表信息;
[0017]当所述线程自身的第一级流表队列为空时,从上级流表队列中为所述线程分配一个流表信息。
[0018]可选的,所述流表管理模块具体用于:
[0019]当所述线程所在的NUMA节点的第二级流表队列不为空时,从所述第二级流表队列中,分配多个流表信息存储至所述线程自身的第一级流表队列中,并从所述第一级流表队列中为所述线程分配一个流表信息;
[0020]当所述线程所在的NUMA节点的第二级流表队列为空时,从所述第三级流表队列中,分配多个流表信息存储至所述线程所在的NUMA节点的第二级流表队列中,并从所述第二级流表队列中,分配多个流表信息存储至所述线程自身的第一级流表队列中,从所述第一级流表队列中为所述线程分配一个流表信息。
[0021]可选的,所述流表管理模块具体用于:
[0022]获取所述第三级流表队列中当前的第三头指针,将所述第三头指针所指向位置的流表信息,以及其后的至少一个流表信息,存储至所述线程所在的NUMA节点的第二级流表队列中,并将所述第三头指针指向剩余流表信息中第一个流表信息的位置。
[0023]可选的,所述流表管理模块具体用于:
[0024]获取所述第二级流表队列中当前的第二头指针,将所述第二头指针所指向位置的流表信息,以及其后的至少一个流表信息,存储至所述线程自身的第一级流表队列中,并将所述第二头指针指向剩余流表信息中第一个流表信息的位置。
[0025]可选的,所述流表管理模块具体用于:
[0026]获取所述第一级流表队列中当前的第一头指针,将所述第一头指针所指向位置上的流表信息,分配给所述线程,并将所述第一头指针指向下一流表信息的位置。
[0027]可选的,所述流表管理模块具体用于:
[0028]获取所述第三级流表队列中当前的第四头指针,将所述流表释放请求携带的流表信息,存储至所述第四头指针所指向的位置,并将所述第四头指针移动到下一位置。
[0029]可选的,所述将所述流表释放请求携带的流表信息,存储至所述第三级流表队列中的释放速度,小于无锁的为其他线程分配一个流表信息的分配速度。
[0030]可选的,还包括数据处理模块,用于基于所述各线程各自的流表信息,对所述各线程传输的数据包进行处理操作,其中,所述处理操作包括所述数据包的查找、转发、修改和删除中的一个,所述数据包包括图像数据包、语音数据包、文本数据包和网页数据包中的一个。
[0031]另一方面,本申请实施例提供一种电子设备,包括处理器和存储器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,实现上述用于数据包处理的流表管理方法的步骤。
[0032]另一方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机可执行指令,所述计算机可执行指令被电子设备执行时实现上述用于数据包处理的流表管理方法的步骤。
[0033]另一方面,本申请实施例提供一种计算机程序产品,包含计算机程序,所述计算机程序被电本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种用于数据包处理的流表管理方法,其特征在于,所述方法包括:分别接收多个线程并发发送的流表管理请求,其中,所述多个线程中至少一个线程运行在一个非一致性内存访问NUMA节点上;针对每一个线程,执行以下操作:当所述线程的流表管理请求为流表分配请求时,基于内存文件系统中流表信息池包含的各级流表队列的优先级顺序,无锁的为所述线程分配一个流表信息;其中,所述各级流表队列中,每个第一级流表队列存储有一个线程自身在本地内存中可用的流表信息,每个第二级流表队列存储有一个NUMA节点上的各线程在本地内存中可用的流表信息,第三级流表队列存储有各NUMA节点在总内存中可用的流表信息,所述各级流表队列中的流表信息互不重叠,所述第一级流表队列的优先级高于所述第二级流表队列的优先级,所述第二级流表队列的优先级高于所述第三级流表队列的优先级;当所述线程的流表管理请求为流表释放请求时,采用原子指令,将所述流表释放请求携带的流表信息,存储至所述第三级流表队列中。2.如权利要求1所述的方法,其特征在于,所述基于内存中流表信息池包含的各级流表队列的优先级顺序,无锁的为所述线程分配一个流表信息,包括:当所述线程自身的第一级流表队列不为空时,从所述第一级流表队列中为所述线程分配一个流表信息;当所述线程自身的第一级流表队列为空时,从上级流表队列中为所述线程分配一个流表信息。3.如权利要求2所述的方法,其特征在于,所述从上级流表队列中为所述线程分配一个流表信息,包括:当所述线程所在的NUMA节点的第二级流表队列不为空时,从所述第二级流表队列中,分配多个流表信息存储至所述线程自身的第一级流表队列中,并从所述第一级流表队列中为所述线程分配一个流表信息;当所述线程所在的NUMA节点的第二级流表队列为空时,从所述第三级流表队列中,分配多个流表信息存储至所述线程所在的NUMA节点的第二级流表队列中,并从所述第二级流表队列中,分配多个流表信息存储至所述线程自身的第一级流表队列中,从所述第一级流表队列中为所述线程分配一个流表信息。4.如权利要求3所述的方法,其特征在于,所述从所述第三级流表队列中,分配多个流表信息存储至所述线程所在的NUMA节点的第二级流表队列中,包括:获取所述第三级流表队列中当前的第三头指针,将所述第三头指针所指向位置的流表信息,以及其后的至少一个流表信息,存储至所述线程所在的NUMA节点的第二级流表队列中,并将所述第三头指针指向剩余流表信息中第一个流表信息的位置。5.如权利要求3所述的方法,其特征在于,所述从所述第二级流表队列中,分配多个流表信息存储至所述线程自身的第一级流表队列中,包括:获取所述第二级流表队列中当前的第二头指针,将所述第二头指针所指向位置的流表信息,以及其后的至少一个流表信息,存储至所述线程自身的第一级流表队列中,并将所述第二头指针指向剩余流表信息中第一个流表信息的位置。6.如权利要求2或3所述的方法,其特征在于,所述从所述第一级流表队列中为...

【专利技术属性】
技术研发人员:赵健叶小龙王健王亮
申请(专利权)人:腾讯科技深圳有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1