CN117527689B - 流表卸载方法、系统、设备、集群以及介质 - Google Patents

流表卸载方法、系统、设备、集群以及介质 Download PDF

Info

Publication number
CN117527689B
CN117527689B CN202410024637.8A CN202410024637A CN117527689B CN 117527689 B CN117527689 B CN 117527689B CN 202410024637 A CN202410024637 A CN 202410024637A CN 117527689 B CN117527689 B CN 117527689B
Authority
CN
China
Prior art keywords
hash
hash value
bucket
flow
flow table
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202410024637.8A
Other languages
English (en)
Other versions
CN117527689A (zh
Inventor
常伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhuhai Xingyun Zhilian Technology Co Ltd
Original Assignee
Zhuhai Xingyun Zhilian Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhuhai Xingyun Zhilian Technology Co Ltd filed Critical Zhuhai Xingyun Zhilian Technology Co Ltd
Priority to CN202410024637.8A priority Critical patent/CN117527689B/zh
Publication of CN117527689A publication Critical patent/CN117527689A/zh
Application granted granted Critical
Publication of CN117527689B publication Critical patent/CN117527689B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/645Splitting route computation layer and forwarding layer, e.g. routing according to path computational element [PCE] or based on OpenFlow functionality
    • H04L45/655Interaction between route computation entities and forwarding entities, e.g. for route determination or for flow table update
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/745Address table lookup; Address filtering
    • H04L45/7453Address table lookup; Address filtering using hashing

Landscapes

  • Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本申请提供了一种流表卸载方法、系统、设备、集群以及介质。所述方法包括对第一数据流的第一数据包的头信息采用第一哈希算法得到第一哈希值,采用第二哈希算法得到第二哈希值;获取第一哈希表的第一哈希值对应的第一桶中流表项的数量以及第二哈希表的第二哈希值对应的第二桶中流表项的数量并进行比较,得到比较结果;根据比较结果确定将第二哈希值以及第一流表项卸载到第一哈希表的第一哈希值对应的第一桶中或将第一哈希值以及第一流表项卸载到第二哈希表的第二哈希值对应的第二桶中,所述第一流表项包括第一匹配项以及第一转发项,第一匹配项是根据第一数据流的数据包的头信息生成的,第一转发项用于指示对第一数据流的操作。

Description

流表卸载方法、系统、设备、集群以及介质
技术领域
本发明涉及数据通讯领域,尤其涉及一种流表卸载方法、系统、设备、集群以及介质。
背景技术
随着云计算网络发展,其广泛的业务需求致使数据流量剧增,通过计算设备中运行的虚拟交换机实现数据转发的限制日益凸显。为了满足高性能业务转发需求,减轻计算设备的处理负载,让计算设备能够更专注于与业务相关的事务,就需要专门的卸载硬件来承载数据转发业务。
由于现有技术中虚拟交换机是把流表项原封不动的卸载到硬件,这样流表查找匹配是将流表项中的匹配项进行字符串匹配,比较耗费计算资源。
发明内容
本申请提供了一种流表卸载方法、系统、设备、集群以及介质,能够有效减少计算资源的消耗。
第一方面,提供了一种流表卸载方法,应用于流表卸载系统,所述流表卸载系统包括计算设备以及卸载硬件,其中,所述计算设备中运行虚拟交换机以及数据平面开发工具包以实现数据包的转发,所述卸载硬件用于存储所述虚拟交换机以及数据平面开发工具卸载的用于转发数据包的流表项,所述卸载硬件包括第一哈希表以及第二哈希表,包括:
对第一数据流的第一数据包的头信息采用第一哈希算法得到第一哈希值,采用第二哈希算法得到第二哈希值,其中,第一哈希算法对应第一哈希表,第二哈希算法对应第二哈希表;
获取第一哈希表的第一哈希值对应的第一桶中流表项的数量以及第二哈希表的第二哈希值对应的第二桶中流表项的数量;
将所述第一桶中流表项的数量和所述第二桶中流表项的数量进行比较,得到比较结果;
根据所述比较结果确定将所述第二哈希值以及第一流表项卸载到所述第一哈希表的第一哈希值对应的第一桶中,还是,将所述第一哈希值以及第一流表项卸载到所述第二哈希表的第二哈希值对应的第二桶中,其中,所述第一流表项包括第一匹配项以及第一转发项,所述第一匹配项是根据所述第一数据流的数据包的头信息生成的,所述第一转发项用于指示对所述第一数据流的操作。
在一些可能的设计中,所述方法还包括:
对第一数据流的第二数据包的头信息采用所述第一哈希算法得到所述第一哈希值,采用所述第二哈希算法得到所述第二哈希值;
根据所述第一哈希值获取所述第一桶中存储的各个哈希值,将所述第二哈希值分别和所述第一桶中存储的各个哈希值分别进行比较;
在所述第一桶中存储的各个哈希值中存在和所述第二哈希值相等的哈希值的情况下,将所述第一桶中相等的哈希值对应的流表项读取出来;
在所述第一桶中存储的各个哈希值中不存在和所述第二哈希值相等的哈希值的情况下,根据所述第二哈希值获取所述第二桶中存储的各个哈希值,将所述第一哈希值分别和所述第二桶中存储的各个哈希值分别进行比较,在所述第二桶中存储的各个哈希值中存在和所述第一哈希值相等的哈希值的情况下,将所述第二桶中相等的哈希值对应的流表项读取出来。
在一些可能的设计中,根据所述比较结果确定将所述第二哈希值以及第一流表项卸载到所述第一哈希表的第一哈希值对应的第一桶中,还是,将所述第一哈希值以及第一流表项卸载到所述第二哈希表的第二哈希值对应的第二桶中,包括:
在所述第一桶中流表项的数量减去所述第二桶中流表项的数量大于或者等于数量阈值的情况下,将所述第一哈希值以及第一流表项卸载到所述第二哈希表的第二哈希值对应的第二桶中;
在所述第一桶中流表项的数量减去所述第二桶中流表项的数量小于数量阈值的情况下,将所述第二哈希值以及第一流表项卸载到所述第一哈希表的第一哈希值对应的第一桶中。
在一些可能的设计中,所述第一哈希算法为第一国际电报电话咨询委员会制定循环冗余校验算法、第二国际电报电话咨询委员会制定循环冗余校验算法、调制解调协议中使用的循环冗余校验算法、国际商业机器公司制定的循环冗余校验算法中的其中一个,所述第二哈希算法为第一国际电报电话咨询委员会制定循环冗余校验算法、第二国际电报电话咨询委员会制定循环冗余校验算法、调制解调协议中使用的循环冗余校验算法、国际商业机器公司制定的循环冗余校验算法中的另一个。
在一些可能的设计中,所述方法还包括:
在所述第一桶以及所述第二桶中任意一个桶未满的时候,确定所述第一流表项卸载成功;
在所述第一桶以及所述第二桶均满的时候,确定所述第一流表项卸载失败。
在一些可能的设计中,所述方法还包括:
在流表项的卸载成功率小于卸载阈值的情况下,将所述第一哈希算法和所述第二哈希算的算法组合更换为其他算法组合。
在一些可能的设计中,所述第一哈希算法中哈希值的数量和所述第一哈表中桶的数量为1:1.5。
在一些可能的设计中,所述方法还包括:
在需要删除第一流表项的情况下,将所述第一流表项对应的第一标志位进行复位,所述第一流表项依然存储在所述第一哈希表或者所述第二哈希表中。
第二方面,提供了一种流表卸载系统,所述流表卸载系统包括计算设备以及卸载硬件,其中,所述计算设备中运行虚拟交换机以及数据平面开发工具包以实现数据包的转发;
所述卸载硬件用于存储所述虚拟交换机以及数据平面开发工具卸载的用于转发数据包的流表项,所述卸载硬件包括第一哈希表以及第二哈希表;
所述虚拟交换机或者数据平面开发工具用于对第一数据流的第一数据包的头信息采用第一哈希算法得到第一哈希值,采用第二哈希算法得到第二哈希值,其中,第一哈希算法对应第一哈希表,第二哈希算法对应第二哈希表;
所述虚拟交换机或者数据平面开发工具用于获取第一哈希表的第一哈希值对应的第一桶中流表项的数量以及第二哈希表的第二哈希值对应的第二桶中流表项的数量;
所述虚拟交换机或者数据平面开发工具用于将所述第一桶中流表项的数量和所述第二桶中流表项的数量进行比较,得到比较结果;
所述虚拟交换机或者数据平面开发工具用于根据所述比较结果确定将所述第二哈希值以及第一流表项卸载到所述卸载硬件的所述第一哈希表的第一哈希值对应的第一桶中,还是,将所述第一哈希值以及第一流表项卸载到所述卸载硬件的所述第二哈希表的第二哈希值对应的第二桶中,其中,所述第一流表项包括第一匹配项以及第一转发项,所述第一匹配项是根据所述第一数据流的数据包的头信息生成的,所述第一转发项用于指示对所述第一数据流的操作。
第三方面,提供了一种计算设备,包括:处理器以及存储器,其中,所述存储器用于存储指令,所述处理器用于运行所述存储器中的指令,以执行如第一方面任一项所述的方法。
第四方面,提供了一种计算集群,包括多个计算设备,其中,每个计算设备包括处理器以及存储器,所述存储器用于存储指令,所述处理器用于运行所述存储器中的指令,以执行如第一方面任一项所述的方法。
第五方面,提供了一种计算机可读存储介质,包括指令,所述指令被计算设备执行时,执行如第一方面任一项所述的方法。
附图说明
为了更清楚地说明本发明实施例或背景技术中的技术方案,下面将对本发明实施例或背景技术中所需要使用的附图进行说明。
图1是本申请提供的一种软件定义网络(Software-Defined Networking,SDN)的结构示意图;
图2是本申请提供的一种流表卸载系统的结构示意图;
图3是本申请提供的一种哈希结构体的结构示意图;
图4是本申请提供的一种流表卸载系统对第一个数据包的处理过程的示意图;
图5是本申请提供的一种流表卸载系统对第二个数据包的处理过程的示意图;
图6是本申请提供的一种流表卸载方法的流程示意图;
图7是本申请提供的一种计算设备的结构示意图。
具体实施方式
下面结合本发明实施例中的附图对本发明实施例进行描述。本发明的实施方式部分使用的术语仅用于对本发明的具体实施例进行解释,而非旨在限定本发明。
参见图1,图1是本申请提供的一种SDN的结构示意图。如图1所示,本申请的软件定义网络包括:SDN控制器110以及开放虚拟交换机(open vSwitch,OVS)120。
SDN控制器110是SDN架构中的核心组件,用于负责实现对整个网络的集中管理和控制。SDN控制器将网络的控制平面与数据平面分离,从而提供了更灵活、可编程和可扩展的网络管理方式。SDN控制器的主要功能包括:管理整个网络的控制平面,包括拓扑发现、路由计算、流表下发等。具体地,SDN控制器110通过与OVS 120进行通信,收集网络的拓扑信息,并根据应用需求计算路由,然后将流表下发给OVS 120。其次,SDN控制器110可以根据流量的特征和需求,动态地调整网络的路由选择和流量分配,从而实现流量的负载均衡、拥塞控制和服务质量保障;可以实施访问控制、流量过滤和入侵检测等安全措施,并及时响应网络安全事件,以保护网络免受恶意攻击和数据泄露的威胁等等。SDN控制器110可以是实体设备,也可以是虚拟设备。当SDN控制器110的数量为多个时,还可以是实体设备和虚拟设备混合使用。SDN控制器110可以运行在物理服务器、虚拟机、容器、云平台以及裸金属服务器中。
OVS 120是一种开源的虚拟交换机软件,它实现了一个灵活、可编程和可扩展的交换机平台,用于通过与SDN控制器之间的开源流(OpenFlow)协议进行通信,接收SDN控制器110下发的流表,根据流表实现流量的转发和路由。OVS 120支持在二层和三层网络中进行数据包交换和路由,所以,OVS 120支持对以太网数据帧以及数据包的处理等等。OVS 120可以运行在物理服务器、虚拟机、容器、云平台以及裸金属服务器中。OVS 120还可以和物理交换机混合使用等等。
SDN控制器110和OVS 120可以都设置于容器中,此时,SDN控制器110和OVS 120可以集中在同一个容器中,也可以分布在不同的容器中。SDN控制器110和OVS 120可以都设置于虚拟机中,此时,SDN控制器110和OVS 120可以集中在同一个虚拟机中,也可以分布在不同的虚拟机中。SDN控制器110和OVS 120可以都设置于服务器中,此时,SDN控制器110和OVS120可以集中在同一个服务器中,也可以分布在不同的服务器中。SDN控制器110和OVS 120可以都设置于裸金属服务器中,此时,SDN控制器110和OVS 120可以集中在同一个裸金属服务器中,也可以分布在不同的裸金属服务器中。又或者,SDN控制器110设置于容器中,OVS120设置于虚拟机、服务器、裸金属服务器中的任意一个中。SDN控制器110设置于虚拟机中,OVS 120设置于容器、服务器、裸金属服务器中的任意一个中。SDN控制器110设置于服务器中,OVS 120设置于容器、虚拟机、裸金属服务器中的任意一个中。SDN控制器110设置于裸金属服务器中,OVS 120设置于容器、虚拟机、服务器中的任意一个中。
下面将结合具体的实施例说明数据包从源IP地址传输到目的IP地址的过程。首先,用户可以在SDN控制器110上根据源IP地址、目的IP地址以及SDN的网络拓扑进行路由计算得到合适的转发路径,并根据转发路径生成流表项。然后,SDN控制器将流表项下发到相关的OVS 120。当数据包到达OVS 120时,OVS 120会检查它的头信息,并与流表项中的匹配项进行匹配,在数据包的头信息能够与匹配项匹配的情况下,OVS 120就会根据流表项的转发项将数据包进行转发。
上述的OVS 120通常是使用计算设备的计算资源(例如,处理器)、存储资源以及网络资源(例如,网卡)虚拟得到的,并且,为了提高OVS 120的转发性能,往往还需要设置卸载硬件进行加速。因此,可以将处理器、卸载硬件以及网卡组成流表卸载系统。参见图2,图2是本申请提供的一种流表卸载系统的结构示意图。如图2所示,本申请的流表卸载系统应用包括处理器11、卸载硬件12以及网卡13。
处理器11是运算核心和控制核心,能够对复杂的情况进行处理。处理器11可以是一块超大规模的集成电路。在处理器11中安装有操作系统和其他软件程序,从而处理器11能够实现对内存及各种PCIE设备的访问。处理器11可以通过片内总线快速访问内存。处理器11中可以包括一个或多个处理器核(core)。在一种实现中,处理器11可以是一个多核芯片,即包含多个处理核心的芯片。在另一种实现中,处理器11中可以包括一个或多个处理器核(core)。可以为具有一个处理核心的芯片。处理器11中可以运行OVS以及数据平面开发工具包(Data Plane Development Kit,DPDK )。OVS的介绍可以参见图1中的相关描述。OVS读取内存的效率也不高,DPDK的轻量级库函数采用了非常有效的内存处理机制,即利用环形缓冲区在物理网卡与使用了DPDK的虚拟交换机之间来回传送数据包,从而提高了系统整体性能。OVS对高速数据包的处理缺乏优化,因而,导致数据包处理的过程中的很多步骤都要用到处理器,由于处理器需要处理多任务,因而其可用性(特别是超载的情况下)会出现性能瓶颈的问题,为了减少数据包读取所需的处理器中断数,DPDK采用周期性轮询机制,定期轮询新数据包。如果数据包速率降至非常低数值,那么就可以切换到中断模式而不是定期轮询模式。通过有效的缓存管理、优化的最少CPU中断数以及其他增强型功能,DPDK能够让虚拟交换机实现接近原生性能。
卸载硬件12通常用来存放流表等。卸载硬件12可以采用三态内容寻址存储器(ternary content addressable memory,TCAM)、动态随机存取存储器(Dynamic RandomAccess Memory, DRAM)、专用集成电路(Application-Specific Integrated Circuit,ASIC)、现场可编辑门阵列(Field-Programmable Gate Array,FPGA)以及数据处理单元(Data Processing Unit,DPU)等等。卸载硬件12还可以是其他随机存取存储器,例如静态随机存取存储器(Static Random Access Memory,SRAM)等。本实施例不对卸载硬件12的数量和类型进行限定。此外,可对卸载硬件12进行配置使其具有保电功能。保电功能是指系统发生掉电又重新上电时,存储器中存储的数据也不会丢失。
卸载硬件12中可以设置两个甚至更多的哈希表。例如,卸载硬件12中可以存储第一哈希表以及第二哈希表。第一哈希算法对应第一哈希表,第二哈希算法对应第二哈希表。具体地,第一哈希表包括多个桶,并且,第一哈希表的桶的数量大于或者等于第一哈希算法的哈希值的数量,因此,每个第一哈希算法的哈希值对应一个桶。第二哈希表包括多个桶,并且,第二哈希表的桶的数量大于或者等于第二哈希算法的哈希值的数量,因此,每个第二哈希算法的哈希值对应一个桶。在一具体的实施例中,哈希表中桶的数量和对应的哈希算法的哈希值的数量的比值为1.5:1,这样能够最大限度的减少冲突。
每个桶可以包括多个哈希结构体,桶的深度即为桶包括的哈希结构体的数量。在一具体的实数例中,如图3所示,每个哈希结构体包括32比特,其中,1比特的使能标记位,16比特的另一个哈希值,15比特的匹配项的索引。上述实施例中,哈希结构体仅仅作为具体的示例,在实际应用中,哈希结构体还可以包括更多或者更少的字段,并且,每个字段的长度也可以根据需要进行设置。桶的设计主要是为了解决哈希冲突问题,如果两个不同的数据流计算得到的哈希值是相同的,那么,它们对应的流表项可以通过链表的方式存储到同一个桶中。桶的深度表示同一个哈希值可以存储的流表项的数量,如果超过计算得到哈希值相同的数据流的数量大于桶的深度,就没有空间存储多出来的数据流对应的流表项,就会导致流表项卸载到失败。
网卡用于进行接收数据包或者发送数据包。由于其拥有媒体访问控制地址(MediaAccess Control Address,MAC)地址,因此属于开放式系统互连(Open SystemInterconnection,OSI)模型的第1层和2层之间。它使得用户可以通过电缆或无线相互连接。每一个网卡都有一个被称为MAC地址的独一无二的48位串行号,它被写在卡上的一块ROM中。这里,网卡可以是可编程阵列逻辑(Field Programmable Gate Array,FPGA)网卡或者专用集成电路(Application Specific Integrated Circuit,ASIC)网卡等等。网卡可以与虚拟交换机进行数据交互,即,网卡可以接收来自虚拟交换机的数据包,也可以向虚拟交换机发送数据包。
下面将以两条数据流为例,详细介绍如何生成流表项、查找流表项以及按照流表项转发数据流的数据包。
(1)对于第一数据流。如图4所示,网卡接收第一数据流的第一个数据包的时候,会从第一个数据包中提取第一个数据包的头信息。其中,头信息可以根据需要选择。在一具体的实施例中,如果第一个数据包是二层的数据,头信息可以选择为源MAC地址以及目标MAC地址;如果第一个数据包是三层的数据,头信息可以设置为源IP地址、源MAC地址、目标IP以及目标MAC地址;如果是四层的数据,头信息可以设置为源端口号、源IP地址、源MAC地址、目标IP、目标MAC地址以及目标端口号。可以理解,上述头信息的选择仅仅是一种具体的示例,在实际应用中,还可以根据不同的需求进行设置,例如,头信息可以设置为目标MAC地址,或者,源IP地址等等,此处不作具体限定。
网卡第一数据流的第一个数据包的头信息采用第一哈希算法得到第一哈希值,采用第二哈希算法得到第二哈希值。其中,第一国际电报电话咨询委员会(InternationalTelegraph and Telephone Consultative Committee,CCITT)制定的循环冗余校验(Cyclic Redundancy Check,CRC)算法(即,CRC16_CCITT)、第二国际电报电话咨询委员会制定的循环冗余校验算法(即,CRC16_CCITT_FALSE)、调制解调协议(XMODEM)中使用的循环冗余校验算法(即,CRC16_XMODEM)、国际商业机器公司制定的循环冗余校验算法(即,CRC16_IBM)中的其中一个,第二哈希算法为第一国际电报电话咨询委员会制定循环冗余校验算法、第二国际电报电话咨询委员会制定循环冗余校验算法、调制解调协议中使用的循环冗余校验算法、国际商业机器公司制定的循环冗余校验算法中的另一个。
网卡根据第一哈希值获取第一桶中存储的各个哈希值,将第二哈希值分别和第一桶中存储的各个哈希值分别进行比较,得到的比较结果为都不相同。然后,根据第二哈希值获取第二桶中存储的各个哈希值,将第一哈希值分别和第二桶中存储的各个哈希值分别进行比较,得到的比较结果为都不相同。
于是,网卡将第一个数据包上传给虚拟交换机。虚拟交换机生成第一流表项,并将第一流表项发送给DPDK。其中,第一流表项包括第一匹配项以及第一转发项,第一匹配项是根据第一数据流的数据包的头信息生成的,例如,第一匹配项可以等于第一数据流的数据包的头信息,或者,第一匹配项可以是对第一数据流的数据包的头信息进行提取或者加上掩码得到的。第一转发项用于指示对第一数据流的操作,例如,从哪个端口转发出去、进行流量统计等等。DPDK获取第一哈希表的第一哈希值对应的第一桶中流表项的数量以及第二哈希表的第二哈希值对应的第二桶中流表项的数量,将第一桶中流表项的数量和第二桶中流表项的数量进行比较,得到比较结果,然后,根据比较结果确定将第二哈希值以及第一流表项卸载到第一哈希表的第一哈希值对应的第一桶中,还是,将第一哈希值以及第一流表项卸载到第二哈希表的第二哈希值对应的第二桶中。例如,可以在第一桶中流表项的数量减去第二桶中流表项的数量大于或者等于数量阈值的情况下,将第一哈希值以及第一流表项卸载到第二哈希表的第二哈希值对应的第二桶中。在第一桶中流表项的数量减去第二桶中流表项的数量小于数量阈值的情况下,将第二哈希值以及第一流表项卸载到第一哈希表的第一哈希值对应的第一桶中。其中,数量阈值可以根据需要或者经验进行设置,数量阈值可以设置为1,2,3或者更多,当数量阈值的数值越小的时候,第一哈希表的第一桶和第二哈希表的第二桶的深度差距越小,当数量阈值的数值越大的时候,第一哈希表的第一桶和第二哈希表的第二桶的深度差距越大。数量阈值可以根据需要进行随时进行调整。例如,第一哈希表和第二哈希表中的桶分别有4个哈希结构体记为第一哈希结构体,第二哈希结构体,第三哈希结构体,第四哈希结构体。流表项优先放在第一哈希表的第一哈希结构体,第二哈希结构体,再放在第二哈希表的第一哈希结构体,第二哈希结构体,接着放在第一哈希表的第三哈希结构体,放在第二哈希表的第三哈希结构体,再放在第一哈希表的第四哈希结构体,最后放在第二哈希表的第四哈希结构体。又例如,第一哈希表和第二哈希表中的桶分别有4个哈希结构体记为第一哈希结构体,第二哈希结构体,第三哈希结构体,第四哈希结构体。流表项优先放在第一哈希表的第一哈希结构体,再放在第二哈希表的第一哈希结构体,接着放在第一哈希表的第二哈希结构体、第三哈希结构体,放在第二哈希表的第二哈希结构体、第三哈希结构体,再放在第一哈希表的第四哈希结构体,最后放在第二哈希表的第四哈希结构体。当选择完第一桶或者第二桶之后,可以将第一流表项存储到该桶的还未被使用的哈希值结构体中,并将该哈希结构体中的使能标记位进行置位。这里,置位可以是设置为1,也可以设置为0。在第一桶以及第二桶中任意一个桶未满的时候,依然有空间存储第一流表项,于是,确定第一流表项卸载成功;在第一桶以及第二桶均满的时候,没有空间存储第一流表项,于是,确定第一流表项卸载失败。可以理解,上述的两个例子仅仅作为流表项在两个哈希表中均衡放置的举例,在实际应用中,还可以先在第一哈希表的第一桶中放置一个流表项,在第二哈希表的第二桶中放置一个流表项,然后,在第一哈希表的第一桶中又放置一个流表项,在第二哈希表的第二桶中放置又一个流表项,依此类推,又或者,先在第一哈希表的第一桶中放置两个流表项,在第二哈希表的第二桶中放置两个流表项,然后,在第一哈希表的第一桶中又放置两个流表项,在第二哈希表的第二桶中又放置两个流表项,依此类推等等。
如图5所示,网卡接收第一数据流的第二个数据包的时候,会从第二个数据包中提取第二个数据包的头信息。网卡对第二个数据包的头信息采用第一哈希算法得到第一哈希值,采用第二哈希算法得到第二哈希值。网卡根据第一哈希值获取第一桶中存储的各个哈希值,将第二哈希值分别和第一桶中存储的各个哈希值分别进行比较,在第一桶中存储的各个哈希值中存在和第二哈希值相等的哈希值的情况下,将第一桶中相等的哈希值对应的第一流表项读取出来,并根据第一流表项的转发项进行转发。在第一桶中存储的各个哈希值中不存在和第二哈希值相等的哈希值的情况下,根据第二哈希值获取第二桶中存储的各个哈希值,将第一哈希值分别和第二桶中存储的各个哈希值分别进行比较,在第二桶中存储的各个哈希值中存在和第一哈希值相等的哈希值的情况下,将第二桶中相等的哈希值对应的第一流表项读取出来,并根据第一流表项的转发项进行转发。
此后,第一数据流中的第三个数据包、第四个数据包……都依照第二个数据包的方式进行报文的转发。
(2)对于第二数据流。网卡接收第二数据流的第一个数据包的时候,会从第一个数据包中提取第一个数据包的头信息。
网卡第二数据流的第一个数据包的头信息采用第一哈希算法得到第一哈希值,采用第二哈希算法得到第三哈希值。网卡根据第一哈希值获取第一桶中存储的各个哈希值,将第三哈希值分别和第一桶中存储的各个哈希值分别进行比较,得到的比较结果为都不相同。然后,根据第一哈希值获取第二桶中存储的各个哈希值,将第一哈希值分别和第二桶中存储的各个哈希值分别进行比较,得到的比较结果为都不相同。
于是,网卡将第一个数据包上传给虚拟交换机。虚拟交换机生成第二流表项,并将第二流表项发送给DPDK。其中,第二流表项包括第二匹配项以及第二转发项,第二匹配项是根据第二数据流的数据包的头信息生成的,例如,第二匹配项可以等于第二数据流的数据包的头信息,或者,第二匹配项可以是对第二数据流的数据包的头信息进行提取或者加上掩码得到的。第二转发项用于指示对第二数据流的操作,例如,从哪个端口转发出去、进行流量统计等等。DPDK获取第一哈希表的第一哈希值对应的第一桶中流表项的数量以及第二哈希表的第三哈希值对应的第三桶中流表项的数量,将第三桶中流表项的数量和第三桶中流表项的数量进行比较,得到比较结果,然后,根据比较结果确定将第三哈希值以及第二流表项卸载到第一哈希表的第一哈希值对应的第一桶中,还是,将第一哈希值以及第二流表项卸载到第二哈希表的第三哈希值对应的第三桶中。例如,可以在第一桶中流表项的数量减去第三桶中流表项的数量大于或者等于数量阈值的情况下,将第一哈希值以及第二流表项卸载到第二哈希表的第三哈希值对应的第三桶中。在第三桶中流表项的数量减去第一桶中流表项的数量小于数量阈值的情况下,将第三哈希值以及第二流表项卸载到第一哈希表的第一哈希值对应的第一桶中。当选择完第一桶或者第三桶之后,可以将第二流表项存储到被选择的桶的还未被使用的哈希值结构体中,并将该哈希结构体中的使能标记位进行置位。这里,置位可以是设置为1,也可以设置为0。在第一桶以及第三桶中任意一个桶未满的时候,依然有空间存储第二流表项,于是,确定第二流表项卸载成功;在第一桶以及第三桶均满的时候,没有空间存储第一流表项,于是,确定第二流表项卸载失败。
网卡接收第二数据流的第二个数据包的时候,会从第二个数据包中提取第二个数据包的头信息。网卡对第二个数据包的头信息采用第一哈希算法得到第一哈希值,采用第二哈希算法得到第三哈希值。网卡根据第一哈希值获取第一桶中存储的各个哈希值,将第三哈希值分别和第一桶中存储的各个哈希值分别进行比较,在第一桶中存储的各个哈希值中存在和第三哈希值相等的哈希值的情况下,将第一桶中相等的哈希值对应的第二流表项读取出来,并根据第二流表项的转发项进行转发。在第一桶中存储的各个哈希值中不存在和第三哈希值相等的哈希值的情况下,根据第三哈希值获取第三桶中存储的各个哈希值,将第一哈希值分别和第三桶中存储的各个哈希值分别进行比较,在第三桶中存储的各个哈希值中存在和第一哈希值相等的哈希值的情况下,将第三桶中相等的哈希值对应的第二流表项读取出来,并根据第二流表项的转发项进行转发。
此后,第二数据流中的第三个数据包、第四个数据包……都依照第二个数据包的方式进行报文的转发。
上述实施例中,以DPDK执行比较动作为例进行说明的,在实际应用中,也可以是OVS执行比较动作,此处不作具体限定。
由于不同的哈希算法出现哈希冲突的哈希值往往是不同的。例如,上述例子中的第一数据流和第二数据流采用第一哈希算法的时候,得到的哈希值是相同的,也就是说,采用第一哈希算法的时候发生了哈希冲突。但是,采用第二哈希算法的时候,得到的哈希值是不相同的,也就是说,采用第二哈希算法的时候并没有发生哈希冲突。因此,将两种哈希算法进行结合,能够大大减少发生哈希冲突发生的概率。并且,在第一哈希算法发生哈希冲突的时候,可以均衡地存储在第一哈希表以及第二哈希表中。这样均衡放置流表项到两个哈希表中,冲突率最小,如果先把第一哈希表的桶的哈希结构体放满,再考虑放在第二哈希表,就相当于退化到只有一个哈希表,哈希冲突发生的概率又增加了。而且,在查找流表项的时候,是将两个哈希值进行比较,就能迅速定位到要找的流表项,比起采用一个哈希表,根据哈希值找到对应的桶,然后,再将数据包的头部信息和流表项中的匹配项进行字符的比较来说,查找的速度大大提升了。
下面将结合几个具体的示例,说明是如何将第一流表项至第五流表项存储到第一哈希表和第二哈希表中的,此时,第一哈希表和第二哈希表都是空的哈希表,并且,每个哈希表的桶都包括4个结构体。在放置流表项的时候,采用第一哈希表的桶先放置两个流表项,然后,第二哈希表的桶再放置两个流表项,依此类推的方式均衡放置流表项。
1)假设第一数据流采用第一哈希算法以及第二哈希算法计算得到的第一哈希值为2,第二哈希值为5。那么,将第二哈希值以及第一数据流的第一流表项存储到第一哈希表的第二个桶的第一个哈希结构体中,并将第一个哈希结构体的使能标记位置位。因此,第二个桶的第一个哈希结构体中存储了1,5,第一流表项。
2)假设第二数据流采用第一哈希算法以及第二哈希算法计算得到的第一哈希值为3,第二哈希值为6。那么,将第二哈希值以及第一数据流的第二流表项存储到第一哈希表的第三个桶的第一个哈希结构体中,并将第一个哈希结构体的使能标记位置位。因此,第三个桶的第一个哈希结构体中存储了1,6,第二流表项。
3)假设第三数据流采用第一哈希算法以及第二哈希算法计算得到的第一哈希值为2,第二哈希值为4。那么,将第二哈希值以及第三数据流的第三流表项存储到第一哈希表的第二个桶的第二个哈希结构体中,并将第二个哈希结构体的使能标记位置位。因此,第二个桶的第二个哈希结构体中存储了1,4,第三流表项。
4)假设第四数据流采用第一哈希算法以及第二哈希算法计算得到的第一哈希值为2,第二哈希值为6。那么,将第一哈希值以及第四数据流的第四流表项存储到第二哈希表的第六个桶的第一个哈希结构体中,并将第一个哈希结构体的使能标记位置位。因此,第六个桶的第一个哈希结构体中存储了1,2,第四流表项。
5)假设第五数据流采用第一哈希算法以及第二哈希算法计算得到的第一哈希值为2,第二哈希值为1。那么,将第一哈希值以及第五数据流的第五流表项存储到第二哈希表的第一个桶的第一个哈希结构体中,并将第一个哈希结构体的使能标记位置位。因此,第一个桶的第一个哈希结构体中存储了1,2,第五流表项。
可以理解,上述例子是以在放置流表项的时候,采用第一哈希表的桶先放置两个流表项,然后,第二哈希表的桶再放置两个流表项,依此类推的方式均衡放置流表项进行说明的,在实际应用中,还可以在放置流表项的时候,采用第一哈希表的桶先放置一个流表项,然后,第二哈希表的桶再放置一个流表项,依此类推的方式均衡放置流表项等等,此处不作具体限定。
上述例子中,是以哈希结构体汇总存储流表项为例进行说明的,在实际应用中,可以存储匹配项的索引,此处不作具体限定。
上述例子中,是以采用两个哈希算法计算哈希值,卸载硬件中有两个哈希表为例进行说明的,在实际应用中,还可以采用更多哈希算法计算哈希值,卸载硬件中还可有更多哈希表以进一步减少哈希冲突的概率,此处不作具体限定。
上述例子中,均以流表项卸载到卸载硬件的应用场景为例进行说明的,在实际应用中,也可以应用到其他的利用哈希值快速进行查找的应用场景。
从上面的例子可以看出,尽管第一哈希算法产生了多次哈希冲突,但是,在第二哈希算法之下都没有发生哈希冲突,流表项就能够均衡地分别在两个哈希表中,因此,流表项卸载的成功率就大大提升了。
虚拟交换机或者DPDK还可以对流表项卸载的成功率进行统计,然后,判断流表项卸载的成功率是否小于卸载阈值。其中,卸载阈值可以根据经验进行设置,例如,可以设置为80%,90%,95%等等。在流表项的卸载成功率小于卸载阈值的情况下,说明当前第一哈希算法和第二哈希算的算法组合并不适合,可以更换第一哈希算法和第二哈希算的算法组合,直到流表项的卸载成功率大于卸载阈值。这里,不同的算法组合中,至少有一个算法是不相同的。以第一哈希算法和第二哈希算法为CRC16_CCITT、CRC16_CCITT_FALSE、CRC16_XMODEM、CRC16_IBM中的任意两种时,算法组合可以有6种,例如,CRC16_CCITT/CRC16_CCITT_FALSE,CRC16_CCITT/CRC16_XMODEM,CRC16_CCITT/CRC16_IBM,CRC16_CCITT_FALSE/CRC16_XMODEM,CRC16_CCITT_FALSE/CRC16_IBM,CRC16_XMODEM/CRC16_IBM。
当需要对流表项进行删除的时候,可以将存储该项流表项的哈希结构体的使能标记位进行复位即可,不需要将整个流表项进行删除。这样,在哈希表够用的情况下,如果需要再次卸载相同的流表项,可以找到之前的流表项对应的哈希结构体,然后,再将哈希结构体的使能标记位再次进行置位即可,不需要将流表项重新下载,在哈希表不够用的情况下,可以用新的流表项覆盖旧的流表项即可,因此,大大提高了卸载硬件的效率。
参见图6,图6是本申请提供的一种流表卸载方法的流程示意图。如图6所示,本申请的流表卸载方法,包括:
S101:对第一数据流的第一数据包的头信息采用第一哈希算法得到第一哈希值,采用第二哈希算法得到第二哈希值。
在一些可能的实施例中,第一哈希算法对应第一哈希表,第二哈希算法对应第二哈希表。第一国际电报电话咨询委员会(International Telegraph and TelephoneConsultative Committee,CCITT)制定的循环冗余校验(Cyclic Redundancy Check,CRC)算法(即,CRC16_CCITT)、第二国际电报电话咨询委员会制定的循环冗余校验算法(即,CRC16_CCITT_FALSE)、调制解调协议(XMODEM)中使用的循环冗余校验算法(即,CRC16_XMODEM)、国际商业机器公司制定的循环冗余校验算法(即,CRC16_IBM)中的其中一个,第二哈希算法为第一国际电报电话咨询委员会制定循环冗余校验算法、第二国际电报电话咨询委员会制定循环冗余校验算法、调制解调协议中使用的循环冗余校验算法、国际商业机器公司制定的循环冗余校验算法中的另一个。具体地,第一哈希表包括多个桶,并且,第一哈希表的桶的数量大于或者等于第一哈希算法的哈希值的数量,因此,每个第一哈希算法的哈希值对应一个桶。第二哈希表包括多个桶,并且,第二哈希表的桶的数量大于或者等于第二哈希算法的哈希值的数量,因此,每个第二哈希算法的哈希值对应一个桶。在一具体的实施例中,哈希表中桶的数量和对应的哈希算法的哈希值的数量的比值为1.5:1,这样能够最大限度的减少冲突。
每个桶可以包括多个哈希结构体,桶的深度即为桶包括的哈希结构体的数量。在一具体的实数例中,如图3所示,每个哈希结构体包括32比特,其中,1比特的使能标记位,16比特的另一个哈希值,15比特的匹配项的索引。上述实施例中,哈希结构体仅仅作为具体的示例,在实际应用中,哈希结构体还可以包括更多或者更少的字段,并且,每个字段的长度也可以根据需要进行设置。桶的设计主要是为了解决哈希冲突问题,如果两个不同的数据流计算得到的哈希值是相同的,那么,它们对应的流表项可以通过链表的方式存储到同一个桶中。桶的深度表示同一个哈希值可以存储的流表项的数量,如果超过计算得到哈希值相同的数据流的数量大于桶的深度,就没有空间存储多出来的数据流对应的流表项,就会导致流表项卸载到失败。
S102:获取第一哈希表的第一哈希值对应的第一桶中流表项的数量以及第二哈希表的第二哈希值对应的第二桶中流表项的数量。
S103:将第一桶中流表项的数量和第二桶中流表项的数量进行比较,得到比较结果。
S104:根据结果确定将第二哈希值以及第一流表项存储到第一哈希表的第一哈希值对应的第一桶中,还是,将第一哈希值以及第一流表项存储到第二哈希表的第二哈希值对应的第二桶中。
在一些可能的实施例中,可以在第一桶中流表项的数量减去第二桶中流表项的数量大于或者等于数量阈值的情况下,将第一哈希值以及第一流表项卸载到第二哈希表的第二哈希值对应的第二桶中。在第一桶中流表项的数量减去第二桶中流表项的数量小于数量阈值的情况下,将第二哈希值以及第一流表项卸载到第一哈希表的第一哈希值对应的第一桶中。其中,数量阈值可以根据需要或者经验进行设置,数量阈值可以设置为1,2,3或者更多,当数量阈值的数值越小的时候,第一哈希表的第一桶和第二哈希表的第二桶的深度差距越小,当数量阈值的数值越大的时候,第一哈希表的第一桶和第二哈希表的第二桶的深度差距越大。数量阈值可以根据需要进行随时进行调整。例如,第一哈希表和第二哈希表中的桶分别有4个哈希结构体记为第一哈希结构体,第二哈希结构体,第三哈希结构体,第四哈希结构体。流表项优先放在第一哈希表的第一哈希结构体,第二哈希结构体,再放在第二哈希表的第一哈希结构体,第二哈希结构体,接着放在第一哈希表的第三哈希结构体,放在第二哈希表的第三哈希结构体,再放在第一哈希表的第四哈希结构体,最后放在第二哈希表的第四哈希结构体。又例如,第一哈希表和第二哈希表中的桶分别有4个哈希结构体记为第一哈希结构体,第二哈希结构体,第三哈希结构体,第四哈希结构体。流表项优先放在第一哈希表的第一哈希结构体,再放在第二哈希表的第一哈希结构体,接着放在第一哈希表的第二哈希结构体、第三哈希结构体,放在第二哈希表的第二哈希结构体、第三哈希结构体,再放在第一哈希表的第四哈希结构体,最后放在第二哈希表的第四哈希结构体。当选择完第一桶或者第二桶之后,可以将第一流表项存储到该桶的还未被使用的哈希值结构体中,并将该哈希结构体中的使能标记位进行置位。这里,置位可以是设置为1,也可以设置为0。在第一桶以及第二桶中任意一个桶未满的时候,依然有空间存储第一流表项,于是,确定第一流表项卸载成功;在第一桶以及第二桶均满的时候,没有空间存储第一流表项,于是,确定第一流表项卸载失败。
在一些可能的实施例中,第一流表项包括第一匹配项以及第一转发项。第一匹配项是根据第一数据流的数据包的头信息生成的,第一转发项用于指示对第一数据流的操作。
参见图7,图7是本申请提供的一种计算设备的结构示意图。如图7所示,该计算设备400包括:一个或者多个处理单元410、通信接口420以及存储器430。
所述处理单元410、通信接口420以及存储器430通过总线440相互连接。可选地,该计算设备400还可以包括输入/输出接口450,输入/输出接口450连接有输入/输出设备,用于接收用户设置的参数等。该计算设备400能够用于实现上述的本申请实施例中设备实施例或者系统实施例的部分或者全部功能;处理单元410还能够用于实现上述的本申请实施例中方法实施例的部分或者全部操作步骤。例如,该计算设备400执行各种操作的具体实现可参照上述实施例中的具体细节,如处理单元410用于执行上述方法实施例中部分或者全部步骤或者上述方法实施例中的部分或者全部操作。再例如,本申请实施例中,计算设备400可用于实现上述装置实施例中一个或者多个部件的部分或者全部功能,此外通信接口420具体可用于为了实现这些装置、部件的功能所必须的通讯功能等,以及处理单元410具体可用于为了实现这些装置、部件的功能所必须的处理功能等。
应当理解的是,图7的计算设备400可以包括一个或者多个处理单元410,并且多个处理单元410可以按照并行化连接方式、串行化连接方式、串并行连接方式或者任意连接方式来协同提供处理能力,或者多个处理单元410可以构成处理器序列或者处理器阵列,或者多个处理单元410之间可以分成主处理器和辅助处理器,或者多个处理单元410之间可以具有不同的架构如采用异构计算架构。另外,图7所示的计算设备400,相关的结构性描述及功能性描述是示例性且非限制性的。在一些示例性实施例中,计算设备400可以包括比图7所示的更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者具有不同的部件布置。
处理单元410可以有多种具体实现形式,例如处理单元410可以包括中央处理器(central processingunit,CPU)、图形处理器(graphic processing unit,GPU)、神经网络处理器(neural-networkprocessing unit,NPU)、张量处理器(tensor processing unit,TPU)或数据处理器(data processing unit,DPU)等一种或多种的组合,本申请实施例不做具体限定。处理单元410还可以是单核处理器或多核处理器。处理单元410可以由CPU和硬件芯片的组合。上述硬件芯片可以是专用集成电路(application-specificintegratedcircuit,ASIC),可编程逻辑器件(programmable logicdevice,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complexprogrammable logic device,CPLD),现场可编程逻辑门阵列(field-programmable gate array,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。处理单元410也可以单独采用内置处理逻辑的逻辑器件来实现,例如FPGA或数字信号处理器(digital signal processor,DSP)等。通信接口420可以为有线接口或无线接口,用于与其他模块或设备进行通信,有线接口可以是以太接口、局域互联网络(local interconnect network,LIN)等,无线接口可以是蜂窝网络接口或使用无线局域网接口等。
存储器430可以是非易失性存储器,例如,只读存储器(read-onlymemory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electricallyEPROM,EEPROM)或闪存。存储器430也可以是易失性存储器,易失性存储器可以是随机存取存储器(randomaccess memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(dynamic RAM,DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(doubledatarate SDRAM,DDRSDRAM)、增强型同步动态随机存取存储器(enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(direct rambus RAM,DR RAM)。存储器430也可用于存储程序代码和数据,以便于处理单元410调用存储器430中存储的程序代码执行上述方法实施例中的部分或者全部操作步骤,或者执行上述设备实施例中的相应功能。此外,计算设备400可能包含相比于图7展示的更多或者更少的组件,或者有不同的组件配置方式。
总线440可以是快捷外设部件互连标准(peripheral component interconnectexpress,PCIe)总线,或扩展工业标准结构(extended industry standard architecture,EISA)总线、统一总线(unified bus,Ubus或UB)、计算机快速链接(compute express link,CXL)、缓存一致互联协议(cache coherentinterconnect for accelerators,CCIX)等。总线440可以分为地址总线、数据总线、控制总线等。总线440除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
本申请实施例还提供一种系统,该系统包括多个计算设备,每个计算设备的结构可以参照上述的计算设备的结构。该系统可实现的功能或者操作可以参照上述方法实施例中的具体实现步骤和/或上述装置实施例中所描述的具体功能,在此不再赘述。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机指令,当所述计算机指令在计算机设备(如一个或者多个处理器)上运行时可以实现上述方法实施例中的方法步骤。所述计算机可读存储介质的处理器在执行上述方法步骤的具体实现可参照上述方法实施例中所描述的具体操作和/或上述装置实施例中所描述的具体功能,在此不再赘述。
本申请实施例还提供一种计算机程序产品,所述计算机程序产品包括存储在计算机可读存储介质上的指令,当所述指令在计算机设备上运行时使得所述计算机设备执行上述方法实施例中的方法步骤。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者任意组合来实现。当使用软件实现时,可以全部或者部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令,在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络或其他可编程装置。所述计算机指令可存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网络站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、微波等)方式向另一个网络站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质,也可以是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如软盘、硬盘、磁带等)、光介质(例如DVD等)、或者半导体介质(例如固态硬盘)等等。
在上述实施例中,对各个实施例的描述各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

Claims (11)

1.一种流表卸载方法,其特征在于,包括:
对第一数据流的第一数据包的头信息采用第一哈希算法得到第一哈希值,采用第二哈希算法得到第二哈希值,其中,所述第一哈希算法对应第一哈希表,所述第二哈希算法对应第二哈希表;
获取所述第一哈希表的所述第一哈希值对应的第一桶中流表项的数量以及所述第二哈希表的所述第二哈希值对应的第二桶中流表项的数量;
将所述第一桶中流表项的数量和所述第二桶中流表项的数量进行比较,得到比较结果;
根据所述比较结果确定将所述第二哈希值以及第一流表项卸载到所述第一哈希表的第一哈希值对应的第一桶中,还是,将所述第一哈希值以及所述第一流表项卸载到所述第二哈希表的所述第二哈希值对应的第二桶中,其中,所述第一流表项包括第一匹配项以及第一转发项,所述第一匹配项是根据所述第一数据流的数据包的头信息生成的,所述第一转发项用于指示对所述第一数据流的操作;
所述方法还包括:
对第一数据流的第二数据包的头信息采用所述第一哈希算法得到所述第一哈希值,采用所述第二哈希算法得到所述第二哈希值;
根据所述第一哈希值获取所述第一桶中存储的各个哈希值,将所述第二哈希值分别和所述第一桶中存储的各个哈希值分别进行比较;
在所述第一桶中存储的各个哈希值中存在和所述第二哈希值相等的哈希值的情况下,将所述第一桶中相等的哈希值对应的流表项读取出来;
在所述第一桶中存储的各个哈希值中不存在和所述第二哈希值相等的哈希值的情况下,根据所述第二哈希值获取所述第二桶中存储的各个哈希值,将所述第一哈希值分别和所述第二桶中存储的各个哈希值分别进行比较,在所述第二桶中存储的各个哈希值中存在和所述第一哈希值相等的哈希值的情况下,将所述第二桶中相等的哈希值对应的流表项读取出来;
根据所述比较结果确定将所述第二哈希值以及第一流表项卸载到所述第一哈希表的第一哈希值对应的第一桶中,还是,将所述第一哈希值以及第一流表项卸载到所述第二哈希表的第二哈希值对应的第二桶中,包括:
在所述第一桶中流表项的数量减去所述第二桶中流表项的数量大于或者等于数量阈值的情况下,将所述第一哈希值以及第一流表项卸载到所述第二哈希表的第二哈希值对应的第二桶中;
在所述第一桶中流表项的数量减去所述第二桶中流表项的数量小于数量阈值的情况下,将所述第二哈希值以及第一流表项卸载到所述第一哈希表的第一哈希值对应的第一桶中。
2.根据权利要求1所述的方法,其特征在于,所述第一哈希算法为第一国际电报电话咨询委员会制定循环冗余校验算法、第二国际电报电话咨询委员会制定循环冗余校验算法、调制解调协议中使用的循环冗余校验算法、国际商业机器公司制定的循环冗余校验算法中的其中一个,所述第二哈希算法为第一国际电报电话咨询委员会制定循环冗余校验算法、第二国际电报电话咨询委员会制定循环冗余校验算法、调制解调协议中使用的循环冗余校验算法、国际商业机器公司制定的循环冗余校验算法中的另一个。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
在所述第一桶以及所述第二桶中任意一个桶未满的时候,确定所述第一流表项卸载成功;
在所述第一桶以及所述第二桶均满的时候,确定所述第一流表项卸载失败。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
在流表项的卸载成功率小于卸载阈值的情况下,将所述第一哈希算法和所述第二哈希算的算法组合更换为其他算法组合。
5.根据权利要求1所述的方法,其特征在于,所述第一哈希算法中哈希值的数量和所述第一哈表中桶的数量为1:1.5。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在需要删除第一流表项的情况下,将所述第一流表项对应的第一标志位进行复位,所述第一流表项依然存储在所述第一哈希表或者所述第二哈希表中。
7.根据权利要求1所述的方法,其特征在于,所述方法应用于流表卸载系统,所述流表卸载系统包括计算设备以及卸载硬件,其中,所述计算设备中运行虚拟交换机以及数据平面开发工具包以实现数据包的转发,所述卸载硬件用于存储所述虚拟交换机以及数据平面开发工具卸载的用于转发数据包的流表项,所述卸载硬件包括所述第一哈希表以及所述第二哈希表。
8.一种流表卸载系统,其特征在于,所述流表卸载系统包括计算设备以及卸载硬件,其中,所述计算设备中运行虚拟交换机以及数据平面开发工具包以实现数据包的转发;
所述卸载硬件用于存储所述虚拟交换机以及数据平面开发工具卸载的用于转发数据包的流表项,所述卸载硬件包括第一哈希表以及第二哈希表;
所述虚拟交换机或者数据平面开发工具用于对第一数据流的第一数据包的头信息采用第一哈希算法得到第一哈希值,采用第二哈希算法得到第二哈希值,其中,第一哈希算法对应第一哈希表,第二哈希算法对应第二哈希表;
所述虚拟交换机或者数据平面开发工具用于获取第一哈希表的第一哈希值对应的第一桶中流表项的数量以及第二哈希表的第二哈希值对应的第二桶中流表项的数量;
所述虚拟交换机或者数据平面开发工具用于将所述第一桶中流表项的数量和所述第二桶中流表项的数量进行比较,得到比较结果;
所述虚拟交换机或者数据平面开发工具用于根据所述比较结果确定将所述第二哈希值以及第一流表项卸载到所述卸载硬件的所述第一哈希表的第一哈希值对应的第一桶中,还是,将所述第一哈希值以及第一流表项卸载到所述卸载硬件的所述第二哈希表的第二哈希值对应的第二桶中,其中,所述第一流表项包括第一匹配项以及第一转发项,所述第一匹配项是根据所述第一数据流的数据包的头信息生成的,所述第一转发项用于指示对所述第一数据流的操作;
所述虚拟交换机或者数据平面开发工具用于对第一数据流的第二数据包的头信息采用所述第一哈希算法得到所述第一哈希值,采用所述第二哈希算法得到所述第二哈希值;
所述虚拟交换机或者数据平面开发工具用于根据所述第一哈希值获取所述第一桶中存储的各个哈希值,将所述第二哈希值分别和所述第一桶中存储的各个哈希值分别进行比较;
所述虚拟交换机或者数据平面开发工具用于在所述第一桶中存储的各个哈希值中存在和所述第二哈希值相等的哈希值的情况下,将所述第一桶中相等的哈希值对应的流表项读取出来;
所述虚拟交换机或者数据平面开发工具用于在所述第一桶中存储的各个哈希值中不存在和所述第二哈希值相等的哈希值的情况下,根据所述第二哈希值获取所述第二桶中存储的各个哈希值,将所述第一哈希值分别和所述第二桶中存储的各个哈希值分别进行比较,在所述第二桶中存储的各个哈希值中存在和所述第一哈希值相等的哈希值的情况下,将所述第二桶中相等的哈希值对应的流表项读取出来;
所述虚拟交换机或者数据平面开发工具用于在所述第一桶中流表项的数量减去所述第二桶中流表项的数量大于或者等于数量阈值的情况下,将所述第一哈希值以及第一流表项卸载到所述第二哈希表的第二哈希值对应的第二桶中;
所述虚拟交换机或者数据平面开发工具用于在所述第一桶中流表项的数量减去所述第二桶中流表项的数量小于数量阈值的情况下,将所述第二哈希值以及第一流表项卸载到所述第一哈希表的第一哈希值对应的第一桶中。
9.一种计算设备,其特征在于,包括:处理器以及存储器,其中,所述存储器用于存储指令,所述处理器用于运行所述存储器中的指令,以执行如权利要求1-7任一项所述的方法。
10.一种计算集群,其特征在于,包括多个计算设备,其中,每个计算设备包括处理器以及存储器,所述存储器用于存储指令,所述处理器用于运行所述存储器中的指令,以执行如权利要求1-7任一项所述的方法。
11.一种计算机可读存储介质,其特征在于,包括指令,所述指令被计算设备执行时,执行如权利要求1-7任一项所述的方法。
CN202410024637.8A 2024-01-08 2024-01-08 流表卸载方法、系统、设备、集群以及介质 Active CN117527689B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410024637.8A CN117527689B (zh) 2024-01-08 2024-01-08 流表卸载方法、系统、设备、集群以及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410024637.8A CN117527689B (zh) 2024-01-08 2024-01-08 流表卸载方法、系统、设备、集群以及介质

Publications (2)

Publication Number Publication Date
CN117527689A CN117527689A (zh) 2024-02-06
CN117527689B true CN117527689B (zh) 2024-04-09

Family

ID=89763047

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410024637.8A Active CN117527689B (zh) 2024-01-08 2024-01-08 流表卸载方法、系统、设备、集群以及介质

Country Status (1)

Country Link
CN (1) CN117527689B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114448891A (zh) * 2022-01-26 2022-05-06 深圳星云智联科技有限公司 流表同步方法、装置、设备和介质
CN114816228A (zh) * 2021-01-29 2022-07-29 中移(苏州)软件技术有限公司 一种数据处理方法、装置、服务器及存储介质
CN117093881A (zh) * 2023-10-19 2023-11-21 深圳大普微电子股份有限公司 一种数据压缩方法、装置及电子设备和存储介质

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114816228A (zh) * 2021-01-29 2022-07-29 中移(苏州)软件技术有限公司 一种数据处理方法、装置、服务器及存储介质
CN114448891A (zh) * 2022-01-26 2022-05-06 深圳星云智联科技有限公司 流表同步方法、装置、设备和介质
CN117093881A (zh) * 2023-10-19 2023-11-21 深圳大普微电子股份有限公司 一种数据压缩方法、装置及电子设备和存储介质

Also Published As

Publication number Publication date
CN117527689A (zh) 2024-02-06

Similar Documents

Publication Publication Date Title
US5491690A (en) Method and apparatus to speed up the path selection in a packet switching network
JP3734704B2 (ja) パケット分類エンジン
US8560660B2 (en) Methods and apparatus for managing next hop identifiers in a distributed switch fabric system
CN112311674B (zh) 报文发送方法、装置及存储介质
CN112787913B (zh) 智能网卡组件、物理机、云服务系统以及报文发送方法
CN105282045B (zh) 一种基于一致性哈希算法的分布式计算和储存方法
CN105407045A (zh) 基于安全隔离的路由器虚拟化方法
US8886913B2 (en) Apparatus and method for identifier management
CN112019492B (zh) 访问控制方法、装置及存储介质
CN117527689B (zh) 流表卸载方法、系统、设备、集群以及介质
US9590897B1 (en) Methods and systems for network devices and associated network transmissions
CN111343025A (zh) 功能虚拟化网络中可扩展的服务器部署方法
KR102420610B1 (ko) 다층 캐싱 전략을 이용하는 패킷 데이터 처리 방법 및 이를 사용하는 전자 장치
CN116192721A (zh) 路径感知方法、装置及系统
US9246820B1 (en) Methods and apparatus for implementing multiple loopback links
CN117439953B (zh) 等价成本多路径选择系统、方法、设备、集群以及介质
CN112783673A (zh) 一种调用链的确定方法、装置、计算机设备及存储介质
CN114531389A (zh) 一种路由表优化方法、控制器以及路由器
CN107113244B (zh) 一种数据转发的方法、装置和系统
CN112751768A (zh) 业务报文转发方法、装置及计算机存储介质
CN117527731B (zh) 一种用于硬件卸载的包编辑方法、计算机设备及介质
CN116055426B (zh) 用于多绑定模式下流量卸载转发的方法、设备及介质
CN113824781B (zh) 一种数据中心网络源路由方法与装置
CN115086251B (zh) 一种堆叠数据处理方法、装置、电子设备及存储介质
RU2819422C1 (ru) Способ и устройство для определения линии связи для переадресации потока услуг

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant