CN108874987B - 表项管理方法、装置及交换芯片 - Google Patents
表项管理方法、装置及交换芯片 Download PDFInfo
- Publication number
- CN108874987B CN108874987B CN201810599471.7A CN201810599471A CN108874987B CN 108874987 B CN108874987 B CN 108874987B CN 201810599471 A CN201810599471 A CN 201810599471A CN 108874987 B CN108874987 B CN 108874987B
- Authority
- CN
- China
- Prior art keywords
- entry
- table entry
- managed
- hash
- index value
- 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
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种表项管理方法、装置及交换芯片,涉及交换机技术领域,该方法应用于交换芯片,包括:确定待管理表项,根据待管理表项的类型和待管理表项的存储数据容量为待管理表项动态分配内存;将已分配内存的待管理表项的索引值存储于交换芯片的SDK;通过交换芯片的SDK,基于存储的索引值对待管理表项进行管理操作;管理操作包括表项增加操作、表项删除操作、表项修改操作和表项读取操作中的一种或多种。本发明能够提升表项的管理效率,从而增强交换芯片的工作性能。
Description
技术领域
本发明涉及交换机技术领域,尤其是涉及一种表项管理方法、装置及交换芯片。
背景技术
交换芯片主要用于交换机中,依据相关网络转换协议负责数据接收、转发决策、报文存储、报文编辑、报文转发等操作,这其中起关键性作用的是交换芯片中的SDK(SoftwareDevelopment Kit,软件开发工具包)。 SDK主要用于配置、管理和维护交换芯片的寄存器和表项,使交换芯片能正常工作起来,并提供给协议层简洁易懂的应用程序编程接口的交互。通过接口的交互,交换芯片按照上层协议的需求进行报文的转发时,芯片中 SDK会收到上层协议对芯片中的表项进行读取、增加、修改或删除的命令,并执行相应的表现管理操作。显而易见,交换芯片管理表项的方式会直接影响到交换芯片的工作性能。然而,现有的交换芯片的表项管理方式效率低下,致使交换芯片的工作性能不高。
发明内容
有鉴于此,本发明的目的在于提供一种表项管理方法、装置及交换芯片,能够提升对交换芯片中表项的管理效率,从而增强交换芯片的工作性能。
第一方面,本发明实施例提供了一种表项管理方法,该方法应用于交换芯片,包括:确定待管理表项,根据待管理表项的类型和待管理表项的存储数据容量为待管理表项动态分配内存;其中,待管理表项的类型包括第一表项和第二表项;第一表项为按照键值和索引值共同设置的顺序表表项;第二表项为按照索引设置的顺序表表项;将已分配内存的待管理表项的索引值存储于交换芯片的SDK;通过交换芯片的SDK,基于存储的索引值对待管理表项进行管理操作;管理操作包括表项增加操作、表项删除操作、表项修改操作和表项读取操作中的一种或多种。
结合第一方面,本发明实施例提供了第一方面的第一种可能的实施方式,其中,将已分配内存的待管理表项的索引值存储于交换芯片的SDK的步骤,包括:如果已分配内存的待管理表项为第一表项,将第一表项的索引值存储于交换芯片的SDK上的哈希表中;如果已分配内存的待管理表项为第二表项,将第二表项的索引值存储于交换芯片的SDK上的位图中。
结合第一方面的第一种可能的实施方式,本发明实施例提供了第一方面的第二种可能的实施方式,其中,将第一表项的索引值存储于交换芯片的SDK上的哈希表中的步骤,包括:获取第一表项的键值;其中,键值包括表项类型信息、报文输出端口信息、目的物理地址信息和出接口信息中的一种或多种;根据获取的键值,采用哈希函数计算得到第一表项对应的哈希值;将哈希值加入交换芯片的SDK上预先设置的哈希桶数组内,以成为哈希桶数组中第一表项对应的一个哈希桶;其中,哈希桶数组包含多个的哈希桶,每个哈希桶可对应多个第一表项,且每个哈希桶指向一个单向链表;将第一表项的索引值存储于第一表项对应的哈希桶指向的单向链表的节点内。
结合第一方面的第二种可能的实施方式,本发明实施例提供了第一方面的第三种可能的实施方式,其中,待管理表项包括待增加第一表项,基于存储的索引值对待管理表项进行管理操作的步骤,包括:获取待增加第一表项的键值;基于待增加第一表项的键值确定待增加第一表项对应的哈希值;根据存储的索引值,确定已分配内存的第一表项对应的哈希桶;判断已分配内存的第一表项对应的哈希桶中是否存在与待增加第一表项的哈希值对应的目标哈希桶;如果否,对待增加第一表项进行表项增加操作。
结合第一方面的第二种可能的实施方式,本发明实施例提供了第一方面的第四种可能的实施方式,其中,待管理表项包括待调整第一表项;基于存储的索引值对待管理表项进行管理操作的步骤,包括:获取待调整第一表项的键值;基于待调整第一表项的键值确定待调整第一表项对应的哈希值;根据存储的索引值,确定已分配内存的第一表项对应的哈希桶;判断已分配内存的第一表项对应的哈希桶中是否存在与待调整第一表项的哈希值对应的目标哈希桶;如果是,获取目标哈希桶指向的单向链表中的各索引值;读取与各索引值对应的表项键值;逐一比对待调整第一表项的键值与各表项键值,判断是否有与待调整第一表项的键值匹配的表项键值;如果是,当待调整第一表项包括待删除第一表项时,对待删除第一表项进行表项删除操作;当待调整第一表项包括待修改第一表项时,对待修改第一表项进行表项修改操作。
结合第一方面的第四种可能的实施方式,本发明实施例提供了第一方面的第五种可能的实施方式,其中,对待删除第一表项进行表项删除操作的步骤,包括:判断待删除第一表项对应的引用数值是否为预设数值;如果是,对待删除第一表项进行表项删除操作。
第二方面,本发明实施例提供了一种表项管理装置,该装置应用于交换芯片,包括:内存分配模块,用于确定待管理表项,根据待管理表项的类型和待管理表项的存储数据容量为待管理表项动态分配内存;其中,待管理表项的类型包括第一表项和第二表项;第一表项为按照键值和索引值共同设置的顺序表表项;第二表项为按照索引设置的顺序表表项;索引值存储模块,用于将已分配内存的待管理表项的索引值存储于交换芯片的 SDK;管理模块,用于通过交换芯片的SDK,基于存储的索引值对待管理表项进行管理操作;管理操作包括表项增加操作、表项删除操作、表项修改操作和表项读取操作中的一种或多种。
结合第二方面,本发明实施例提供了第二方面的第一种可能的实施方式,其中,索引值存储模块包括:第一存储单元,用于如果已分配内存的待管理表项为第一表项,将第一表项的索引值存储于交换芯片的SDK上的哈希表中;第二存储单元,用于如果已分配内存的待管理表项为第二表项,将第二表项的索引值存储于交换芯片的SDK上的位图中。
结合第二方面的第一种可能的实施方式,本发明实施例提供了第二方面的第二种可能的实施方式,其中,第一存储单元用于:获取第一表项的键值;键值包括表项类型信息、报文输出端口信息、目的物理地址信息和出接口信息中的一种或多种;根据获取的键值,采用哈希函数计算得到第一表项对应的哈希值;将哈希值加入交换芯片的SDK上预先设置的哈希桶数组内,以成为哈希桶数组中第一表项对应的一个哈希桶;其中,哈希桶数组包含多个哈希桶,每个哈希桶可对应多个第一表项,且每个哈希桶指向一个单向链表;将第一表项的索引值存储于第一表项对应的哈希桶指向的单向链表的节点内。
第三方面,本发明实施例提供了一种交换芯片,该交换芯片上设置有第二方面或第二方面的第一种可能的实施方式中所述的表项管理装置。
本发明实施例提供了一种表项管理方法、装置及交换芯片,能够根据确定的待管理表项的类型和存储数据容量给待管理表项动态分配内存,而且还可以将已分配内存的待管理表项的索引值存储于交换芯片的SDK中,进而通过交换芯片的SDK,基于存储的索引值对待管理表项进行管理操作。本实施例提供的上述方式,能够为待管理表项动态分配内存,并使交换芯片的SDK基于索引值对待管理表项进行增加、删除、修改、读取等管理操作,较好地节省了内存空间并实现了表项的快速管理,有效提升了表项管理效率,增强了交换芯片的工作性能。
本公开的其他特征和优点将在随后的说明书中阐述,或者,部分特征和优点可以从说明书推知或毫无疑义地确定,或者通过实施本公开的上述技术即可得知。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本发明实施例所提供的一种表项管理方法的流程图;
图2示出了本发明实施例所提供的一种将第一表项的索引值存储在哈希表的具体方法流程图;
图3示出了本发明实施例所提供的一种表项增加操作的方法流程图;
图4示出了本发明实施例所提供的一种表项的查找方法流程图;
图5示出了本发明实施例所提供的一种交换芯片中表项之间的引用关系图;
图6示出了本发明实施例所提供的一种表项管理装置的结构框图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
目前交换芯片的表项管理方式效率低下,主要体现在表项的内存空间使用不合理,从而影响了交换芯片的工作性能。为改善此问题,本发明实施例提供了一种表项管理方法、装置及交换芯片,该技术应用于交换机技术领域。以下对本发明实施例进行详细介绍。
在一种可选的方式中,参见图1所示的一种表项管理方法的流程图,该方法包括如下步骤:
步骤S102,确定待管理表项,根据待管理表项的类型和待管理表项的存储数据容量为待管理表项动态分配内存。其中,待管理表项的类型包括第一表项和第二表项;其中,第一表项为按照键值和索引值共同设置的顺序表表项;第二表项为按照索引设置的顺序表表项。本实施例中的动态内存分配是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不像数组等静态内存分配方法那样需要预先分配存储空间,而是由***根据程序的需要即时分配,且分配的大小就是程序要求的大小。
在相关技术中大多采用静态内存分配方式,诸如,一种和3层路由协议相关的SF9564交换芯片,该交换芯片中的表项包括host表、routing表、 vrf表、ingressinterface表、ingress next hop表、ecmp group表、ecmp表、 next hop protect表、protect group表、ingress dscp表、egress next hop表、 egress interface表、ipchange表、l3mtu表和egress dscp表等表中的诸多表项。其中,host表是Hash表,routing表是TCAM表,其余都是线性表。线性表通常均采用静态内存分配,即不考虑用户实际使用容量的大小,都按照最大值预先给线性表分配了内存,在多数情况下,内存占用多,使用效率不高。相比之下,本实施例采用动态分配内存的方式能够极大地节约交换芯片的内存空间。
步骤S104,将已分配内存的待管理表项的索引值存储于交换芯片的 SDK。
SDK可用空间大小会直接影响到其工作效率及交换芯片的性能,因此本实施例仅将已分配内存的待管理表项的索引值存储于交换芯片的SDK,以使SDK收到上层协议命令时根据相关表项的索引值对即可对待管理表项进行管理操作。在具体实施时,可以为SDK构建一个占用空间少且只存储待管理表项索引值的存储结构。考虑到待管理表项具有多种类型,本实施例还可以依据待管理表项的类型在SDK上构建不同的索引值存储结构。通过这种方式,能够较好地提升SDK的工作效率,以进一步增强交换芯片的性能。
具体的,如果已分配内存的待管理表项为第一表项,将第一表项的索引值存储于交换芯片的SDK上的哈希表中;该哈希表也可称为散列表,是一种根据关键码值直接进行访问的数据结构。在实际应用中,可将第一表项的键值映射到表中一个位置来记录其对应的索引值,以加快后续SDK对第一表项进行相关操作时的查找速度。
如果已分配内存的待管理表项为第二表项,将第二表项的索引值存储于交换芯片的SDK上的位图中;该位图可以理解为用位(Bit)来表示数据,每位可存储一个整数。而通常的数组存储方案中每个整数一般会占用4个字节,1个字节有8位,即数组存储1个整数所占用的空间,可等同于位图存储连续32个整数所占用的空间。显然,在实际应用中,利用位图存储索引值可较通常的数组存储方法更加节约空间。此外,位图的每一位索引值都用二进制数标记其使用记录,即某位显示1则表示已分配;显示0则表示未分配。基于这一特点,后续SDK在增加第二表项分配索引值时,能够快速选择一个最小的未分配表项的索引值;在删除第二表项时,也可以释放对应的索引值;如此实现动态分配索引值,充分利用了空间。
相关技术中,诸如,SF9564交换芯片中Hash表和TCAM表可以通过 SDK调用芯片提供的查询接口唯一定位表项是否存在,而依据3层路由协议转发所需,线性表需要分为两类:第一类是按照键值和索引值共同设置的顺序表,与Hash表或TCAM表可实现多对一的对应关系;比如ingress next hop表、ecmp group表、ecmp表、next hop protect表、egressnext hop表。第二类是按照静态或动态分配索引进行设置的顺序表,比如vrf表、ingressinterface表、ingress dscp表、protect group表、ingress dscp表、egress interface表、ip change表、l3mtu表和egress dscp表。SDK收到上层协议的表项增加、修改和删除命令时,对于第一类线性表的表项,只能通过遍历方式查询键值并一一比较,确定动态分配的索引后再进行处理。但是在芯片中不能实现这个遍历逻辑,所以在SDK的缓存中保存了按照键值和索引值共同设置的顺序表的表项数据信息,内存占用较大。对于第二类线性表的表项可以按存储在SDK上的索引下发其表项数据至交换芯片处理。具体的,诸如,SDK收到上层协议对第一类线性表的表项进行增加的命令时,SDK需要传递输入键值和已有表项的键值进行遍历比较,如果不能找到,则可增加表项并返回分配的索引号;如果能找到,则返回失败信息,表明该输入键值已存在与其对应的表项。SDK收到上层协议对第一类线性表的表项进行修改的命令时,SDK需要传递输入键值和和已有表项的键值进行遍历比较,找到后,按照该键值对应的索引值下发表项数据至芯片修改该键值和索引值共同标记的表项数据信息。SDK收到上层协议对第二类线性表的表项进行修改命令时,SDK需要依次遍历第二类线性表中的表项找出需要修改表项的索引值,然后按照该索引值下发表项数据至芯片修改该索引值对应的表项数据信息。相比之下,本实施例在SDK上设置相应的存储结构存储索引值能够极大地节约SDK的内存空间,同时基于此存储结构,也能有效地提升SDK的工作效率。
步骤S106,通过交换芯片的SDK,基于存储的索引值对待管理表项进行管理操作;其中,管理操作包括表项增加操作、表项删除操作、表项修改操作和表项读取操作中的一种或多种。
本发明实施例提供的上述表项管理方法,能够根据确定的待管理表项的类型和存储数据容量给待管理表项动态分配内存,而且还可以将已分配内存的待管理表项的索引值存储于交换芯片的SDK中,进而通过交换芯片的SDK,基于存储的索引值对待管理表项进行管理操作。本实施例提供的上述方式,能够为待管理表项动态分配内存,并使交换芯片的SDK基于索引值对待管理表项进行增加、删除、修改、读取等管理操作,较好地节省了内存空间并实现了表项的快速管理,有效提升了表项管理效率,增强了交换芯片的工作性能。
进一步,考虑到上述把第一表项的键值映射到表中一个位置可能会出现占用冲突,上述哈希表的结构优选地采用线性数组结合链表的形式。对应此结构,本发明实施例提供了一种将第一表项的索引值存储于交换芯片的SDK上的哈希表中的具体实施方式,具体的,参见图2所示的一种将第一表项的索引值存储在哈希表的具体方法流程图,该方式包括如下步骤:
步骤S202,获取第一表项的键值。其中,键值包括表项类型信息、报文输出端口信息、目的物理地址信息和出接口信息中的一种或多种;
具体的,获取第一表项的键值的方式有多种,诸如,通过接收人工输入的键值或者直接通过可提取第一表项的键值的设备获取。键值主要用于标记第一表项,以保证交换芯片能够按照上层协议需求进行报文的正确转发。在实际应用时,诸如在和3层路由协议相关的SF9564交换芯片中,表项类型信息用于标记表项类型;报文输出端口信息用于标记报文的输出端口;目的物理地址用于标记报文转发的目的物理地址;出接口信息可为3 层出接口信息,包含从该出接口输出时对于报文字段的修改信息。
步骤S204,根据获取的键值,采用哈希函数计算得到第一表项对应的哈希值。
其中,本实施例中的哈希函数又可称为散列函数,是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。具体而言,把任意长度的输入值(又叫做预映射)通过散列函数变换成固定长度的输出,该输出就是哈希值,也称散列值。这种转换是一种压缩映射,即哈希值所用的空间通常远小于输入值所用的空间。
具体的,上述散列函数可以采用CRC(Cyclic Redundancy Check,循环冗余校验算法)、MD5(Message-Digest Algorithm 5,摘要算法)或SHA (Secure Hash Algorithm,安全散列算法)实现。在实际应用中,每种算法都可以包括多个版本。在此以CRC为例,CRC的版本包括CRC8、CRC12、 CRC16及CRC32等。本发明实施例给出一种上述采用哈希函数计算得到第一表项对应的哈希值的方法:使用CRC16或CRC32对获取的键值进行计算,计算结果取低10位即为哈希值。
步骤S206,将哈希值加入交换芯片的SDK上预先设置的哈希桶数组内,以成为哈希桶数组中第一表项对应的一个哈希桶。
其中,哈希桶数组是一种线性数组,一个哈希桶数组对应一张按照键值和索引值共同设置的顺序表,哈希桶数组可以包含多个哈希桶,每个哈希桶可对应一张按照键值和索引值共同设置的顺序表中的多个表项,也即上述第一表项,且每个哈希桶指向一个单向链表。其中,单向链表是一种链表,其特点是链表的链接方向是单向的。其中,链表是使用指针进行构造的列表,具体的,链表是由一个个节点组装起来的,每个节点都有指针成员变量指向列表中的下一个节点。因此链表又可称为节点列表,利用链表中的节点存储索引值,能够较好地区分出相同哈希值的第一表项,链表结构也可以充分利用计算机内存空间,实现灵活的内存动态管理。
步骤S208,将第一表项的索引值存储于第一表项对应的哈希桶指向的单向链表的节点内。
通过本发明实施例提供的上述将第一表项的索引值存储在哈希表的具体方法,较好地采用了线性数组结合链表的形式在SDK的哈希表中存储第一表项的索引值,从而充分利用了内存空间,实现了较为灵活的内存动态管理。考虑到在对表项进行管理时,包括表项增加操作、表项修改操作和表项删除操作等操作,为便于理解,以待管理表项为第一表项为例,本发明实施例针对表项增加操作、表项修改操作和表项删除操作分别对图1中步骤S106的具体实现方式进一步解释说明。
对于表项增加操作,参见图3所示的一种表项增加操作的方法流程图,该图3也即示出了第一表项包括待增加第一表项时,基于索引值对待管理表项进行管理操作的具体实现方式,包括如下步骤:
步骤S302,获取待增加第一表项的键值。
具体的,获取待增加第一表项的键值的方式有多种,诸如,通过接收人工输入的键值或者直接通过可提取待增加第一表项的键值的设备获取。
步骤S304,基于待增加第一表项的键值确定待增加第一表项对应的哈希值。
具体的,可使用CRC16或CRC32对获取的键值进行计算,计算结果取低10位即为哈希值。
步骤S306,根据存储的索引值,确定已分配内存的第一表项对应的哈希桶。
步骤S308,判断已分配内存的第一表项对应的哈希桶中是否存在与待增加第一表项的哈希值对应的目标哈希桶。
步骤S310,如果否,对待增加第一表项进行表项增加操作。
步骤S312,如果是,增加操作失败。
通过上述方式,能够有效的判断已有表项中是否存在待增加表项,如果否,则可执行表项增加操作,方便快捷地实现表项管理。
考虑到表项删除操作和表项修改操作都是对已有表项进行调整,本发明实施例还提供了一种表项调整操作的具体实施方法,也即示出了第一表项包括待调整第一表项时,基于索引值对待管理表项进行管理操作的具体实现方式,包括如下步骤:
(1)获取待调整第一表项的键值;
(2)基于待调整第一表项的键值确定待调整第一表项对应的哈希值;
(3)根据存储的索引值,确定已分配内存的第一表项对应的哈希桶;
(4)判断已分配内存的第一表项对应的哈希桶中是否存在与待调整第一表项的哈希值对应的目标哈希桶;
(5)如果是,获取目标哈希桶指向的单向链表中的各索引值;
(6)读取与各索引值对应的表项键值;
(7)逐一比对待调整第一表项的键值与各表项键值,判断是否有与待调整第一表项的键值匹配的表项键值;
(8)如果是,当待调整第一表项包括待删除第一表项时,对待删除第一表项进行表项删除操作;当待调整第一表项包括待修改第一表项时,对待修改第一表项进行表项修改操作。
通过上述方式,能够有效的判断已有表项中是否存在待调整表项,该待调整表项可以为待删除表项,也可以为待修改表项;如果否,则可执行相应的表项调整操作,方便快捷地实现表项管理。
可以理解的是,在对表项进行管理时,如果增加表项,需要从已有表项中查找判断是否有待增加表项,如果删除表项或修改表项(统称待调整表项),也需要从已有表项中查找待调整表项,本实施例给出了一种可用于前述表项增加方法和表项调整方法中的查找表项的方法,参见图4所示的一种表项的查找方法流程图,包括如下步骤:
步骤S402,基于人工输入的键值,计算哈希值并根据哈希值定位哈希桶。
具体的,可使用CRC16或CRC32对获取的键值进行计算,计算结果取低10位即为哈希值。
步骤S404,取出哈希桶指向的单向链表中已存储的第一个索引值。
步骤S406,根据取出的索引值读取对应的表项,以获取表项的键值。
步骤S408,判断人工输入的键值与表项的键值是否相同;如果是,执行步骤S410;如果否,执行步骤S412。
步骤S410,确定查找到表项。
步骤S412,判断哈希桶指向的单向链表里是否还有已存储的下一个索引值;如果是,执行步骤S414;如果否,执行步骤S416。
步骤S414,取出下一个索引值,然后返回步骤S406。
步骤S416,确定未查到表项。
进一步,考虑到表项之间存在复杂的引用关系,诸如,图5 所示的 SF9564交换芯片中表项间有着复杂的引用关系,其中,host表指向ingress next hop表,即表示host引用ingress next hop表。某一个表项的增删都与其他相关表项关联,如果不加以管理,错误执行了上层协议命令,则会出现某些表项删除后还有被其他表项引用的问题,造成表项的混乱,出现问题难于排查。为此,基于本发明实施例提供了一种上述对待删除第一表项进行表项删除操作的具体实施方式,该方式的步骤包括:判断待删除第一表项对应的引用数值是否为预设数值;如果是,对待删除第一表项进行表项删除操作。
具体的,可在每个表项中设置1个整数类型的引用标识字段(以下可简称为ref_count),当某一表项被引用时,其ref_count加1;当引用该表项的表项删除时,ref_count减1。当表项的ref_count为0时,该表项才能被成功删除。通过这种方式,能够纠正上层协议的一些表项配置错误,快速定位配置问题,将所有表项维护在正确的状态。
本发明实施例提供的上述方法,在实际应用中,使用CRC16或CRC32 的算法计算哈希值冲突小,访问哈希表能避免相关技术中遍历表项带来的时间耗费,提高表项操作的效率,给配置表项的用户快速的响应;只在SDK 层保存第二表项的使用位图、第一表项索引值所用的哈希表和ref_counter,并且对哈希表实现内存动态分配,而不是保存整个芯片表项的数据信息,节省了有限的内存空间;利用ref_counter管理表之间的引用关系,确保了表之间的依赖关系和完整性;此外,在编译程序代码中,还设计了位图及哈希表的公共抽象数据结构,定义某个具体线性表时只需调用该数据结构,填入某线性表的属性和实现操作函数,提升了代码编写效率,增强了重用性,提高了软件质量。
对应于上述表项管理方法,本发明实施例提供了一种设置在交换芯片中的表项管理装置,参见图6 所示的一种表项管理装置的结构框图,该装置包括以下模块:
内存分配模块602,用于确定待管理表项,根据待管理表项的类型和待管理表项的存储数据容量为待管理表项动态分配内存;其中,待管理表项的类型包括第一表项和第二表项;所述第一表项为按照键值和索引值共同设置的顺序表表项;所述第二表项为按照索引设置的顺序表表项;
索引值存储模块604,用于将已分配内存的待管理表项的索引值存储于交换芯片的SDK;
管理模块606,用于通过交换芯片的SDK,基于存储的索引值对待管理表项进行管理操作;管理操作包括表项增加操作、表项删除操作、表项修改操作和表项读取操作中的一种或多种。
其中,上述索引值存储模块包括:第一存储单元,用于如果已分配内存的待管理表项为第一表项,将第一表项的索引值存储于交换芯片的SDK 上的哈希表中;第二存储单元,用于如果已分配内存的待管理表项为第二表项,将第二表项的索引值存储于交换芯片的SDK上的位图中。
具体的,上述第一存储单元用于:获取第一表项的键值;键值包括表项类型信息、报文输出端口信息、目的物理地址信息和出接口信息中的一种或多种;根据获取的键值,采用哈希函数计算得到第一表项对应的哈希值;将哈希值加入交换芯片的SDK上预先设置的哈希桶数组内,以成为哈希桶数组中第一表项对应的一个哈希桶;其中,哈希桶数组包含多个哈希桶,每个哈希桶可对应个第一表项,且每个哈希桶指向一个单向链表;将第一表项的索引值存储于第一表项对应的哈希桶指向的单向链表的节点内。
本发明实施例提供的上述表项管理装置,能够根据确定的待管理表项的类型和存储数据容量给待管理表项动态分配内存,而且还可以将已分配内存的待管理表项的索引值存储于交换芯片的SDK中,进而通过交换芯片的SDK,基于存储的索引值对待管理表项进行管理操作。本实施例提供的上述装置,能够为待管理表项动态分配内存,并使交换芯片的SDK基于索引值对待管理表项进行增加、删除、修改、读取等管理操作,较好地节省了内存空间并实现了表项的快速管理,有效提升了表项管理效率,增强了交换芯片的工作性能。
本实施例所提供的装置,其实现原理及产生的技术效果和前述实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置具体工作过程,可以参考前述实施例中的对应过程,在此不再赘述。
进一步,本发明实施例还提供了一种交换芯片,该交换芯片上设置有上述表项管理装置。
本发明实施例所提供的表项管理方法、装置及交换芯片的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
另外,在本发明实施例的描述中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种表项管理方法,其特征在于,所述方法应用于交换芯片,所述方法包括:
确定待管理表项,根据所述待管理表项的类型和所述待管理表项的存储数据容量为所述待管理表项动态分配内存;其中,所述待管理表项的类型包括第一表项和第二表项;所述第一表项为按照键值和索引值共同设置的顺序表表项;所述第二表项为按照索引值设置的顺序表表项;
将已分配内存的所述待管理表项的索引值存储于所述交换芯片的SDK;
通过所述交换芯片的SDK,基于存储的所述索引值对所述待管理表项进行管理操作;所述管理操作包括表项增加操作、表项删除操作、表项修改操作和表项读取操作中的一种或多种。
2.根据权利要求1所述的方法,其特征在于,所述将已分配内存的所述待管理表项的索引值存储于所述交换芯片的SDK的步骤,包括:
如果所述已分配内存的所述待管理表项为第一表项,将所述第一表项的索引值存储于所述交换芯片的SDK上的哈希表中;
如果所述已分配内存的所述待管理表项为第二表项,将所述第二表项的索引值存储于所述交换芯片的SDK上的位图中。
3.根据权利要求2所述的方法,其特征在于,所述将所述第一表项的索引值存储于所述交换芯片的SDK上的哈希表中的步骤,包括:
获取所述第一表项的键值;其中,所述键值包括表项类型信息、报文输出端口信息、目的物理地址信息和3层输出接口信息中的一种或多种;所述3层输出接口信息包括报文从3层输出接口输出时3层输出接口对报文字段的修改信息;
根据获取的所述键值,采用哈希函数计算得到所述第一表项对应的哈希值;
将所述哈希值加入所述交换芯片的SDK上预先设置的哈希桶数组内,以成为所述哈希桶数组中所述第一表项对应的一个哈希桶;其中,所述哈希桶数组包含多个哈希桶,每个哈希桶可对应多个所述第一表项,且每个所述哈希桶指向一个单向链表;
将所述第一表项的索引值存储于所述第一表项对应的哈希桶指向的单向链表的节点内。
4.根据权利要求3所述的方法,其特征在于,所述待管理表项包括待增加第一表项,所述基于存储的所述索引值对所述待管理表项进行管理操作的步骤,包括:
获取所述待增加第一表项的键值;
基于所述待增加第一表项的键值确定所述待增加第一表项对应的哈希值;
根据存储的所述索引值,确定已分配内存的第一表项对应的哈希桶;
判断所述已分配内存的第一表项对应的哈希桶中是否存在与所述待增加第一表项的哈希值对应的目标哈希桶;
如果否,对所述待增加第一表项进行表项增加操作。
5.根据权利要求3所述的方法,其特征在于,所述待管理表项包括待调整第一表项;所述基于存储的所述索引值对所述待管理表项进行管理操作的步骤,包括:
获取所述待调整第一表项的键值;
基于所述待调整第一表项的键值确定所述待调整第一表项对应的哈希值;
根据存储的所述索引值,确定已分配内存的第一表项对应的哈希桶;
判断已分配内存的第一表项对应的哈希桶中是否存在与所述待调整第一表项的哈希值对应的目标哈希桶;
如果是,获取所述目标哈希桶指向的单向链表中的各索引值;
读取与各所述索引值对应的表项键值;
逐一比对所述待调整第一表项的键值与各所述表项键值,判断是否有与所述待调整第一表项的键值匹配的表项键值;
如果是,当所述待调整第一表项包括待删除第一表项时,对所述待删除第一表项进行表项删除操作;当所述待调整第一表项包括待修改第一表项时,对所述待修改第一表项进行表项修改操作。
6.根据权利要求5所述的方法,其特征在于,所述对所述待删除第一表项进行表项删除操作的步骤,包括:
判断所述待删除第一表项对应的引用数值是否为预设数值;
如果是,对所述待删除第一表项进行表项删除操作。
7.一种表项管理装置,其特征在于,所述装置应用于交换芯片,所述装置包括:
内存分配模块,用于确定待管理表项,根据所述待管理表项的类型和所述待管理表项的存储数据容量为所述待管理表项动态分配内存;其中,所述待管理表项的类型包括第一表项和第二表项;所述第一表项为按照键值和索引值共同设置的顺序表表项;所述第二表项为按照索引值设置的顺序表表项;索引值存储模块,用于将已分配内存的所述待管理表项的索引值存储于所述交换芯片的SDK;
管理模块,用于通过所述交换芯片的SDK,基于所述存储的索引值对所述待管理表项进行管理操作;所述管理操作包括表项增加操作、表项删除操作、表项修改操作和表项读取操作中的一种或多种。
8.根据权利要求7所述的装置,其特征在于,所述索引值存储模块包括:
第一存储单元,用于如果所述已分配内存的所述待管理表项为第一表项,将所述第一表项的索引值存储于所述交换芯片的SDK上的哈希表中;
第二存储单元,用于如果所述已分配内存的所述待管理表项为第二表项,将所述第二表项的索引值存储于所述交换芯片的SDK上的位图中。
9.根据权利要求8所述的装置,其特征在于,所述第一存储单元用于:
获取所述第一表项的键值;其中,所述键值包括表项类型信息、报文输出端口信息、目的物理地址信息和3层输出接口信息中的一种或多种;所述3层输出接口信息包括报文从3层输出接口输出时3层输出接口对报文字段的修改信息;
根据获取的所述键值,采用哈希函数计算得到所述第一表项对应的哈希值;
将所述哈希值加入所述交换芯片的SDK上预先设置的哈希桶数组内,以成为所述哈希桶数组中所述第一表项对应的一个哈希桶;其中,所述哈希桶数组包含多个哈希桶,每个哈希桶可对应多张所述第一表项,且每个所述哈希桶指向一个单向链表;
将所述第一表项的索引值存储于所述第一表项对应的哈希桶指向的单向链表的节点内。
10.一种交换芯片,其特征在于,所述交换芯片上设置有权利要求7或8所述的表项管理装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810599471.7A CN108874987B (zh) | 2018-06-11 | 2018-06-11 | 表项管理方法、装置及交换芯片 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810599471.7A CN108874987B (zh) | 2018-06-11 | 2018-06-11 | 表项管理方法、装置及交换芯片 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108874987A CN108874987A (zh) | 2018-11-23 |
CN108874987B true CN108874987B (zh) | 2020-09-29 |
Family
ID=64338513
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810599471.7A Active CN108874987B (zh) | 2018-06-11 | 2018-06-11 | 表项管理方法、装置及交换芯片 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108874987B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109639581B (zh) * | 2019-02-21 | 2021-05-28 | 杭州迪普科技股份有限公司 | 交换芯片的表项维护方法和装置 |
CN110011920B (zh) * | 2019-04-11 | 2021-03-23 | 盛科网络(苏州)有限公司 | 一种报文处理方法及装置 |
CN112118186B (zh) * | 2020-08-28 | 2022-11-01 | 深圳市风云实业有限公司 | 一种交换芯片路由表项存储方法、转发方法及配置方法 |
CN114615216B (zh) * | 2022-03-11 | 2023-07-21 | 深圳市风云实业有限公司 | 一种基于交换芯片的路由表动态调整方法 |
CN115242612B (zh) * | 2022-07-22 | 2024-04-26 | 烽火通信科技股份有限公司 | 一种故障诊断方法和装置 |
CN115291812B (zh) * | 2022-09-30 | 2023-01-13 | 北京紫光青藤微***有限公司 | 一种通信芯片的数据存储方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101110846A (zh) * | 2007-08-29 | 2008-01-23 | 杭州华三通信技术有限公司 | 一种mac地址表项的管理方法和设备 |
CN101729410A (zh) * | 2009-11-10 | 2010-06-09 | 中兴通讯股份有限公司 | 一种媒体访问控制地址表的同步方法及装置 |
CN101729420A (zh) * | 2009-12-15 | 2010-06-09 | 杭州迪普科技有限公司 | 一种数据处理方法及装置 |
EP3200405A1 (en) * | 2014-09-23 | 2017-08-02 | ZTE Corporation | Three-layer-forwarding device route table capacity expansion method and forwarding device |
CN107623606A (zh) * | 2016-07-15 | 2018-01-23 | 中国科学院声学研究所 | 基于openflow交换机的流表表项空闲超时检测方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150249720A1 (en) * | 2014-03-03 | 2015-09-03 | Airpush, Inc. | In-app content channel |
CN105187278B (zh) * | 2015-09-21 | 2018-09-04 | 盛科网络(苏州)有限公司 | 无丢失的检测oam错误的芯片实现方法 |
CN106559358A (zh) * | 2015-09-29 | 2017-04-05 | 联想企业解决方案(新加坡)有限公司 | 用于网络虚拟化的逻辑交换机架构 |
-
2018
- 2018-06-11 CN CN201810599471.7A patent/CN108874987B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101110846A (zh) * | 2007-08-29 | 2008-01-23 | 杭州华三通信技术有限公司 | 一种mac地址表项的管理方法和设备 |
CN101729410A (zh) * | 2009-11-10 | 2010-06-09 | 中兴通讯股份有限公司 | 一种媒体访问控制地址表的同步方法及装置 |
CN101729420A (zh) * | 2009-12-15 | 2010-06-09 | 杭州迪普科技有限公司 | 一种数据处理方法及装置 |
EP3200405A1 (en) * | 2014-09-23 | 2017-08-02 | ZTE Corporation | Three-layer-forwarding device route table capacity expansion method and forwarding device |
CN107623606A (zh) * | 2016-07-15 | 2018-01-23 | 中国科学院声学研究所 | 基于openflow交换机的流表表项空闲超时检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN108874987A (zh) | 2018-11-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108874987B (zh) | 表项管理方法、装置及交换芯片 | |
US10282121B2 (en) | Apparatus and method for insertion and deletion in multi-dimensional to linear address space translation | |
US8868926B2 (en) | Cryptographic hash database | |
Chen et al. | The dynamic cuckoo filter | |
US7099881B2 (en) | Method for increasing average storage capacity in a bit-mapped tree-based storage engine by using remappable prefix representations and a run-length encoding scheme that defines multi-length fields to compactly store IP prefixes | |
US8099421B2 (en) | File system, and method for storing and searching for file by the same | |
US20120197958A1 (en) | Parallel Serialization of Request Processing | |
WO2010000201A1 (zh) | 存储、查找路由表的方法及装置 | |
CN108134739B (zh) | 一种基于索引特里树的路由查找方法及装置 | |
KR20200097050A (ko) | 인덱스 관리 방법 | |
CN112817538B (zh) | 数据处理的方法、装置、设备和存储介质 | |
CN112988912B (zh) | 区块链数据存储方法及装置、电子设备 | |
CN114153848A (zh) | 区块链数据存储方法及装置、电子设备 | |
CN116578746A (zh) | 对象去重方法及装置 | |
CN117435912A (zh) | 基于网络数据包属性值长短特征的数据包索引与检索方法 | |
CN115964002A (zh) | 一种电能表终端档案管理方法、装置、设备及介质 | |
CN112988910B (zh) | 区块链数据存储方法及装置、电子设备 | |
US20130218851A1 (en) | Storage system, data management device, method and program | |
CN110008183B (zh) | 一种智能卡文件***的文件搜索方法 | |
CN112988911A (zh) | 区块链数据存储方法及装置、电子设备 | |
KR20190089420A (ko) | 서브 인덱스 저장 방식의 데이터 구축 및 관리 시스템 | |
US20240015102A1 (en) | Longest prefix matching | |
JP2001056775A (ja) | 計算機システム及びプログラム記録媒体 | |
CN115391349A (zh) | 一种数据处理方法及装置 |
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 |