CN113660160B - 一种ucmp负载分担的方法和装置 - Google Patents

一种ucmp负载分担的方法和装置 Download PDF

Info

Publication number
CN113660160B
CN113660160B CN202110958837.7A CN202110958837A CN113660160B CN 113660160 B CN113660160 B CN 113660160B CN 202110958837 A CN202110958837 A CN 202110958837A CN 113660160 B CN113660160 B CN 113660160B
Authority
CN
China
Prior art keywords
offset
load sharing
address
members
offset address
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
CN202110958837.7A
Other languages
English (en)
Other versions
CN113660160A (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.)
Fiberhome Telecommunication Technologies Co Ltd
Original Assignee
Fiberhome Telecommunication Technologies 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 Fiberhome Telecommunication Technologies Co Ltd filed Critical Fiberhome Telecommunication Technologies Co Ltd
Priority to CN202110958837.7A priority Critical patent/CN113660160B/zh
Publication of CN113660160A publication Critical patent/CN113660160A/zh
Application granted granted Critical
Publication of CN113660160B publication Critical patent/CN113660160B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/24Multipath
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9014Indexing; Data structures therefor; Storage structures hash tables
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/12Avoiding congestion; Recovering from congestion
    • H04L47/125Avoiding congestion; Recovering from congestion by balancing the load, e.g. traffic engineering

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明涉及通信领域,特别是涉及一种UCMP负载分担的方法和装置。主要包括:将保护组中每个成员的成员id分解为所有成员共用的基址和每个成员的偏移地址;根据每个端口对应的链路带宽获取每个成员的权重,根据相应权重将每个成员对应的偏移地址写入成员表;由成员表获取需转发报文的成员对应的偏移地址,将基址和偏移地址组合为成员id。本发明实现了高精度的ECMP/UCMP负载分担,提高提升了UCMP/ECMP负载分担的流量精度。

Description

一种UCMP负载分担的方法和装置
【技术领域】
本发明涉及通信领域,特别是涉及一种UCMP负载分担的方法和装置。
【背景技术】
在网络通信中,到达同一个目的IP或者目的网段存在多条度量值相等的不同路由路径,这些路由路径称为等价路由。在进行报文转发时,由于存在等价路由,因此每个报文存在多个向外转发的端口,每个端口的地址在转发成员表中称为成员,端口中同时存在高速链路和低速链路。目前,在多端口转发时,负载分担模式是等价多路径(Equal CostMultiple Path,简写为ECMP)负载分担,即当目的地有多条负载分担路径可达时,流量不考虑链路带宽的差异,会在这些负载分担路径上进行平分。当不同路径带宽差异比较大时,可能出现低速路径流量阻塞的问题,不能有效的利用高速链路的带宽。为了使各链路带宽得到充分合理的利用,需要所有链路能够根据带宽不同分担不同比例的流量,采用非等价多路径(Unequal Cost Multi-Path,简写为UCMP)的负载分担模式,实现根据带宽的比例进行流量的分配。
目前,等价路由的实际使用中,为了实现报文不乱序且便于流量分配,将每个成员按照能够承担的流量进行均分后,按照每个成员负担的流量计算每个成员id需要出现的记录项数量,将对应数量的成员id写入成员表中,每个成员表中的所有成员称为一个保护组(GROUP)。在进行成员的流量划分时,UCMP和ECMP一样,采用HASH算法进行负载分担或者按权重分担,带宽大的高速链路权重较大,带宽小的低速链路权重较小。由于成员表中的每个成员负担同样的流量,ECMP各成员权重一致,每个成员在成员表出现的次数一致;UCMP各成员带宽不一致,则权重不一致,每个成员出现在成员表中的次数不一致,权重大的成员出现的次数多,权重小的成员出现的次数少,每个成员在成员表中出现的次数与该成员的权重在整个权重和的占比正相关。另一方面,负载分担时,流量均分的数量越多,流量精度就越高,因此每个成员表所能的流量精度和每个成员表里的成员个数相关,成员数量越多每个成员均分的流量精度越大,但占用太多的存贮资源;成员数量越少占用空间越小,但流量精度的均分较为粗糙。为了提升流量精度,现有技术中使用了直接增加成员数量、按照权重不均匀分配、多层索引等方式,但是,上述方式增加了总的存储空间或增加了转发时的计算复杂度,都存在一定缺陷。
鉴于此,如何克服现有技术所存在的缺陷,解决现有成员表存储方式中存储空间和流量精度矛盾的现象,是本技术领域待解决的问题。
【发明内容】
针对现有技术的以上缺陷或改进需求,本发明解决了现有存储方式下流量精度较低的问题。
本发明实施例采用如下技术方案:
第一方面,本发明提供了一种UCMP负载分担的方法,具体包括:
将保护组中每个成员的成员id分解为所有成员共用的基址和每个成员的偏移地址;
根据每个端口对应的链路带宽获取每个成员的权重,根据相应权重将每个成员对应的偏移地址写入成员表;
由成员表获取需转发报文的成员对应的偏移地址,将基址和偏移地址组合为成员id。
优选的,所述根据相应权重将每个成员对应的偏移地址写入成员表,具体包括:
根据每个成员权重的比例计算每个成员在成员表中出现的次数;
按照每个成员在成员表中出现的次数,将成员对应的偏移地址写入成员表。
优选的,所述根据每个成员权重的比例计算每个成员在成员表中出现的次数,具体包括:每个成员在成员表中出现的次数占成员表中所有成员出现总次数的比例,与每个成员权重的比例相对应。
优选的,具体包括:所述所有成员出现总次数,根据每个成员的偏移地址所占的存储空间大小和转发硬件内部的存储空间大小决定。
优选的,还包括:每个成员的偏移地址所占的存储空间大小大于等于每个成员的偏移地址的数据存储大小。
优选的,所述将成员对应的偏移地址写入成员表,具体包括:按照成员权重由小到大排序,根据每个成员在成员表中出现的次数,依次在成员表中将成员的偏移地址写入相应次数。
优选的,所述由成员表获取需转发报文的成员id,具体包括:
根据报文的属性计算报文的HASH值;
根据报文的HASH值,获取用于转发的端口所对应成员在成员表中的位置;
获取相应位置对应的成员的偏移地址,根据所述所有成员共用的基址和相应成员的偏移地址获取成员id。
优选的,还包括:每个保护组中的所述基址在未释放前其它保护组不能使用。
优选的,所述根据每个端口对应的链路带宽获取每个成员的权重,具体包括:根据每个端口对应的链路带宽,计算每个成员对应的等价或非等价权重,其中,每个成员的权重与链路带宽正相关。
另一方面,本发明提供了一种UCMP负载分担的装置,具体为:包括至少一个处理器和存储器,至少一个处理器和存储器之间通过数据总线连接,存储器存储能被至少一个处理器执行的指令,指令在被处理器执行后,用于完成第一方面中的UCMP负载分担的方法。
与现有技术相比,本发明实施例的有益效果在于:在既有的网络处理器单元(Neural-network Processing Unit,简写为NPU)或专用集成电路(Application SpecificIntegrated Circuit,简写为ASIC)存储空间里,通过管理和分配密集的成员,将保护组中每个成员的ID分为基址和偏移地址两部分进行存储,对成员偏移按照等价或者非等价权重进行散列并存贮,供NPU/ASIC HASH报文后使用,减小每个成员在成员表中占用的存储空间大小,在原有的存贮空间里,将流量均分为更多部分,实现了高精度的ECMP/UCMP负载分担,提高提升了UCMP/ECMP负载分担的流量精度。
【附图说明】
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种UCMP负载分担的方法现有技术中存储方式示意图;
图2为本发明实施例提供的一种UCMP负载分担的方法流程图;
图3为本发明实施例提供的另一种UCMP负载分担的方法流程图;
图4为本发明实施例提供的另一种UCMP负载分担的方法流程图;
图5为本发明实施例提供的一种UCMP负载分担的方法的存储结构示意图;
图6为本发明实施例提供的另一种UCMP负载分担的方法的存储结构示意图;
图7为本发明实施例提供的一种UCMP负载分担的装置结构示意图。
【具体实施方式】
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
本发明是一种特定功能系统的体系结构,因此在具体实施例中主要说明各结构模组的功能逻辑关系,并不对具体软件和硬件实施方式做限定。
此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。下面就参考附图和实施例结合来详细说明本发明。
实施例1:
现有技术中,采用直接索引技术对成员地址进行存储,一组用户转发的端口成员保存在一段连续的存储空间内,该存储空间称为成员表,成员表中的每个记录项存储地址相对于成员表的基址连续,成员表的保护组id与成员表存储空间的基址相关,该地址仅表示成员表本身的存储地址,与成员表中每个成员对应端口的地址无关。存储在成员表中的成员地址称为成员id。例如,如图1中成员表,表格中保存了一个保护组的所有成员,每一格存放一个成员id,成员id代表了该成员对应的端口的直接索引地址,依照硬件的存储空间容量,保护组中共16个成员,为每个成员分配的存储空间为32bit,在进行负载分配时,每个成员负担的流量精度为总流量的1/16。由图中可见,成员表中成员个数少,精度粗糙,且成员id无规律,分布稀松,浪费存贮空间。为了提高存储的成员数量,提升流量精度,本实施例提供的方法在既有的NPU/ASIC存储空间里,通过管理和分配密集的成员,把成员id分解为基址加偏移的方式,减少每个成员偏移占用的存贮空间,对成员偏移按照等价或者非等价权重进行散列并存贮,供NPU/ASIC对报文属性HASH后使用,实现既有的存贮空间,高精度的ECMP/UCMP负载分担。
如图2所示,本发明实施例提供的UCMP负载分担的方法具体步骤如下:
步骤101:将保护组中每个成员的成员id分解为所有成员共用的基址和每个成员的偏移地址。
为了减少每个成员占用的空间,本方案不直接在成员表中保存成员的完整成员id,而将每个成员的成员id分解为基址和偏移地址,在成员表中仅保存偏移地址。其中,基址为所有成员转发端口的共同基址,即用于转发的所有端口的共同索引地址的基址;偏移地址为每个成员相对于所有成员共同基址的偏移地址。由于偏移地址相对于完整的成员id所占的存储空间较小,因此,在同样存储容量的成员表空间中,能够存储更多的成员数量,将流量分担划分为更多份,从而提高流量精度。
在本实施例中,每个保护组id都与保护组成员表存储位置的基址相关,为了确保不同保护组的地址不会互相冲突,每个保护组id需要确保唯一,不能互相重复,还可以在为每保护组分配基址后设置占用标记,每个保护组中的基址在未释放前其它保护组不能使用;在保护组使用的基址释放后,其他保护组才可以使用释放后的基址。
为了确保成员表中的成员地址密集,便于控制面进行管理和分配,每个保护组中所有成员的成员id需要以基址为起始地址连续分配,即所有成员的成员id为以共用基址开始的连续地址。成员id为连续的情况下,成员的偏移地址也连续,例如:有8个成员的场景下,成员偏移地址为0-7,仅需3bit即可进行存储,小于图1的现有存储方式中每个成员16bit的占用空间,因此同样大小的存储空间中可以保存更多的偏移地址。同样的,为了避免不同保护组中的成员id互相冲突,为每个成员分配成员id后,也需要设置占用标记,在为释放前其,其他保护组不能使用某个保护组中已分配的成员id,其他保护组中的成员需要被分不同的8个成员id;已分配的成员id释放后,其它保护组才可以使用释放后的成员id。
通过上述拆分方式,减少了每个成员在成员表中占用的存储空间大小,提高了同样存储容量下的成员数量,从而提高了流量精度。
步骤102:根据每个端口对应的链路带宽获取每个成员的权重,根据相应权重将每个成员对应的偏移地址写入成员表。
在UCMP的负载分担方式下,不同端口的链路带宽不同,因此对应成员的权重不同,需要根据每个端口对应的链路带宽,计算每个成员对应的等价或非等价权重。在具体实施中,可以根据带宽比例等直接进行量化计算,或根据实际场景的应用需要进行人工指定,使用这两种方式都需要确保权重和链路带宽正相关。不同权重的成员所需要分担的流量不同,权重高的成员分配的流量多,权重小的成员分配的流量少。在进行复杂分担时,通常采用HASH算法进行负载分担或者按权重分担在进行HASH分担时,成员表中每个记录项命中的概率均等。为了确保不同端口根据各自的权重进行流量分配,需要根据权重安排每个成员在成员表中的出现次数,权重大的成员出现次数多,命中概率较大;权重小的成员出现次数少,命中概率较小。
具体的,如图3所示,可以使用以下方式根据相应权重将每个成员对应的偏移地址写入成员表。
步骤201:根据每个成员权重的比例计算每个成员在成员表中出现的次数。
为了确保成员出现的次数与权重相对应,可以根据权重的比例对每个成员在成员表中出现的次数进行计算,每个成员在成员表中出现的次数占成员表中所有成员出现总次数的比例,与每个成员权重的比例相对应。每个成员的权重越大,出现成员表中的次数越多;权重越小,出现在成员表中的次数越少。进行转发时,报文经过HASH算法,得到的HASH值在成员表记录项范围之内,而且是均匀分布,因此可以通过HASH值均匀命中成员表中的成员id进行转发端口分配,成员出现的次数越多,表示有更多的报文从这个成员端口转出,符合UCMP的预期。
在具体实施中,所有成员出现总次数,根据每个成员的偏移地址所占的存储空间大小和转发硬件内部的存储空间大小决定。由软件和硬件同时协商确认的可实现的大小,即根据NPU/ASIC硬件存储空间的大小,及控制面管理软件的协议和寻址方式,决定每个表里所有成员的总次数,即成员表总的记录项数量,再根据总次数和各成员的出现次数比例计算每个成员的出现次数。在现有技术中,NPU/ASIC硬件一般固定为16个地址段为一个GROUP,每个地址段保存一个成员id,因此成员表中能够存储的记录项通常为16个。在本实施例中,由于每个成员的存储空间减小,因此每个地址段中能够保存多个成员偏移地址,因此,能够在同样大小的存储空间中保存更多的记录项。
每个成员在成员表中具体占用的存储空间大小可以根据成员偏移地址的数据存储大小设定,为了确保存储空间足够,每个成员的偏移地址所占的存储空间大小大于等于每个成员的偏移地址的数据存储大小。例如,当成员数量为8时,偏移地址为0-7,每个成员至少使用3个bit进行存储。在某些场景中,为了便于适应后续端口数量增加时出现的成员数量增加,还可以预留1bit,每个成员使用4bit进行存储,将可接受的端口成员数量扩展至16个,提高系统的可扩展性。
具体的,在某个具体实施场景中,有3个成员的权重分别为a,b,c,每个成员的权重占比分别为:a/(a+b+c)、b/(a+b+c)、c/(a+b+c),当成员表存储空间能够存储n个记录项时,每个成员出现的次数分别n*a/(a+b+c)。进行计算后,假定a的权重占比为0.1。根据图1的现有技术,8个成员共16个记录项,每个成员占32bit,共256bit,a出现的次数计算结果为16*0.1=1.6次,取整得到2次,流量分配误差为(2-1.6)/16=2.5%;根据本实施例的存储方法,8个成员,每个成员占3bit即可存储所有成员的偏移地址,同样的存储空间可以存储85个记录项,成员a出现的次数计算结果为85*0.1=8.5,取整得到9次,流量分配误差(9-8.5)/85=0.5%;进一步的,在成员存储空间扩展后,每个成员占4bit的场景中,同样的存储空间可以存储64个记录项,成员a的出现次数计算结算为64*0.1=6.4,取整得6次,流量分配误差(6.4-6)/64=0.6%。由计算结果可见,使用本实施例中的分配方法,可以减少流量分配误差,提高转发时的流量精度,提高不同端口间的负载平衡,避免某个端口分配流量过多或流量空闲过多。
步骤202:按照每个成员在成员表中出现的次数,将成员对应的偏移地址写入成员表。
获取到每个成员的偏移地址和每个成员在成员表中的出现次数后,即可按照出现次数将每个成员的偏移地址写入成员表。具体的,为了便于进行写入操作,可以按照成员权重由小到大排序,根据每个成员在成员表中出现的次数,依次遍历每个成员,在成员表中将成员的偏移地址写入相应次数。按照成员权重由小到大排序,便于小带宽小权重的链路也能分担到流量。
通过步骤201-步骤202,可以将成员id偏移地址按照权重分布写入成员表中,便于后续转发时使用。
步骤103:由成员表获取需转发报文的成员对应的偏移地址,将基址和偏移地址组合为成员id。
本实施例提供的方法,将成员id拆分为基址和偏移地址进行存储,但拆分后的基址和偏移地址无法直接供转发使用。进行报文转发时,还需要获取用于转发的成员对应的偏移地址,将基址和偏移地址组合为成员id,再根据成员id进行转发。
UCMP中,采用HASH算法进行负载分担或者按权重分担,在本实施例提供的方法中,也根据同样原理,使用HASH算法获取用于转发的成员对应的偏移地址。具体的,如图4所示,可以使用以下步骤获取需转发报文的成员id。
步骤301:根据报文的属性计算报文的HASH值。
使用NPU或者ASIC从入口接收到报文后,根据报文的二层或三层属性计算报文的HASH值,其中,二层报文使用目的MAC地址和源MAC地址的值,三层报文使用目的IP和源IP的值。
步骤302:根据报文的HASH值,获取用于转发的端口所对应成员在成员表中的位置。
获取到HASH值后,对于一维结构进行存储的成员表,可以将HASH值取成员数的模,直接获取到HASH值对应的成员在成员表中的位置;对于二维结构进行存储的成员表,取模后还需要进一步根据每行的成员数计算行号和列号;对于其它方式进行存储的成员表,根据实际的数据结构进行相应计算。由于HASH值在一定范围内均匀分布,因此取模后的位置值也在整个成员表中均匀分布,符合UCMP的预期。在本实施例中,由于成员表连续存储,且保护组id与成员表存储位置的起始地址相关,因此每个成员对应的记录项在成员表中的位置相当于该记录项相对于保护组id所代表的基址的偏移地址。具体的,在某个具体场景中中,每个偏移地址存储空间为4bit的情况下,保护组id需要为每个记录项存储地址的偏移地址保留4bit,因此,根据保护组id计算成员表基址时,需要左移4个bit,即保护组id*16=成员表基址。
步骤303:获取相应位置对应的成员的偏移地址,根据所有成员共用的基址和相应成员的偏移地址获取成员id。
通过保护组id和位置对成员所在的记录项数据获取到记录项的实际存储位置后,可以由相应记录项中获取到相应成员的偏移地址,即为用于转发的端口成员的偏移地址。再将所有成员共用的基址与偏移地址进行合并,获取的地址值即为对应的成员id,例如:所有成员共用的基址为OxA000,成员的偏移地址为Ox2,对应的成员id为OxA002。获取到成员id后,通过控制面进行下发,由NPU/ASIC读取,即可根据成员id所对应的端口地址进行报文转发。
通过步骤301-步骤303,可以根据报文的属性获取到对应成员的偏移地址,并根据基址和偏移地址完成成员id的获取和使用。在本实施例中,未改变成员表的基本存储结构和报文转发的基本流程,因此不会影响报文的转发效率。同时,只需要稍微修改HASH计算方式和成员表的查表方式可与现有系统进行兼容,安装部署简便。
经过本实施例中提供的步骤101-步骤103后,即可在存储空间一定的情况下,对成员表存储空间进行细分,使存储空间利用率更高,负载分担时的流量精度更高。
本实施例提供的方法在既有的NPU/ASIC存储空间里,对成员地址进行密集管理和分配,把成员id分解为基址加偏移地址,对成员偏移地址按照等价或者非等价权重进行散列并存贮,供NPU/ASIC对报文属性进行HASH后使用。每个成员的偏移地址比完整成员id占用的空间小,因此在相同的存储空间内可以存放更多的成员偏移地址的记录项,每个成员偏移地址的记录项所对应的流量精度在计算出现次数时的误差更小,实现了高精度的ECMP/UCMP负载分担。
实施例2:
基于实施例1提供的UCMP负载分担的方法,本实施例中提供了在具体应用场景中实施的一个实例。
srv6_path表是NPU内部的一个硬件表项,包含字段:保护类型、保护组id、成员共同基址(base_id)等。srv6_member表也是NPU内部的一个硬件表项,保存保护组中所有成员的成员id,srv6_member中各成员的偏移地址基于srv6_path表中的base_id值进行偏移,由通用CPU对表项进行读写,更新,删除,主要是PCIE通道。专用NPU或ASIC处理器读取上述表项的数据,用于指导NPU内部的报文转发逻辑。
在控制面的管理软件中,定义保护组类型字段、保护组id字段和成员共同基址(base_id)字段,并将每个字段相应的值写入对应的NPU内部表项srv6_path表的对应字段。控制软件同时负责保护组id以及成员id的分配和释放,srv6_path表和srv6_member表的新建,更新和删除。
在某个具体实施场景中,基于现有的存储空间设定,每个UCMP保护组的成员表srv6_member的存储空间包含16个地址段,每个地址段32bit,共256bit。
根据步骤101,为该保护组分配保护组id,为成员分配连续8个成员id,所有成员的共同基址为base_id,每个成员相对于base_id的偏移地址分别为0-7,并根据链路带宽分配各自的权重。控制软件把UCMP保护组类型,保护组id,成员共同基址base_id写入srv6_path表。具体实施中,每个成员的偏移地址与成员分配顺序相关。进一步的,根据具体使用的成员数量,分配的偏移地址可以全部被使用,也可以仅使用一部分。
根据步骤102,为了便于寻址,控制软件和硬件相结合,把srv6_member表设计成如图5的16行8列的矩阵结构,每行对应现有技术中的一个地址段为32bit,将每个地址段按照4bit进行划分,划分后的每一格保存一个成员偏移地址的记录项。相对于现有技术每个地址段存储一个成员id的方式,使用本实施例的存储方式,每个地址段可以存放8个成员偏移地址,相当于将成员表中能存放的记录项数量扩大了8倍。在实际使用中,可以对流量负载进行8倍细分,提高了分担的精度。根据步骤201中的计算结果,在相同的存储空间条件下,本实施例中0.6%的流量分配误差,小于现有技术中2.5%的流量分配误差。
对成员表的存储空间进行分配后,控制软件根据各成员的权重,根据每个成员权重占整个保护组成员权重和的比例,乘以srv6_member表里格子的数目,计算该权重占权重和的比例,得到该成员在srv6_member表里的次数,并按照该次数,把各成员的偏移地址都写入srv6_member表中。各成员按照出现从小到大排列,依次写入次数对应的个数,写入结果如图6所示。每个成员的偏移地址出现在srv6_member表格子的次数,表示占比越大;次数越小,占比越小。
将用于转发的成员偏移地址记录项写入成员表后,根据步骤103,NPU或者ASIC从入口接收到报文后,根据报文的二三层属性,计算报文的HASH值,其中:二层报文使用目的MAC地址和源MAC地址的值,三层报文使用目的IP和源IP的值,对这些属性的HASH值取成员表中的记录项总数128的模后,得到的计算结果值K在0-127之间,确保得到的计算结果值K不超过成员表的记录项数,每个计算结果值K都能够对应成员表中的一个记录项。根据HASH算法的特性,计算结果值K在区间内均匀分布,由于在成员表中权重大的成员偏移地址出现的次数越多,计算结果值K对应该偏移地址的概率越大,有更多的报文从这个成员端口出去,符合UCMP的预期。
进一步的,当srv6_member使用二维数据结构进行存储时,为了便于查找对应的记录项,还需要将计算结值转换为相应的行号和列号。具体的,当每行中有n列时,K/n=i,K%n=j,i指示srv6_member的行号,j指示srv6_member的列号,其中,行号和列号的计数都由0起始。例如:计算结果值K=53时,表示用于该报文转发的成员偏移地址位于成员表中5行3列,即二维数据结构中的srv6_member[i][j],该二维数组的基址根据保护组id进行计算,根据图6表格中数值,成员偏移地址为Ox0005。
NPU或ASIC取得成员的偏移地址后,将偏移地址和所有成员的共同基址相加,即可获取用于转发的成员id。
计算完成后,根据成员id找到相应地址的硬件转发端口,将报文进行转发。
根据上述具体实施方法,NPU或ASIC对入口接收到的每个报文进行步骤103中的处理,即可把所有的报文按照HASH的结果转发出去。由于HASH的结果是均匀的,并且srv6_member表是按照各出口成员权重散列的,因此所有的入口报文都会按照出口链路带宽和权重分担并转发出去。
本实施例提供的方法,本方案中从一个保护中所有成员的共同基址开始预留8个成员id,为GROUP一次预留多个成员id,使得成员id密集,便于管理。对成员表占用的存储空间按照4bit进行划分,仅保存每个成员相对于成员共同基址的偏移0-7,通过基址加偏移的方式,在原有的存储空间中合理的利用空间,间接把成员表扩大8倍,提高了流量分配精度。
实施例3:
在上述实施例1至实施例2提供的UCMP负载分担的方法的基础上,本发明还提供了一种可用于实现上述方法的UCMP负载分担的装置,如图7所示,是本发明实施例的装置架构示意图。本实施例的UCMP负载分担的装置包括一个或多个处理器11以及存储器12。其中,图7中以一个处理器11为例。
处理器11和存储器12可以通过总线或者其他方式连接,图7中以通过总线连接为例。
存储器12作为一种UCMP负载分担方法非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如实施例1至实施例2中的UCMP负载分担方法。处理器11通过运行存储在存储器12中的非易失性软件程序、指令以及模块,从而执行UCMP负载分担的装置的各种功能应用以及数据处理,即实现实施例1至实施例2的UCMP负载分担的方法。
存储器12可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器12可选包括相对于处理器11远程设置的存储器,这些远程存储器可以通过网络连接至处理器11。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
程序指令/模块存储在存储器12中,当被一个或者多个处理器11执行时,执行上述实施例1至实施例2中的UCMP负载分担的方法,例如,执行以上描述的图2、图3和图4所示的各个步骤。
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(Read Only Memory,简写为:ROM)、随机存取存储器(Random AccessMemory,简写为:RAM)、磁盘或光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种UCMP负载分担的方法,其特征在于,具体包括:
将保护组中每个成员的成员id分解为所有成员共用的基址和每个成员的偏移地址,根据每个成员的偏移地址存储空间大小获取偏移位数,将基址按照所述偏移位数进行向右位移得到保护组id;
根据每个端口对应的链路带宽获取每个成员的权重,根据相应权重将每个成员对应的偏移地址写入成员表,其中,每个成员的偏移地址的存储空间小于成员id的存储空间;
由成员表获取需转发报文的成员对应的偏移地址,将保护组id按照所述偏移位数进行向左位移获得成员共用的基址,再将基址和成员对应的偏移地址组合为成员id。
2.根据权利要求1所述的UCMP负载分担的方法,其特征在于,所述根据相应权重将每个成员对应的偏移地址写入成员表,具体包括:
根据每个成员权重的比例计算每个成员在成员表中出现的次数;
按照每个成员在成员表中出现的次数,将成员对应的偏移地址写入成员表。
3.根据权利要求2所述的UCMP负载分担的方法,其特征在于,所述根据每个成员权重的比例计算每个成员在成员表中出现的次数,具体包括:每个成员在成员表中出现的次数占成员表中所有成员出现总次数的比例,与每个成员权重的比例相对应。
4.根据权利要求3所述的UCMP负载分担的方法,其特征在于,具体包括:所述所有成员出现总次数,根据每个成员的偏移地址所占的存储空间大小和转发硬件内部的存储空间大小决定。
5.根据权利要求4所述的UCMP负载分担的方法,其特征在于,还包括:每个成员的偏移地址所占的存储空间大小大于等于每个成员的偏移地址的数据存储大小。
6.根据权利要求2所述的UCMP负载分担的方法,其特征在于,所述将成员对应的偏移地址写入成员表,具体包括:按照成员权重由小到大排序,根据每个成员在成员表中出现的次数,依次在成员表中将成员的偏移地址写入相应次数。
7.根据权利要求1所述的UCMP负载分担的方法,其特征在于,所述由成员表获取需转发报文的成员id,具体包括:
根据报文的属性计算报文的HASH值;
根据报文的HASH值,获取用于转发的端口所对应成员在成员表中的位置;
获取相应位置对应的成员的偏移地址,根据所述所有成员共用的基址和相应成员的偏移地址获取成员id。
8.根据权利要求1所述的UCMP负载分担的方法,其特征在于,还包括:每个保护组中的所述基址在未释放前其它保护组不能使用。
9.根据权利要求1所述的UCMP负载分担的方法,其特征在于,所述根据每个端口对应的链路带宽获取每个成员的权重,具体包括:根据每个端口对应的链路带宽,计算每个成员对应的等价或非等价权重,其中,每个成员的权重与链路带宽正相关。
10.一种UCMP负载分担的装置,其特征在于:
包括至少一个处理器和存储器,所述至少一个处理器和存储器之间通过数据总线连接,所述存储器存储能被所述至少一个处理器执行的指令,所述指令在被所述处理器执行后,用于完成权利要求1-9中任一项所述的UCMP负载分担的方法。
CN202110958837.7A 2021-08-20 2021-08-20 一种ucmp负载分担的方法和装置 Active CN113660160B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110958837.7A CN113660160B (zh) 2021-08-20 2021-08-20 一种ucmp负载分担的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110958837.7A CN113660160B (zh) 2021-08-20 2021-08-20 一种ucmp负载分担的方法和装置

Publications (2)

Publication Number Publication Date
CN113660160A CN113660160A (zh) 2021-11-16
CN113660160B true CN113660160B (zh) 2023-04-28

Family

ID=78481464

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110958837.7A Active CN113660160B (zh) 2021-08-20 2021-08-20 一种ucmp负载分担的方法和装置

Country Status (1)

Country Link
CN (1) CN113660160B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106941455A (zh) * 2016-01-04 2017-07-11 中兴通讯股份有限公司 均衡负荷分担的方法及装置
CN112445729A (zh) * 2020-11-30 2021-03-05 深圳开立生物医疗科技股份有限公司 操作地址确定方法、PCIe系统、电子设备及存储介质

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6888838B1 (en) * 2000-11-16 2005-05-03 Tensilica, Inc. Fast IP route lookup with configurable processor and compressed routing table
CN101808243B (zh) * 2010-03-11 2012-04-18 杭州华三通信技术有限公司 一种基于快照的数据处理方法和设备
US9246810B2 (en) * 2011-03-11 2016-01-26 Broadcom Corporation Hash-based load balancing with per-hop seeding
CN102291472A (zh) * 2011-09-09 2011-12-21 华为数字技术有限公司 一种网络地址查找方法及装置
US9467384B2 (en) * 2013-12-05 2016-10-11 Mediatek Singapore Pte. Ltd. Packet forwarding apparatus and method using flow subgroup based path selection for dynamic load balancing
CN105791145B (zh) * 2014-12-18 2019-10-25 南京中兴新软件有限责任公司 基于等价多路径ecmp的报文传输方法及装置
CN105790973B (zh) * 2014-12-18 2019-01-25 中兴通讯股份有限公司 数据传输方法及装置
CN106302218A (zh) * 2015-05-29 2017-01-04 中兴通讯股份有限公司 网络负荷的分担方法和装置
CN107872390A (zh) * 2016-09-28 2018-04-03 华为数字技术(苏州)有限公司 一种路由选择方法及报文转发设备
CN108259334A (zh) * 2017-01-25 2018-07-06 新华三技术有限公司 一种等价路由表项建立方法和装置
CN108322388B (zh) * 2018-01-31 2022-03-01 新华三技术有限公司 一种报文转发方法及装置
CN109218218B (zh) * 2018-08-22 2022-08-05 烽火通信科技股份有限公司 基于自定义模板的按照带宽分担数据流量的方法及系统
CN112104549A (zh) * 2020-08-07 2020-12-18 新华三信息安全技术有限公司 负载分担的实现方法及装置
CN112905122B (zh) * 2021-02-20 2024-04-09 炬芯科技股份有限公司 一种存储数据的方法及装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106941455A (zh) * 2016-01-04 2017-07-11 中兴通讯股份有限公司 均衡负荷分担的方法及装置
WO2017117908A1 (zh) * 2016-01-04 2017-07-13 中兴通讯股份有限公司 负荷分担的方法及装置
CN112445729A (zh) * 2020-11-30 2021-03-05 深圳开立生物医疗科技股份有限公司 操作地址确定方法、PCIe系统、电子设备及存储介质

Also Published As

Publication number Publication date
CN113660160A (zh) 2021-11-16

Similar Documents

Publication Publication Date Title
US9246810B2 (en) Hash-based load balancing with per-hop seeding
US7606236B2 (en) Forwarding information base lookup method
US20240143169A1 (en) Method for Improving Message Storage Efficiency of Network Chip, Device, and Storage medium
US7263099B1 (en) Multicast packet replication
JP2016149757A (ja) モジュール式転送テーブル拡張性のための技術
EP2613479A1 (en) Relay device
EP3661153B1 (en) Building decision tree for packet classification
CN109391549B (zh) 使用一致性哈希进行ecmp路由
Bando et al. FlashTrie: beyond 100-Gb/s IP route lookup using hash-based prefix-compressed trie
CN111937360B (zh) 最长前缀匹配
CN108259328B (zh) 报文转发方法及装置
CN112425131B (zh) 一种acl的规则分类方法、查找方法和装置
CN102857414A (zh) 一种转发表写入、报文转发方法及装置
CN108259346B (zh) 一种等价路由表项建立方法和装置
CN104468401A (zh) 一种报文处理方法和装置
CN107947950B (zh) 一种硬件组播出接口表项的下发方法和np线卡板
US20120230194A1 (en) Hash-Based Load Balancing in Large Multi-Hop Networks with Randomized Seed Selection
CN110191135B (zh) Acl配置方法、装置、电子设备
CN110768917B (zh) 一种报文传输方法及装置
US9258229B2 (en) Systems and methods for accessing a multi-bank SRAM
CN106453091B (zh) 路由器转发平面的等价路由管理方法和装置
US20240152474A1 (en) On-chip integrated circuit, data processing device, and data processing method
CN113660160B (zh) 一种ucmp负载分担的方法和装置
CN104954477B (zh) 一种基于并发改进的大规模图数据流式划分方法及系统
CN103457855A (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