路由查找方法及装置、B-Tree树结构的构建方法

文档序号:7769796阅读:415来源:国知局
路由查找方法及装置、B-Tree树结构的构建方法
【专利摘要】本发明公开了一种路由查找方法及装置、B-Tree树结构的构建方法。其中,该装置包括:路由查找算法软件模块、路由更新接口模块和路由查找硬件模块,其中,路由查找算法软件模块,用于执行对路由条目的软件计算和更新条目指令的下发;路由更新接口模块,用于在接收到路由查找算法软件模块下发的更新条目指令后,根据路由查找硬件模块的实际工作状态,控制路由查找硬件模块的数据流,并将更新条目写入路由查找硬件模块的存储器中;路由查找硬件模块,用于响应硬件系统的路由查找请求,并将最长前缀匹配的查找结果返回至硬件系统;其中,路由查找硬件模块为流水线型架构。通过本发明实现硬件流水操作,流水级数少,容量对路由前缀分布不敏感。
【专利说明】路由查找方法及装置、B-Tree树结构的构建方法

【技术领域】
[0001]本发明涉及网络交换领域,特别是涉及一种路由查找方法及装置、B-Tree树结构的构建方法。

【背景技术】
[0002]随着互联网Internet的迅猛发展,用于主干网络互联的核心路由器的接口速率达到lOOGbps,该速率要求核心路由器在支持大容量路由表的情况下路由查找速率达到每秒几百万次。互联网协议(Internet Protocol,简称为IP)查找需要得到最长匹配前缀,由于高速查找的需要,软件查找方法已经不适用,近年来研究人员提出了多种硬件查找方法以提高查找速率,其中以Trie树结构和三态内容寻址存储器(Ternary ContentAddressable Memory,简称为 TCAM)最为流行。
[0003]Trie树结构是应用最为广泛的树结构,容易实现硬件上的流水操作,利于提升路由查找的吞吐率。但是Trie树结构具有一定的局限性。一般Trie树结构的流水级数较多,会带来过大的查找延时。采用多比特Trie树结构的路由查找设计可以大大减少流水级数,但会带来大量额外内存的消耗,并且这种额外的内存消耗量与路由表的前缀分布相关,使得基于多比特Trie树的路由查找硬件设计的路由表容量存在较大起伏,在比较坏的路由分布的情况下,存储空间利用率很低。
[0004]针对相关技术中路由查找方案内存消耗较大,影响路由查找效率的问题,目前尚未提出有效的解决方案。


【发明内容】

[0005]针对相关技术中路由查找方案内存消耗较大,影响路由查找效率的问题,本发明提供了一种路由查找方法及装置、B-Tree树结构的构建方法,用以解决上述技术问题。
[0006]根据本发明的一个方面,本发明提供了一种路由查找装置,其中,该装置包括:路由查找算法软件模块、路由更新接口模块和路由查找硬件模块,其中,路由查找算法软件模块,用于执行对路由条目的软件计算和更新条目指令的下发;路由更新接口模块,用于在接收到上述路由查找算法软件模块下发的更新条目指令后,根据路由查找硬件模块的实际工作状态,控制上述路由查找硬件模块的数据流,并将更新条目写入上述路由查找硬件模块的存储器中;路由查找硬件模块,用于响应硬件系统的路由查找请求,并将最长前缀匹配的查找结果返回至上述硬件系统;其中,上述路由查找硬件模块为流水线型架构。
[0007]优选地,上述路由查找算法软件模块包括:插入操作子模块,用于响应路由转发系统的路由插入指令,并将上述路由条目插入到B-Tree树结构中;删除操作子模块,用于响应上述路由转发系统的路由删除指令,并将上述路由条目在上述B-Tree树结构中删除;软件表项内存管理子模块,用于对路由查找算法中的节点数据和结果表条目数据进行管理;更新硬件操作子模块,用于将在上述插入操作子模块的插入操作或上述删除操作子模块的删除操作中涉及到改变的B-Tree树节点和结果表条目记录在缓存中,并在插入操作或删除操作结束后,将树节点从软件数据格式转换成硬件数据格式,并将转换后的硬件数据和对应的硬件映射地址通过软硬件交互接口连续写入上述路由更新接口模块中。
[0008]优选地,上述路由查找硬件模块包括:查找逻辑子模块,用于在接收到上述硬件系统的路由查找请求后,将查找键值信息和内存子模块中的根节点地址信息发送至树结构的第一级查找流水中;然后判断上述根节点地址是否为本级节点;如果是,则向上述内存子模块发起读节点请求,等待上述内存子模块返回节点信息;如果不是,则保留当前节点信息不变;还用于根据比较上述节点信息与键值,判断路由条目是否命中;如果命中,则将命中的路由条目对应的结果记录替代之前的命中结果;内存子模块,包括多个独立内存空间,分别与上述树结构的每个查找逻辑层相对应。
[0009]优选地,上述路由更新接口模块包括:缓存子模块,用于通过上述软硬件交互接口接收节点数据和结果表条目数据以及对应的硬件映射地址;逻辑处理子模块,用于根据上述路由查找硬件模块的上述查找逻辑子模块的工作状态,将上述缓存子模块的条目更新内容更新至上述路由查找硬件模块的上述内存子模块中。
[0010]优选地,上述插入操作子模块包括:树结构管理单元,用于对新条目在上述B-Tree树结构中的访问顺序进行控制;节点解析及比较单元,用于与上述树结构管理单元共同控制新条目在上述B-Tree树结构中的有序查询,并找到插入位置;节点分裂操作单元,用于在新条目需要插入到已满节点时,对该已满节点进行分裂操作;结果表更新单元,用于将新条目携带的结果信息存入结果表,并将该结果信息的地址记录在上述新条目所在节点的对应位置中。
[0011]优选地,上述软件表项内存管理子模块包括:软件节点管理单元,用于管理路由查找算法中的节点分配,通过内存管理算法迅速分配和管理软件节点;软件结果表管理单元,用于管理路由查找算法中的结果表的条目地址分配,通过内存管理算法快速分配和管理结果表;硬件地址映射管理单元,用于将硬件的实际内存空间进行软件地址映射,通过软件的内存管理算法管理硬件节点和结果表;其中,软件节点与硬件节点一一对应,软件结果表与硬件结果表一一对应。
[0012]根据本发明的另一方面,本发明还提供了一种路由查找方法,其中,该方法包括:定义B-Tree树结构的阶数M和最大高度N、每层最大节点数目和结果表条目数,进而确定硬件相应的流水级数、每层节点占用空间和结果表占用空间,进而构建B-Tree树结构;基于上述B-Tree树结构,执行路由查找操作。
[0013]根据本发明的又一方面,本发明还提供了一种硬件查找结构为自底向上生长的B-Tree树结构的构建方法,其中,该方法包括:根据实际路由表容量需求和延时需求定义出B-Tree树结构的阶数M和B-Tree树结构所需要的最大高度N,按照上述最大高度N设定相应的流水级数N+1 ;根据算法填充情况定义出B-Tree树结构的每层最大节点数目,按照上述每层最大节点数目设定相应的内存空间;根据路由表实际容量需求设定结果表的内存空间。
[0014]通过本发明,解决了相关技术中路由查找方案内存消耗较大,影响路由查找效率的问题,本发明的技术方案从整体上设计了路由查找系统的软件算法模块、硬件数据结构、更新流程、查找流水结构和内存结构,能够满足大容量路由表的高性能查找需求,能够实现硬件流水操作,流水级数少,并且容量对路由前缀分布不敏感。
[0015]上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的【具体实施方式】。

【专利附图】

【附图说明】
[0016]图1是根据本发明实施例的路由查找装置的结构框图;
[0017]图2是根据本发明实施例的路由算法软件模块的架构示意图;
[0018]图3是根据本发明实施例的路由查找装置的硬件相关模块的架构示意图;
[0019]图4是根据本发明实施例的硬件查找流水的流程示意图;
[0020]图5是根据本发明实施例的路由前缀插入流程示意图;
[0021]图6是根据本发明实施例的路由前缀删除流程示意图;
[0022]图7是根据本发明实施例的路由查找方法的流程图;
[0023]图8是根据本发明实施例的硬件查找结构为自底向上生长的B-Tree树结构的构建方法的流程图;
[0024]图9是根据本发明实施例的路由查找装置的运行示意图。

【具体实施方式】
[0025]为了解决现有技术路由查找方案内存消耗较大,影响路由查找效率的问题,本发明提供了一种路由查找方法及装置、B-Tree树结构的构建方法,以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。
[0026]本发明提出一种基于B-Tree的路由查找方法和硬件架构,能够支持大容量转发表,并进行高速查找,最重要的是本发明提出的方法能够实现硬件流水操作,流水级数少,并且容量对路由前缀分布不敏感。B-tree是一种被广泛应用于数据库文件管理的软件算法,它的特点是一个树节点拥有M-1个关键字和M个子节点,B-Tree的深度由阶数M和关键字的数目决定,与关键字的分布无关。这些特点使得B-Tree能够克服上述相关技术中Trie树结构的缺点,实现流水级数少且对路由前缀分布不敏感的路由查找设计。
[0027]需要注意的是,在应用B-Tree进行路由查找时,需要确保返回的结果为最长前缀匹配结果。由于查找回溯是无法在硬件流水操作中实现的,因此需要对B-Tree的路由查找算法进行特殊的处理。这类处理有很多种公开的操作方法,例如可以将父前缀复制成多份合并到其所有子前缀上,或者采用将父前缀与树结构最上层的子节点合并的方法。本发明利用了将父前缀与树结构最上层子节点合并的方法,设计出基于B-Tree的路由查找方法和装置。
[0028]本实施例提供了一种路由查找方法装置,图1是根据本发明实施例的路由查找装置的结构框图,如图1所示,该装置包括:路由查找算法软件模块10、路由更新接口模块20和路由查找硬件模块30,下面对各个模块进行具体介绍。
[0029]路由查找算法软件模块10,用于执行对路由条目的软件计算和更新条目指令的下发;
[0030]路由更新接口模块20,连接至路由查找算法软件模块10,用于在接收到上述路由查找算法软件模块10下发的更新条目指令后,根据路由查找硬件模块30的实际工作状态,控制上述路由查找硬件模块30的数据流,并将更新条目写入上述路由查找硬件模块30的存储器中;
[0031]路由查找硬件模块30,连接至路由更新接口模块20,用于响应硬件系统的路由查找请求,并将最长前缀匹配的查找结果返回至上述硬件系统;其中,上述路由查找硬件模块30为流水线型架构。
[0032]通过本实施例,从整体上设计了路由查找系统的软件算法模块、硬件数据结构、更新流程、查找流水结构和内存结构,能够满足大容量路由表的高性能查找需求,能够实现硬件流水操作,流水级数少,并且容量对路由前缀分布不敏感。
[0033]下面对各模块的设计进行详细描述。
[0034]图2是根据本发明实施例的路由算法软件模块的架构示意图,如图2所示,整个路由查找算法软件模块基于前文所述的不需要进行查找回溯的B-Tree算法实现,整体框架分为4个部分:插入操作子模块(201)、删除操作子模块(202)、软件表项内存管理子模块(203)和更新硬件操作子模块(204)。
[0035]插入操作子模块(201)主要工作是响应路由转发系统的路由插入指令,并将下发的路由条目插入到B-Tree树结构中。该模块中的树结构管理子模块(205)对新条目在树结构中的访问顺序进行控制,它与节点解析及比较子模块(206)共同作用,保证新条目在B-Tree树结构中有序查询,并找到合适的插入位置。节点分裂操作子模块(207)主要功能是当新条目需要插入到一个已经满的节点时,将该节点进行B-Tree的分裂操作。分裂操作仅在插入新条目时可能被触发。当新条目被成功插入树结构后,结果表更新模块(208)将新条目携带的结果信息存入结果表,并将该结果的地址记录在新条目所在的节点对应位置中。
[0036]删除操作子模块(202)主要工作是响应路由转发系统的路由删除指令,并将下发的路由条目从B-Tree树结构中删除。该模块中的树结构管理子模块和节点解析及比较子模块功能与插入操作子模块(201)相同,保证删除条目在B-Tree树结构中有序查询,并找到匹配的目标条目,并进行删除。节点合并子模块(209)的功能是当一个条目被从节点中删除后,如果该节点中键值数目过小,则将该节点与兄弟节点进行合并操作。节点合并操作仅在删除条目时可能被触发。当条目被删除后,结果表更新模块将该条目对应的实际结果从结果表中删除。
[0037]软件表项内存管理子模块(203)的功能是对路由查找算法中的节点和结果表进行管理,包括内容有:软件节点管理子模块(210 )、软件结果表管理子模块(211)、硬件节点地址映射管理子模块(212 )和硬件结果表地址映射管理子模块(213 )。
[0038]软件节点管理子模块(210)的功能是管理路由查找算法中的节点分配,通过内存管理算法快速分配和管理软件节点。
[0039]软件结果表管理子模块(211)的功能是管理路由查找算法中的结果表的条目地址分配,通过内存管理算法快速分配和管理结果表。
[0040]硬件节点地址映射管理子模块(212)和硬件结果表地址映射管理子模块(213)是将硬件的实际内存空间在软件模块中进行地址映射,通过软件的内存管理算法来管理硬件节点和结果表。要求软件节点与硬件节点一一对应,软件结果表与硬件结果表也一一对应,因此实际上一个软件节点不仅对应了一个软件内存节点地址,还对应了一个实际的硬件内存节点地址。
[0041]更新硬件操作子模块(204)的主要功能是将在插入操作或删除操作中涉及到改变的B-Tree树节点和结果表条目记录在缓存中,并在插入操作或删除操作结束后,将树节点从软件数据格式转换成约定的硬件数据格式,并将转换后的硬件数据和对应的硬件映射地址通过软硬件交互接口(可以但不限于LocalBus或PCIe接口)连续写入路由条目更新模块中。该模块的意义在于减少软硬件的接口交互操作,节省更新时间,并减少条目更新对硬件实际查找流水的影响。
[0042]基于上述路由查找算法软件模块的描述,本实施例提供了一种优选实施方式,SP上述路由查找算法软件模块可以包括:插入操作子模块,用于响应路由转发系统的路由插入指令,并将上述路由条目插入到B-Tree树结构中;删除操作子模块,用于响应上述路由转发系统的路由删除指令,并将上述路由条目在上述B-Tree树结构中删除;软件表项内存管理子模块,用于对路由查找算法中的节点数据和结果表条目数据进行管理;更新硬件操作子模块,用于将在上述插入操作子模块的插入操作或上述删除操作子模块的删除操作中涉及到改变的B-Tree树节点和结果表条目记录在缓存中,并在插入操作或删除操作结束后,将树节点从软件数据格式转换成硬件数据格式,并将转换后的硬件数据和对应的硬件映射地址通过软硬件交互接口连续写入上述路由更新接口模块中。
[0043]优选地,上述插入操作子模块可以包括:树结构管理单元,用于对新条目在上述B-Tree树结构中的访问顺序进行控制;节点解析及比较单元,用于与上述树结构管理单元共同控制新条目在上述B-Tree树结构中的有序查询,并找到插入位置;节点分裂操作单元,用于在新条目需要插入到已满节点时,对该已满节点进行分裂操作;结果表更新单元,用于将新条目携带的结果信息存入结果表,并将该结果信息的地址记录在上述新条目所在节点的对应位置中。
[0044]优选地,上述软件表项内存管理子模块可以包括:软件节点管理单元,用于管理路由查找算法中的节点分配,通过内存管理算法迅速分配和管理软件节点;软件结果表管理单元,用于管理路由查找算法中的结果表的条目地址分配,通过内存管理算法快速分配和管理结果表;硬件地址映射管理单元,用于将硬件的实际内存空间进行软件地址映射,通过软件的内存管理算法管理硬件节点和结果表;其中,软件节点与硬件节点一一对应,软件结果表与硬件结果表对应。
[0045]路由查找算法软件模块运行在主控中央处理器(CentralProcessingUnit,简称为CPU)上,可以是闻级算法语目(如C、C++语目)编写的B-Tree算法软件程序。它以路由条目更新指令(插入、删除路由条目指令)作为其输入源,一般来自于协议平台或驱动。当一条更新指令下发到路由查找算法软件模块后,路由查找算法软件模块对这条更新指令根据B-Tree算法进行插入操作;当插入操作完成后,将本次计算所涉及的所有改变的树节点按照约定的硬件格式,通过软硬件交互接口(可以但不限于PCIe接口、LocalBus接口等)一次性写入路由更新接口模块中。
[0046]图3是根据本发明实施例的路由查找装置的硬件相关模块的架构示意图,如图3所示,硬件相关模块包括路由更新接口模块和路由查找硬件模块,其中,路由更新接口模块
(201)是一个硬件模块,分为缓存区(202)和逻辑处理区(203)两个部分,如图3所示。缓存区用于存放算法模块写入的更新节点信息;逻辑处理区根据路由查找硬件模块的相关状态,按照一定的顺序,将更新节点数据写入硬件模块的节点内存中。下面进行具体介绍。
[0047]缓存区(302)主要功能是接收存储软件通过软硬件交互接口写入的节点数据、结果表条目数据和它们对应的硬件地址,这些数据已经由软件转换为硬件数据格式。
[0048]逻辑处理区(303)主要功能是根据路由查找硬件模块中的查找逻辑子模块(305)的实际工作状态,将缓存区的条目更新内容实时更新至路由查找硬件模块的内存区(306)。逻辑处理区的重点在于,B-Tree算法的查找流水具有相关性,即下一级流水访问的节点是上一级流水的查找结果中的一部分;并且因为每一级流水的查找请求时刻都可能存在,所以必须在合适的情况下才能对硬件内存进行更新,否则会造成某些查找出现不命中甚至是错误命中的情况。最简单的一种处理方案是:当出现更新请求后,首先由逻辑处理区对查找流水逻辑进行控制,阻断查找逻辑区(305)入口的所有查找请求,所有查找请求将被暂存在缓存先入先出队列(FirstlnputFirstOutput,简称为FIFO)中;然后等到查找流水逻辑中所有级的查找请求都被完全响应并返回结果,此时查找逻辑中不再存在任何查找请求数据包;再将需要更新的节点和结果表从缓存区读出,根据相应的硬件地址写入内存区(306);最后完成所有更新操作后,解除对查找逻辑区的查找请求的锁定,查找逻辑恢复正常工作状态。
[0049]基于上述对路由查找装置的硬件相关模块(路由更新接口模块)的描述,本实施例提供了一种优选实施方式,即路由更新接口模块包括:缓存子模块,用于通过上述软硬件交互接口接收节点数据和结果表条目数据以及对应的硬件映射地址;逻辑处理子模块,用于根据上述路由查找硬件模块的上述查找逻辑子模块的工作状态,将上述缓存子模块的条目更新内容更新至上述路由查找硬件模块的上述内存子模块中。
[0050]下面对对路由查找装置的另一个硬件相关模块(路由查找硬件模块)进行介绍,路由查找硬件模块(304)为硬件路由查找的主要模块,是流水线设计,主要由查找逻辑区(305)和内存区(306)构成。
[0051]查找逻辑区(305)为流水线设计,每一级流水都有一个查找逻辑,流水线中的信息包括:查找键值信息、节点地址、命中信息(结果表中的地址)等。硬件的查找请求通过硬件接口,首先发送给首级流水,同时获得硬件模块中存放的根节点地址(307);每一级流水根据节点地址去访问本级相对应的内存区,获得相应的节点信息(如果访问的节点不是本级节点,则本级不进行查找比较);再将节点中的键值信息进行解析,与上一级传递来的查找键值进行比较,获得比较结果(如果命中,获得新的命中信息;如果未命中,输出未命中),并获得下一级流水应访问的节点地址;最后一级流水将根据命中信息访问一次结果表,将结果表中相应的命中结果读出,通过硬件接口返回给查找请求端。
[0052]内存区(306)为分块设计,每一块对应一条流水。每一级流水对应的节点空间由算法根据实际需求定义,通过硬件设计固化每一级的内存。根节点地址(307)是一个寄存器,由软件模块配置,标记树结构的根节点位置。结果表(309)对应最后一级查找流水,由算法根据实际的表项容量需求定义结果表的实际占用空间。
[0053]内存区(306)是路由查找硬件模块中重要的数据存储区域,其结构如图3所示。内存区中的各内存区域相互独立,分为根节点地址区域、各层节点区域和结果表区域。根结点地址用于存储B-Tree树结构的根节点的地址,它可能属于任一层节点。每一层树节点区域都相互独立,不与其他树节点区域交叠,避免查找流水同时访问的冲突。结果表区域也是一块独立区域,由查找流水的最后一级访问。
[0054]根节点地址可以用寄存器实现;各层节点和结果表区域可以根据所需实际内存空间大小和访问延时要求用静态随机访问存储器(SRAM)、动态随机访问存储器(DRAM)或其它类型存储器实现。
[0055]基于上述对路由查找装置的硬件相关模块(路由查找硬件模块)的描述,本实施例提供了一种优选实施方式,即路由查找硬件模块可以包括:查找逻辑子模块,用于在接收到上述硬件系统的路由查找请求后,将查找键值信息和内存子模块中的根节点地址信息发送至树结构的第一级查找流水中;然后判断上述根节点地址是否为本级节点;如果是,则向上述内存子模块发起读节点请求,等待上述内存子模块返回节点信息;如果不是,则保留当前节点信息不变;还用于根据比较上述节点信息与键值,判断路由条目是否命中;如果命中,则将命中的路由条目对应的结果记录替代之前的命中结果;内存子模块,包括多个独立内存空间,分别与上述树结构的每个查找逻辑层相对应。
[0056]在图3中可以看出,查找逻辑区是硬件查找流水的主要实现模块,查找流水共有N+1级,其中LV_1至LV_N为树节点查找逻辑层,LV_N+1为结果表查找逻辑层。每一个查找逻辑层都对应了内存区中的一块独立内存空间,保证各层对内存区的访问不会相互冲突。下面对查找逻辑区的查找流程进行介绍,图4是根据本发明实施例的硬件查找流水的流程示意图,如图4所示,该流程包括以下步骤(步骤S401-步骤S410):
[0057]步骤S401,路由查找硬件模块收到输入的查找请求。
[0058]步骤S402,将查找键值信息和内存区中的根节点地址信息同时发送至第一级查找流水中。
[0059]步骤S403,在流水的逻辑中首先对根节点地址是否为本级节点进行判断,如果是本级节点,则向内存发起读节点请求,等待内存返回节点数据;如果不是本级节点,贝1J不向内存发起请求,保留当前节点信息不改变。
[0060]步骤S404,将获得的节点信息进行解析,并与键值进行比较。
[0061]步骤S405,如果未访问本级节点,则不需要进行解析比较,打拍等待即可。比较的结果如果存在命中,则将命中的路由条目对应的结果记录,覆盖之前命中的结果。
[0062]步骤S406,如果未访问本级节点,则不需要进行记录,打拍等待。如果进行了比较,则从比较结果中获取下一级应访问的节点地址记录在节点地址中;如果未访问本级节点,保留当前节点信息不改变。
[0063]步骤S407,查找流水携带键值信息、节点地址和命中结果进入下一级流水处理逻辑。
[0064]步骤S408,如果下一级流水不是最后一级,则过程与上述步骤S403-步骤S407流程相同,如果下一级流水是最后一级,则为访问结果表的处理逻辑。
[0065]步骤S409,在结果表流水级中,逻辑将根据命中结果(结果表条目地址)访问内存区的结果表,获得命中实际结果;如果未命中,则不访问结果表,输出未命中信息。
[0066]步骤S410,将命中的实际结果通过硬件接口返回,如果未命中,返回未命中信息。
[0067]下面通过具体实施例进行详细介绍。
[0068]本实施例包括对路由前缀的插入和删除流程的描述,假定B-Tree的阶数M为3,每个树节点中存在最多2组前缀和3个子节点指针。
[0069]图5是根据本发明实施例的路由前缀插入流程示意图,如图5所示,初始情况(501),路由表为空,在路由查找硬件模块的内存区中实际不存在任何前缀,图中使用了一个默认的空节点作为示意,处于查找流水的最底层LV_N。此时根节点地址寄存器可以指向默认空节点地址。
[0070]首先插入4-bit前缀1001,如502所示。该前缀被插入初始节点的第一个空位,标记前缀长度的Vector矢量的第4比特位为1,写为0001,表示前缀长度为4。同时将对应的结果存放在结果表地址Al中,并将Al保存在节点中。
[0071]接着插入前缀1000,如503所示。因为1000小于1001,所以该前缀被插入初始节点的第一个空位,标记前缀长度的Vector矢量为0001,同时将对应的结果存放在结果表地址A2中。
[0072]插入前缀1110,如504所示。因为此时节点满了,所以需要进行节点分裂,产生一个新的根节点和一个新的兄弟节点。新的根节点位于LV_N-1层,新的兄弟节点位于LV_N层。根节点中存放的是前缀1001/0001/A1,它的左子节点存放的是前缀1000/0001/A2,右子节点存放的是前缀1110/0001/A3。此时树结构上层一层,需要将根节点地址更新指向新的根节点(1001所在的节点)。
[0073]插入前缀10**,如505所示。因为10**是根节点中前缀1001的父前缀,我们采用的算法要保持父前缀合并在最上层的子前缀中,因此将10**在前缀1001的Vector上进行标记。因为10**前缀长度为2,因此标记1001的Vector的第2比特位为I,此时1001的Vector变为0101,同时表示了两种前缀长度(2和4)。将10**对应的结果也存放在Al地址中,此时Al地址中存在两个查找结果。
[0074]图6是根据本发明实施例的路由前缀删除流程示意图,如图6所示,以上述已经构建的最终插入结果为删除流程的初始状态(601)。
[0075]首先删除1000,如602所示。删除节点中的1000前缀和结果表中对应地址A2的结果内容。因为删除1000导致节点变空,需要进行节点合并操作。操作结果是LV_N-1层的根节点被删除,剩下LV_N层的一个节点作为根节点,其中依次存放的是前缀1001/0101/Al和1110/0001/A3。此时因为根节点发生改变,因此需要将根节点地址指向新的根节点。
[0076]接着删除1001,如603所示。将节点中的前缀1001删除,但由于该前缀中还保存在他的父前缀10**,因此不能将该前缀位置空出,而是将该前缀位置的前缀改写为1000,Vector改写为0100 (表示前缀长度为2的一个前缀),并将Al地址中1000对应的结果删除。
[0077]删除10#,如604所示。将节点中的前缀1000/0100/A1删除,并删除结果表Al地址的结果。将前缀1110/0001/A3移动到节点的第一个位置。
[0078]最后删除1110,如605所示。将节点中的前缀1110/0001/A3删除,并删除结果表A3地址的结果。此时路由表变为空。
[0079]本实施例中涉及的数据格式主要分为节点数据格式、结果表数据格式。节点数据中包括:键值、标记矢量、结果表地址、下一级指针四个部分。键值为路由表中的路由前缀;标记矢量为上述B-Tree算法中的标记同一前缀中不同前缀长度条目的标记矢量;结果表地址为本路由条目对应的查找结果在结果表的地址信息;下一级指针是经过本级查找后,下一级应访问的节点地址。
[0080]本实施例中涉及的硬件查找结构为自底向上生长的B-Tree树结构。首先根据实际路由表容量需求和延时需求定义出B-Tree的阶数M和B-Tree需要的最大高度N,按照最大高度设定相应的流水级数N+1 ;然后根据算法填充情况定义出每层树结构最大的节点数目需求,按照最大节点数目设定相应的内存空间;最后根据路由表实际容量需求设定结果表的内存空间。
[0081]所谓自底向上生长,就是B-Tree的动态插入过程中,首个节点分配在节点层的最底层LVn (209),同时由于首个节点为根节点,需要将根节点的地址写入根节点地址内存中
(207)。当更新路由条目过程中根节点发生改变时,需要软件同步更新根节点地址,保证查找流水正常工作。
[0082]基于上述分析,本发明提供了一种路由查找方法,图7是根据本发明实施例的路由查找方法的流程图,如图7所示,该流程包括以下步骤(步骤S702-步骤S704):
[0083]步骤S702,定义B-Tree树结构的阶数M和最大高度N、每层最大节点数目和结果表条目数,进而确定硬件相应的流水级数、每层节点占用空间和结果表占用空间,进而构建B-Tree树结构;
[0084]步骤S704,基于上述B-Tree树结构,执行路由查找操作。
[0085]基于上述分析,本发明提供了一种硬件查找结构为自底向上生长的B-Tree树结构的构建方法,图8是根据本发明实施例的硬件查找结构为自底向上生长的B-Tree树结构的构建方法的流程图,如图8所示,该流程包括以下步骤(步骤S802-步骤S804):
[0086]步骤S802,根据实际路由表容量需求和延时需求定义出B-Tree树结构的阶数M和B-Tree树结构所需要的最大高度N,按照上述最大高度N设定相应的流水级数N+1 ;
[0087]步骤S804,根据算法填充情况定义出B-Tree树结构的每层最大节点数目,按照上述每层最大节点数目设定相应的内存空间;根据路由表实际容量需求设定结果表的内存空间。
[0088]在本发明的技术方案中,路由查找装置包括路由查找算法软件模块、路由更新接口模块和路由查找硬件模块三部分。图9是根据本发明实施例的路由查找装置的运行示意图,如图9所示,路由查找算法软件模块完成对路由条目的软件计算和更新条目指令下发,路由更新接口模块在接收了更新条目指令之后,根据路由查找硬件模块的实际工作状态,控制路由查找硬件模块的数据流,并将更新条目写入路由查找硬件模块的存储器中,路由查找硬件模块为流水线型架构,响应硬件系统的路由查找请求,并返回最长前缀匹配的查找结果。
[0089]本发明的具体实施方法分为如下三步:第一步根据实际需求确定B-Tree的树结构阶数M、树结构高度N、每层节点的数目和结果表条目数,从而确定硬件相应的流水级数、每层节点占用空间和结果表占用空间。第二步根据第一步的框架来设计路由算法软件模块、路由更新接口模块和路由查找硬件模块。第三步为将将第二步完成的各模块根据实际应用场景组合成路由查找系统,并连接入路由转发系统中。
[0090]其中的路由查找算法软件模块可以运行在路由查找系统的主控CPU上,硬件相关模块(路由更新接口模块和路由查找硬件模块)可以在现场可编程门阵列(Field-Programmable Gate Array,简称为 FPGA)或(Applicat1n Specific IntegratedCircuit,简称为ASIC)芯片中实现,并通过实际应用场景中的硬件数据接口进行连接,例如路由转发系统中常用的Interlaken-Lookaside接口。软件模块和硬件模块之间的连接可以但不限于通过标准的LocalBus或PCIe接口进行连接。
[0091]从以上的描述中可以看出,本发明的技术方案从整体上设计了路由查找系统的软件算法模块、硬件数据结构、更新流程、查找流水结构和内存结构,能够满足大容量路由表的高性能查找需求,能够实现硬件流水操作,流水级数少,并且容量对路由前缀分布不敏感。
[0092]尽管为示例目的,已经公开了本发明的优选实施例,本领域的技术人员将意识到各种改进、增加和取代也是可能的,因此,本发明的范围应当不限于上述实施例。
【权利要求】
1.一种路由查找装置,其特征在于,所述装置包括:路由查找算法软件模块、路由更新接口模块和路由查找硬件模块,其中, 路由查找算法软件模块,用于执行对路由条目的软件计算和更新条目指令的下发;路由更新接口模块,用于在接收到所述路由查找算法软件模块下发的更新条目指令后,根据路由查找硬件模块的实际工作状态,控制所述路由查找硬件模块的数据流,并将更新条目写入所述路由查找硬件模块的存储器中; 路由查找硬件模块,用于响应硬件系统的路由查找请求,并将最长前缀匹配的查找结果返回至所述硬件系统;其中,所述路由查找硬件模块为流水线型架构。
2.如权利要求1所述的装置,其特征在于,所述路由查找算法软件模块包括: 插入操作子模块,用于响应路由转发系统的路由插入指令,并将所述路由条目插入到B-Tree树结构中; 删除操作子模块,用于响应所述路由转发系统的路由删除指令,并将所述路由条目在所述B-Tree树结构中删除; 软件表项内存管理子模块,用于对路由查找算法中的节点数据和结果表条目数据进行管理; 更新硬件操作子模块,用于将在所述插入操作子模块的插入操作或所述删除操作子模块的删除操作中涉及到改变的B-Tree树节点和结果表条目记录在缓存中,并在插入操作或删除操作结束后,将树节点从软件数据格式转换成硬件数据格式,并将转换后的硬件数据和对应的硬件映射地址通过软硬件交互接口连续写入所述路由更新接口模块中。
3.如权利要求1所述的装置,其特征在于,所述路由查找硬件模块包括: 查找逻辑子模块,用于在接收到所述硬件系统的路由查找请求后,将查找键值信息和内存子模块中的根节点地址信息发送至树结构的第一级查找流水中;然后判断所述根节点地址是否为本级节点;如果是,则向所述内存子模块发起读节点请求,等待所述内存子模块返回节点信息;如果不是,则保留当前节点信息不变;还用于根据比较所述节点信息与键值,判断路由条目是否命中;如果命中,则将命中的路由条目对应的结果记录替代之前的命中结果; 内存子模块,包括多个独立内存空间,分别与所述树结构的每个查找逻辑层相对应。
4.如权利要求3所述的装置,其特征在于,所述路由更新接口模块包括: 缓存子模块,用于通过所述软硬件交互接口接收节点数据和结果表条目数据以及对应的硬件映射地址; 逻辑处理子模块,用于根据所述路由查找硬件模块的所述查找逻辑子模块的工作状态,将所述缓存子模块的条目更新内容更新至所述路由查找硬件模块的所述内存子模块中。
5.如权利要求2所述的装置,其特征在于,所述插入操作子模块包括: 树结构管理单元,用于对新条目在所述B-Tree树结构中的访问顺序进行控制; 节点解析及比较单元,用于与所述树结构管理单元共同控制新条目在所述B-Tree树结构中的有序查询,并找到插入位置; 节点分裂操作单元,用于在新条目需要插入到已满节点时,对该已满节点进行分裂操作; 结果表更新单元,用于将新条目携带的结果信息存入结果表,并将该结果信息的地址记录在所述新条目所在节点的对应位置中。
6.如权利要求2所述的装置,其特征在于,所述软件表项内存管理子模块包括: 软件节点管理单元,用于管理路由查找算法中的节点分配,通过内存管理算法迅速分配和管理软件节点; 软件结果表管理单元,用于管理路由查找算法中的结果表的条目地址分配,通过内存管理算法快速分配和管理结果表; 硬件地址映射管理单元,用于将硬件的实际内存空间进行软件地址映射,通过软件的内存管理算法管理硬件节点和结果表;其中,软件节点与硬件节点一一对应,软件结果表与硬件结果表一一对应。
7.—种路由查找方法,其特征在于,包括: 定义B-Tree树结构的阶数M和最大高度N、每层最大节点数目和结果表条目数,进而确定硬件相应的流水级数、每层节点占用空间和结果表占用空间,进而构建B-Tree树结构; 基于所述B-Tree树结构,执行路由查找操作。
8.一种硬件查找结构为自底向上生长的B-Tree树结构的构建方法,其特征在于,所述方法包括: 根据实际路由表容量需求和延时需求定义出B-Tree树结构的阶数M和B-Tree树结构所需要的最大高度N,按照所述最大高度N设定相应的流水级数N+1 ; 根据算法填充情况定义出B-Tree树结构的每层最大节点数目,按照所述每层最大节点数目设定相应的内存空间;根据路由表实际容量需求设定结果表的内存空间。
【文档编号】H04L12/741GK104426770SQ201310408340
【公开日】2015年3月18日 申请日期:2013年9月9日 优先权日:2013年9月9日
【发明者】程晨, 李彧, 张炜, 徐宝魁, 陈伟, 孙远航 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1