基于硬件实现的快速路由更新电路结构及更新方法与流程

文档序号:23426227发布日期:2020-12-25 11:56阅读:130来源:国知局
基于硬件实现的快速路由更新电路结构及更新方法与流程

本发明涉及电子电路技术领域,特别是一种基于硬件实现的快速路由更新电路结构。



背景技术:

目前路由查找算法方案主要分为两种,一种为基于软件的方案另一种为基于硬件的方案。基于软件的方案通常不依赖于特定的硬件因此灵活性较高方便移植到不同平台上。大多数基于软件的方法都集中在减少内存需求和减少内存访问次数上。基于硬件的方案则利用专用硬件(包括tcam,网络处理器,fpga和gpu)来实现更好的性能。

为发挥专用硬件高速并行的优势,基于硬件的方案常通过使用可控前缀扩展技术限制前缀长度的数量,以此形成支持并行查找的转发数据结构。例如dir24-8,该方案通过前缀扩展将前缀长度限制为24和32,以此达到单次查找最高2次内存访问的目的。虽然基于专用硬件的方案可以达到上百g的吞吐率,但是这些方案需要cpu协助维护基于trie树的数据结构,用于将所有路由前缀更新和扩展为存储在硬件中的转发数据结构然而是trie树结构复杂在trie树中进行插入和删除操作需要占用大量时钟周期,随着路由更新频率的不断提高路由更新给cpu造成较大负荷。



技术实现要素:

本发明的目的在于提供一种可以提高路由更新速度,降低路由更新对cpu时钟周期占用的基于硬件实现的快速路由更新电路结构。

1.实现本发明的技术解决方案为:一种基于硬件实现的快速路由更新电路结构,其特征在于包括链表管理模块、头指针管理模块、共享存储区管理模块、结构转换模块;

所述链表管理模块用于管理转换为链表结构的trie树,记录trie树中子trie的具体结构,对trie树执行节点插入和删除操作,更新完成后将涉及操作的前缀及前缀携带的信息写入prefix_fifo;

所述头指针管理模块用于管理链表结构中的链表头指针,执行链表管理模块发出的查找、插入和删除操作;

所述共享存储区管理模块用于管理共享存储区中的可用空地址,执行链表管理模块发出的获得空地址、回写空地址操作;

所述结构转换模块用于将链表转换为查找设备使用的转发表。

2.根据权利要求1所述的基于硬件实现的快速路由更新电路结构,其特征在于,上述链表管理模块包括插入操作子模块、删除操作子模块、prefix-fifo;

所述插入操作子模块用于响应路由更新系统的插入命令,并将涉及的前缀条目插入到链表结构中;

所述删除操作子模块用于响应路由更新系统的删除命令,并将涉及的前缀条目在链表结构中删除;

所述prefix_fifo缓存了结构转换模块需要的涉及操作的前缀的信息。

优选的是,本发明的头指针管理模块包括head_ptr_reg和head_ptr_ram_2~head_ptr_ram_n,其中n的数值由trie树被切分的层数决定;

所述head_ptr_reg为寄存器,用于存储第1层链表的头指针;

所述head_ptr_ram_2~head_ptr_ram_n用于存储第2~第n层链表的头指针。

优选的是,本发明的共享存储区管理模块包括shared_ram和free_addr_fifo;

所述shared_ram用于存储所有链表的节点;

所述free_addr_fifo用于存储shared_ram中的可用空地址,插入节点前链表管理模块从中读出空地址,删除节点后链表管理模块将节点的地址写入其中,以此来对shared_ram的可用空间进行管理。

本发明还提供了一种路由更新方式,其中该方式包括:使用硬件维护了基于trie树的链表,链表中包含路由表完整的拓扑关系;以链表为辅助结构,使用硬件完成从链表结构到转发数据结构的转换。

本发明基于链表结构的trie树构建方法包括:根据转发结构的需求定义trie结构的层数,和每层子trie的高度,按照所述层数设定相应头指针索引表的数量;每层中的子trie使用链表结构进行存储。

本发明与现有技术相比,其显著优点为:(1)使用硬件加速了从路由表到转发表的构建与更新。(2)降低了路由更新对cpu时钟周期的占用。(3)采用链表结构存储trie树降低了逻辑复杂性。(4)使用共享存储的方式存储链表结构有效提升了内存利用率。

附图说明

图1为本发明基于硬件实现的快速路由更新电路结构框图。

图2为本发明中可全硬件实现的路由更新结构及方式插入流程示意图。

图3为本发明中可全硬件实现的路由更新结构及方式删除流程示意图。

具体实施方式

下面结合附图对本发明作进一步说明。

如图1所示,本发明基于硬件实现的快速路由更新电路结构,包括链表管理模块、头指针管理模块、共享存储区管理模块、结构转换模块;

所述链表管理模块用于管理转换为链表结构的trie树,记录trie中子trie的具体结构,可对trie执行节点插入和删除操作,更新完成后将涉及操作的前缀及前缀携带的信息写入prefix_fifo;

所述头指针管理模块用于管理链表结构中的链表头指针,执行链表管理模块发出的查找,添加,删除操作;

所述共享存储区管理模块用于管理共享存储区中的可用空地址,执行链表管理模块发出的获得空地址,回写空地址操作;

结构转换模块用于将链表转换为查找设备使用的数据结构。

进一步的,所述链表管理模块包括插入操作子模块,删除操作子模块和prefix-fifo;

所述插入操作子模块用于响应路由更新系统的插入命令,并将涉及的前缀条目插入到链表结构中;

所述删除操作子模块用于响应路由更新系统的删除命令,并将涉及的前缀条目在分层链表结构中删除;

所述prefix_fifo缓存了结构转换模块需要的涉及操作的前缀的信息。

进一步的,所述头指针管理模块包括head_ptr_reg和head_ptr_ram_2~head_ptr_ram_n,其中n的数值由trie树被切分的层数决定;

所述head_ptr_reg为寄存器,用于存储第1层链表的头指针;

所述head_ptr_ram_2~head_ptr_ram_n用于存储第2~第n层链表的头指针。

进一步的,所述共享存储区管理模块包括shared_ram和free_addr_fifo;

所述shared_ram用于存储所有链表节点;

所述free_addr_fifo用于存储shared_ram中的可用空地址,插入节点前链表管理模块从中读出空地址,删除节点后链表管理模块将节点的地址写入其中,以此来对shared_ram的可用空间进行管理。

一种实现快速路由更新的方式,包括以下步骤:

步骤1、插入操作子模块进行前缀插入流程操作;

步骤2、删除操作子模块进行前缀删除流程操作;

结合图2,步骤1所述的插入操作子模块进行数据插入流程操作,具体如下:

步骤1.1、链表管理模块接收来自外部的插入请求,插入请求中包含有前缀,前缀长度和出端口位图信息;

步骤1.2、插入操作子模块判断前缀所在层数,通过头指针管理模块访问对应的ram并找到指向链表的头指针;对应图2中的流程①;

步骤1.3、插入操作子模块向free_addr_fifo发出读取请求获得一个地址,然后按照步骤1.2中头指针的指向从首节点开始读取后级节点,按前缀长度从首节点到尾节点从短到长的规则将新节点插入相应的位置。如果新节点为新的首节点还要将链表头指针更新为新节点的地址;对应图2中的流程②;

步骤1.4、前缀成功插入到链表后,将前缀信息写入到prefix_fifo内等待结构转换模块将其读出并转换为查找设备使用的数据结构;对应图2中的流程③。

结合图3,步骤2所述的删除操作子模块进行数据删除流程操作,具体如下:

步骤2.1、链表管理模块接收来自外部的删除请求,删除请求中包含有前缀和前缀长度信息;

步骤2.2、删除操作子模块判断前缀所在层数,通过头指针管理模块访问对应的head_ptr_ram或者head_ptr_reg并找到指向链表的头指针;对应图3中的流程①;

步骤2.3、删除操作子模块从头指针指向的位置开始顺序读取后级节点,直到找到需要删除的节点。将与其连接的前节点和后节点连接在一起并将该节点占用的地址写回free_addr_fifo,如果该节点为首节点那么通过头指针管理模块将后级节点的地址设为指向该链表的头指针;对应图3中的流程②;

步骤2.4、前缀在trie结构中删除后,将前缀信息写入到prefix_fifo内等待结构转换模块将其读出并转换为转发数据结构;对应图3中的流程③。

综上所述,本发明首先由硬件对转发数据结构的构建与更新进行了加速,降低了路由更新对cpu时钟周期的占用。然后,采用链表结构存储trie结构降低了逻辑复杂性。最后,使用共享存储的方式存储trie结构有效提升了内存利用率。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1