一种表项读取方法、装置及网络设备与流程

文档序号:31073785发布日期:2022-08-09 21:26阅读:61来源:国知局
一种表项读取方法、装置及网络设备与流程

1.本发明涉及通信技术领域,特别涉及一种表项读取方法、装置及网络设备。


背景技术:

2.随着网络技术的发展,路由器的路由表查询面临着高可靠性的挑战。双倍速率(double data rate,ddr)同步动态随机存储器(synchronous dynamic random access memory,sdram)具有大容量和低成本的特点,通常用来存储路由表。
3.如图1所示,为相关技术中多个100g接口查表访问ddr的方案的架构图,包括表项配置模块101、查表引擎102、6个接口模块103、6个ddr控制器104和6个ddr sdram105,其中,各个接口模块103和各个ddr控制器104之间通过ddr接口连接。具体工作过程为:中央处理器(central processing unit,cpu)调用表项配置模块101将路由表配置到各个ddr sdram105中;查表引擎102接收到报文后,对报文进行解析得到表项的存储地址,再触发与该存储地址对应的接口模块103,并向与该接口模块103对应的ddr控制器104发送读命令;该ddr控制器104接收到该读命令后,从与其对应的ddr sdram105中获取表项,并将该表项返回至与该ddr控制器104对应的接口模块103。
4.上述方案,接口模块、ddr控制器和ddr sdram是一一对应的,若某一ddr控制器故障,则无法处理对应的接口模块发送的读命令,从而会影响查表访问;并且,ddr接口之间的带宽不能共享。综上,现有技术中多接口ddr查表访问时可靠性低且不能最大利用其带宽。


技术实现要素:

5.本发明实施例提供一种表项读取方法、装置及网络设备,用以解决现有技术中存在的多接口ddr查表访问时可靠性低且不能最大利用其带宽的问题。
6.第一方面,本发明实施例提供一种表项读取方法,应用于网络设备的表项读取器件包括的交叉模块中,所述表项读取器件还包括至少两个接口模块、至少两个控制器以及与每个控制器对应的存储器,所述方法包括:
7.接收所述至少两个接口模块中的任意接口模块发送的读命令后,根据各个控制器的命令缓存队列中与所述任意接口模块对应的子命令缓存队列的状态信息和预设轮询规则确定目标控制器,在所述任意接口模块对应的控制器标识缓存队列中添加所述目标控制器的控制器标识,并将所述读命令添加到所述目标控制器的命令缓存队列中与所述任意接口模块对应的子命令缓存队列中;以及,
8.按照负载均衡原则将各个控制器的各个命令缓存队列包括的各个子命令缓存队列中的读命令发送给对应的控制器,并将发送的读命令所在的子命令缓存队列对应的接口模块的模块标识添加到所述发送的读命令对应的控制器的模块标识缓存队列中,以使各个控制器从对应的存储器获取接收到的读命令对应的表项;以及,
9.接收所述至少两个控制器中的任意控制器返回的表项后,从所述任意控制器对应的模块标识缓存队列中获取最先存储的目标模块标识,将接收到的表项添加到与所述目标
模块标识对应的接口模块的表项缓存队列中与所述任意控制器对应的子表项缓存队列中;以及,
10.根据各个接口模块对应的控制器标识缓存队列中各个控制器标识添加的先后顺序,将各个接口模块的各个表项缓存队列中与各个控制器对应的子表项缓存队列中的表项发送给对应的接口模块。
11.基于上述方案,由于接口模块、控制器和存储器可以交叉传输读命令和表项,如果某一控制器故障,可以使用其他控制器,从而可以提高表项读取的可靠性,此外,由于接口模块、控制器和存储器不是一一对应的,因此,接口模块和控制器之间的接口的带宽可以共享,从而可以提高带宽的利用率。
12.在一种可能的实现方式中,所述根据各个控制器的命令缓存队列中与所述任意接口模块对应的子命令缓存队列的状态信息和预设轮询规则确定目标控制器,包括:
13.根据预设轮询规则确定上一次确定的目标控制器之后的候选控制器;
14.确定所述候选控制器的命令缓存队列中与所述任意接口模块对应的子命令缓存队列的状态信息;
15.若确定与所述任意接口模块对应的子命令缓存队列的状态信息为繁忙状态,则将所述候选控制器更新为所述候选控制器之后的控制器,执行所述确定所述候选控制器的命令缓存队列中与所述任意接口模块对应的子命令缓存队列的状态信息的步骤;
16.若确定与所述任意接口模块对应的子命令缓存队列的状态信息为非繁忙状态,则将所述候选控制器确定为本次的目标控制器。
17.基于上述方案,通过预设轮询规则确定候选控制器,然后确定该候选控制器的命令缓存队列中与任意接口模块对应的子命令缓存队列的状态信息,最后根据状态信息是繁忙还是非繁忙确定目标控制器,从而从候选控制器中选择非繁忙的控制器作为目标控制器,可以提高表项读取的效率。
18.在一种可能的实现方式中,确定所述候选控制器的命令缓存队列中与所述任意接口模块对应的子命令缓存队列的状态信息,具体包括:
19.获取所述候选控制器的命令缓存队列中与所述任意接口模块对应的子命令缓存队列中存储的读命令的第一数量;
20.确定所述第一数量是否小于第一设定阈值;
21.若确定所述第一数量小于所述第一设定阈值,则确定与所述任意接口模块对应的子命令缓存队列的状态信息为非繁忙状态;
22.若确定所述第一数量不小于所述第一设定阈值,则确定与所述任意接口模块对应的子命令缓存队列的状态信息为繁忙状态。
23.基于上述方案,通过候选控制器的命令缓存队列中与任意接口模块对应的子命令缓存队列中存储的读命令的数量,与第一设定阈值进行比较,根据比较结果确定子命令缓存队列的状态信息为非繁忙状态或繁忙状态,由于第一设定阈值为预设的,从而可以灵活的设置子命令缓存队列的状态信息。
24.在一种可能的实现方式中,所述将所述候选控制器确定为本次的目标控制器之前,还包括:
25.确定所述候选控制器的状态信息;
26.若确定所述候选控制器的状态信息为异常,则将所述候选控制器更新为所述候选控制器之后的控制器,执行所述确定所述候选控制器的状态信息的步骤;
27.若确定所述候选控制器的状态信息为正常,则执行所述将所述候选控制器确定为本次的目标控制器的步骤。
28.基于上述方案,在将候选控制器确定为本次的目标控制器之前,根据候选控制器的状态信息为异常或正常,确定目标控制器,避免将异常的备选控制器作为目标控制器,从而使确定的目标控制器更准确,提高表项读取的可靠性。
29.在一种可能的实现方式中,所述确定所述候选控制器的状态信息,具体包括:
30.获取所述候选控制器发送的对获取的表项进行验证得到的错误信息;
31.确定获取的错误信息的第二数量是否大于第二设定阈值;
32.若确定所述第二数量大于所述第二设定阈值,则确定所述候选控制器的状态信息为异常;
33.若确定所述第二数量不大于所述第二设定阈值,则确定所述候选控制器的状态信息为正常。
34.基于上述方案,将获取到的候选控制器发送的对获取的表项进行验证得到的错误信息的数量,与第二设定阈值进行比较,根据比较结果确定候选控制器为正常或异常,由于第二设定阈值是预先设定的,从而可以提高确定候选控制器的状态信息的灵活性。
35.在一种可能的实现方式中,所述根据各个接口模块对应的控制器标识缓存队列中各个控制器标识添加的先后顺序,将各个接口模块的各个表项缓存队列中与各个控制器对应的子表项缓存队列中的表项发送给对应的接口模块,包括:
36.从各个接口模块对应的控制器标识缓存队列中获取最先存储的控制器标识;
37.将各个接口模块的各个表项缓存队列中与最先存储的控制器标识对应的子表项缓存队列中存储的表项发送给对应的接口模块。
38.基于上述方案,将接口模块的表项缓存队列中与最先存储的控制器标识对应的子表项缓存队列中存储的表项发送给对应的接口模块,从而可以保证表项的有序输出,提高表项读取的可靠性。
39.在一种可能的实现方式中,所述将所述表项添加到与所述目标模块标识对应的接口模块的表项缓存队列中与所述任意控制器对应的第一子表项缓存队列中之后,还包括:
40.从所述任意控制器对应的模块标识缓存队列中删除所述目标模块标识;
41.所述将各个接口模块的各个表项缓存队列中与各个控制器对应的子表项缓存队列中的表项发送给对应的接口模块之后,还包括:
42.从各个接口模块对应的控制器标识缓存队列中删除最先存储的控制器标识。
43.基于上述方案,删除最先存储的模块标识和最先存储的控制器标识,可以保证下次有序输出表项,提高表项读取的可靠性。
44.第二方面,本发明实施例还提供一种表项读取装置,应用于网络设备的表项读取器件包括的交叉模块中,所述表项读取器件还包括至少两个接口模块、至少两个控制器以及与每个控制器对应的存储器,所述表项读取装置包括命令交叉单元和数据交叉单元;
45.所述命令交叉单元,用于接收所述至少两个接口模块中的任意接口模块发送的读命令后,根据各个控制器的命令缓存队列中与所述任意接口模块对应的子命令缓存队列的
状态信息和预设轮询规则确定目标控制器,在所述任意接口模块对应的控制器标识缓存队列中添加所述目标控制器的控制器标识,并将所述读命令添加到所述目标控制器的命令缓存队列中与所述任意接口模块对应的子命令缓存队列中;以及,按照负载均衡原则将各个控制器的各个命令缓存队列包括的各个子命令缓存队列中的读命令发送给对应的控制器,并将发送的读命令所在的子命令缓存队列对应的接口模块的模块标识添加到所述发送的读命令对应的控制器的模块标识缓存队列中,以使各个控制器从对应的存储器获取接收到的读命令对应的表项;
46.所述数据交叉单元,用于接收所述至少两个控制器中的任意控制器返回的表项后,从所述任意控制器对应的模块标识缓存队列中获取最先存储的目标模块标识,将接收到的表项添加到与所述目标模块标识对应的接口模块的表项缓存队列中与所述任意控制器对应的子表项缓存队列中;以及,根据各个接口模块对应的控制器标识缓存队列中各个控制器标识添加的先后顺序,将各个接口模块的各个表项缓存队列中与各个控制器对应的子表项缓存队列中的表项发送给对应的接口模块。
47.在一种可能的实现方式中,所述命令交叉单元具体用于:
48.根据预设轮询规则确定上一次确定的目标控制器之后的候选控制器;
49.确定所述候选控制器的命令缓存队列中与所述任意接口模块对应的子命令缓存队列的状态信息;
50.若确定与所述任意接口模块对应的子命令缓存队列的状态信息为繁忙状态,则将所述候选控制器更新为所述候选控制器之后的控制器,执行所述确定所述候选控制器的命令缓存队列中与所述任意接口模块对应的子命令缓存队列的状态信息的步骤;
51.若确定与所述任意接口模块对应的子命令缓存队列的状态信息为非繁忙状态,则将所述候选控制器确定为本次的目标控制器。
52.在一种可能的实现方式中,所述命令交叉单元具体用于:
53.获取所述候选控制器的命令缓存队列中与所述任意接口模块对应的子命令缓存队列中存储的读命令的第一数量;
54.确定所述第一数量是否小于第一设定阈值;
55.若确定所述第一数量小于所述第一设定阈值,则确定与所述任意接口模块对应的子命令缓存队列的状态信息为非繁忙状态;
56.若确定所述第一数量不小于所述第一设定阈值,则确定与所述任意接口模块对应的子命令缓存队列的状态信息为繁忙状态。
57.在一种可能的实现方式中,所述将所述候选控制器确定为本次的目标控制器之前,所述命令交叉单元还用于:
58.确定所述候选控制器的状态信息;
59.若确定所述候选控制器的状态信息为异常,则将所述候选控制器更新为所述候选控制器之后的控制器,执行所述确定所述候选控制器的状态信息的步骤;
60.若确定所述候选控制器的状态信息为正常,则执行所述将所述候选控制器确定为本次的目标控制器的步骤。
61.在一种可能的实现方式中,所述命令交叉单元具体用于:
62.获取所述候选控制器发送的对获取的表项进行验证得到的错误信息;
63.确定获取的错误信息的第二数量是否大于第二设定阈值;
64.若确定所述第二数量大于所述第二设定阈值,则确定所述候选控制器的状态信息为异常;
65.若确定所述第二数量不大于所述第二设定阈值,则确定所述候选控制器的状态信息为正常。
66.在一种可能的实现方式中,所述数据交叉单元具体用于:
67.从各个接口模块对应的控制器标识缓存队列中获取最先存储的控制器标识;
68.将各个接口模块的各个表项缓存队列中与最先存储的控制器标识对应的子表项缓存队列中存储的表项发送给对应的接口模块。
69.在一种可能的实现方式中,所述将接收到的表项添加到与所述目标模块标识对应的接口模块的表项缓存队列中与所述任意控制器对应的子表项缓存队列中之后,所述数据交叉单元还用于:
70.从所述任意控制器对应的模块标识缓存队列中删除所述目标模块标识;
71.所述将各个接口模块的各个表项缓存队列中与各个控制器对应的子表项缓存队列中的表项发送给对应的接口模块之后,所述交叉模块还用于:
72.从各个接口模块对应的控制器标识缓存队列中删除最先存储的控制器标识。
73.第三方面,本发明实施例还提供一种网络设备,包括表项读取器件,所述表项读取器件包括至少两个接口模块、至少两个控制器、与每个控制器对应的存储器以及如第二方面中任一项所述的表项读取装置。
74.第四方面,本发明实施例还提供一种计算机可读存储介质,包括:
75.所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如第一方面中任一项所述的方法。
76.上述第二方面至第四方面中的各个方面以及各个方面可能达到的技术效果请参照上述针对第一方面或第一方面中的各种可能方案可以达到的技术效果说明,这里不再重复赘述。
附图说明
77.为了更清楚地说明本技术的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
78.图1为相关技术中多个100g接口查表访问ddr的方案的架构图;
79.图2为本发明实施例提供的一种表项读取的架构示意图;
80.图3为本发明实施例提供的一种表项读取的方法的流程示意图;
81.图4为本发明实施例提供的另一种表项读取的架构示意图;
82.图5为本发明实施例提供的一种ddr交叉模块的架构示意图;
83.图6为本发明实施例提供的另一种表项读取的架构示意图;
84.图7为本发明实施例提供的另一种表项读取的架构示意图;
85.图8为本发明实施例提供的一种表项的格式示意图。
具体实施方式
86.为了使本技术的目的、技术方案和优点更加清楚,下面将结合附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本技术保护的范围。
87.为了提高表项读取的可靠性以及提高接口带宽的利用率,本发明实施例提供了一种表项读取方法,应用于网络设备的表项读取器件包括的交叉模块200中,如图2所示,该表项读取器件还包括至少两个接口模块103、至少两个控制器300和与每个控制器对应的存储器400,如图3所示,该方法包括:
88.s301、接收至少两个接口模块中的任意接口模块发送的读命令后,根据各个控制器的命令缓存队列中与任意接口模块对应的子命令缓存队列的状态信息和预设轮询规则确定目标控制器,在任意接口模块对应的控制器标识缓存队列中添加目标控制器的控制器标识,并将读命令添加到目标控制器的命令缓存队列中与任意接口模块对应的子命令缓存队列中;
89.s302、按照负载均衡原则将各个控制器的各个命令缓存队列包括的各个子命令缓存队列中的读命令发送给对应的控制器,并将发送的读命令所在的子命令缓存队列对应的接口模块的模块标识添加到发送的读命令对应的控制器的模块标识缓存队列中,以使各个控制器从对应的存储器获取接收到的读命令对应的表项;
90.s303、接收至少两个控制器中的任意控制器返回的表项后,从任意控制器对应的模块标识缓存队列中获取最先存储的目标模块标识,将接收到的表项添加到与目标模块标识对应的接口模块的表项缓存队列中与任意控制器对应的子表项缓存队列中;
91.s304、根据各个接口模块对应的控制器标识缓存队列中各个控制器标识添加的先后顺序,将各个接口模块的各个表项缓存队列中与各个控制器对应的子表项缓存队列中的表项发送给对应的接口模块。
92.本发明实施例提供的表项读取方法,由于接口模块、控制器和存储器可以交叉传输读命令和表项,如果某一控制器故障,可以使用其他控制器,从而可以提高表项读取的可靠性,此外,由于接口模块、控制器和存储器不是一一对应的,因此,接口模块和控制器之间的接口的带宽可以共享,从而可以提高带宽的利用率。
93.在具体实施中,表项读取器件可以为现场可编程逻辑门阵列(field programmable gate array,fpga),还可以为其他可编程的器件;本发明实施例中的控制器可以为ddr控制器,存储器可以为ddr sdram,交叉模块可以为ddr交叉模块,缓存队列可以为先入先出队列(first input first output,fifo)。
94.下面以ddr交叉模块、ddr控制器、ddr sdram和缓存队列为fifo为例,接口模块和控制器的数量均为6个对本发明实施例进行说明。如图4所示,为本发明实施例提供的一种表项读取的架构示意图。
95.基于图4所示的表项读取的架构图,ddr交叉模块402接收到6个接口模块103中任意接口模块103发送的读命令后,根据各个ddr控制器104的命令缓存队列中与任意接口401对应的子命令缓存队列的状态信息和预设轮询规则,确定目标ddr控制器,在任意接口模块103对应的控制器标识缓存队列中添加目标ddr控制器104的控制器标识,并将读命令添加
到目标ddr控制器104的命令缓存队列中与任意接口模块103对应的子缓存队列中;以及按照负载均衡原则将各个ddr控制器104的各个命令缓存队列包括的各个子命令缓存队列中的读命令发送给对应的ddr控制器104,并将发送的读命令所在的子命令缓存队列对应的接口模块103的模块标识添加到发送的读命令对应的ddr控制器104的模块标识缓存队列中,以使各个ddr控制器从与其对应的ddr sdram105中获取接收到的读命令对应的表项;以及接收6个ddr控制器104中的任意ddr控制器104返回的表项后,从任意ddr控制器104对应的模块标识缓存队列中获取最先存储的目标模块标识,将接收到的表项添加到与目标模块标识对应的接口模块的表项缓存队列中与任意ddr控制器104对应的子表项缓存队列中;以及根据各个接口模块103对应的控制器标识缓存队列中各个控制器标识添加的先后顺序,将各个接口模块103的各个表项缓存队列中与各个ddr控制器104对应的子表项缓存队列中的表项发送给对应的接口模块103。
96.如图5所示,为本发明实施例提供的一种ddr交叉模块的架构示意图,从图5中可以看出,在具体实施中,ddr交叉模块402可以包括ddr命令交叉单元4021和ddr数据交叉单元4022,为了实现读命令和返回的表项能够正确保序输出,需要两类存储标识的fifo,其中,fifo1_n’为控制器标识缓存队列,与接口模块103一一对应,用于存储控制器标识,fifo2_n’为模块标识缓存队列,与ddr控制器一一对应,用于存储接口模块103的模块标识,其中,n’=0~5。
97.本发明实施例中,每个接口模块对应一个模块标识,比如,接口模块0对应的模块标识为0,接口模块1对应的模块标识为1
……
,每个ddr控制器对应一个控制器标识,比如,ddr控制器0对应的控制器标识为0,ddr控制器1对应的控制器标识为1,ddr控制器2对应的控制器标识为2
……

98.如图6和图7所示,本发明实施例中除了包括fifo1和fifo2之外,还包括fifo3和fifo4。
99.其中,fifo3为命令缓存队列,每个ddr控制器对应一个命令缓存队列fifo3,比如,ddr控制器0对应的命令缓存队列为fifo30,ddr控制器1对应的命令缓存队列为fifo31
……
,针对每个命令缓存队列,包括与接口模块对应的子命令缓存队列,比如,ddr控制器0对应的命令缓存队列fifo30中,包括与接口模块0对应的子命令缓存队列fifo30_0,与接口模块1对应的子命令缓存队列fifo30_1,与接口模块2对应的子命令缓存队列fifo30_2,与接口模块3对应的子命令缓存队列fifo30_3,与接口模块4对应的子命令缓存队列fifo30_4,与接口模块5对应的子命令缓存队列fifo30_5。
100.fifo4为表项缓存队列,每个接口模块对应一个表项缓存队列fifo4,比如,接口模块0对应的表项缓存队列为fifo40,接口模块1对应的表项缓存队列为fifo41
……
,针对每个表项缓存队列,包括与ddr控制器对应的子表项缓存队列,比如,接口模块0对应的表项缓存队列fifo40中,包括与ddr控制器0对应的子表项缓存队列fifo40_0,与ddr控制器1对应的子表项缓存队列fifo40_1,与ddr控制器2对应的子表项缓存队列fifo40_2,与ddr控制器3对应的子表项缓存队列fifo40_3,与ddr控制器4对应的子表项缓存队列fifo40_4,与ddr控制器5对应的子表项缓存队列fifo40_5。
101.下面结合图6和图7,对本发明实施例提供的表项读取方法进行详细说明。
102.ddr命令交叉单元4021接收任意接口模块103发送的读命令,ddr命令交叉单元
4021根据各个ddr控制器104的命令缓存队列fifo3中与任意接口模块对应的子命令缓存队列的状态信息和预设轮询规则,确定目标ddr控制器,在任意接口模块103对应的控制器标识缓存队列fifo1中添加目标ddr控制器的控制器标识,并将该读命令添加到目标ddr控制器的命令缓存队列fifo3中与任意接口模块103对应的子命令缓存队列中。
103.比如,参照图6,接口模块0发送读命令,ddr命令交叉单元4021接收到读命令后,根据子命令缓存队列fifo30_0、fifo31_0、fifo32_0、fifo33_0、fifo34_0和fifo35_0的状态信息和预设轮询规则,确定目标ddr控制器为ddr控制器1,在fifo1_0中添加ddr控制器1的控制器标识1,并将接收到的读命令添加到fifo31_0中。
104.在具体实施中,确定目标ddr控制器,可以根据预设轮询规则确定上一次确定的目标ddr控制器之后的候选ddr控制器,然后确定候选ddr控制器的命令缓存队列中与任意接口模块对应的子命令缓存队列的状态信息,如果确定与任意接口模块对应的子命令缓存队列的状态信息为繁忙,则将候选ddr控制器更新为该候选ddr控制器之后的ddr控制器,执行确定候选ddr控制器的命令缓存队列中与任意接口模块对应的子命令缓存队列的状态信息的步骤;如果确定与任意接口对应的子命令缓存队列的状态信息为非繁忙,则将候选ddr控制器确定为本次的目标ddr控制器。
105.比如,预设轮询规则为按照ddr控制器的控制器标识,依次逐一轮询,结合图6,如果上一次确定的目标ddr控制器为ddr控制器0,则将ddr控制器1作为候选ddr控制器,如果读命令为接口模块0发送的,则确定子命令缓存队列fifo31_0的状态信息,如果fifo31_0的状态信息为非繁忙状态,则将ddr控制器1作为目标ddr控制器;如果fifo31_0的状态信息为繁忙状态,则将ddr控制器2作为候选ddr控制器,重复上述步骤,直到确定出目标ddr控制器为止。
106.具体的,确定子命令缓存队列的状态信息时,可以获取候选ddr控制器的命令缓存队列中与任意接口对应的子命令缓存队列中存储的读命令的第一数量,确定该第一数量是否小于第一设定阈值,如果小于,则确定与任意接口模块对应的子命令缓存队列的状态信息为非繁忙状态,如果不小于,则确定为繁忙状态。
107.比如,结合图6,如果发送读命令的接口模块为接口模块0,候选ddr控制器为ddr控制器1,第一设定阈值为5,则获取fifo31_0中读命令的数量为6,大于第一设定阈值,则确定fifo31_0为繁忙状态。
108.在一种实施方式中,确定目标ddr控制器,除了考虑ddr控制器的命令缓存队列中与发送读命令的接口模块对应的子命令缓存队列的状态信息外,还需要确定该ddr控制器自身的状态信息,即异常或正常,只有在ddr控制器的状态信息为正常状态时,才能将该ddr控制器作为目标ddr控制器。
109.具体的,在配置表项的过程中,根据表项内容计算出crc,记作crc_wr,将crc_wr放在表项的高位未使用的位中,如图8所示,为写入到ddr sdram中的表项的格式。
110.当进行表项返回时,ddr控制器获取到表项后,使用计算crc_wr相同的算法对该表项中的表项内容进行计算,得到crc_rd,ddr控制器从表项中获取crc_wr,将crc_wr与crc_rd进行比较,如果相同,则确定此次返回的表项正确,否则确定返回的表项错误,如果确定返回的表项错误,则进行一次计数,可以将该计数值发送给ddr交叉模块。
111.ddr交叉模块对接收到的计数值进行监测,如果计数值大于第二设定阈值,则确定
ddr控制器的状态信息为异常,如果不大于第二设定阈值,则确定ddr控制器的状态信息为正常。
112.在具体实施中,如果候选ddr控制器的状态信息为正常,且命令缓存队列中与发送读命令的接口模块对应的子命令缓存队列的状态信息为非繁忙状态,则将该候选ddr控制器作为目标ddr控制器,如果候选ddr控制器的状态信息为异常,命令缓存队列中与发送读命令的接口模块对应的子命令缓存队列的状态信息为非繁忙状态,则将候选ddr控制器更新为该候选ddr控制器之后的ddr控制器,执行确定候选ddr控制器的命令缓存队列中与发送读命令的接口模块对应的子命令缓存队列的状态信息的步骤。
113.比如,结合图6,候选ddr控制器为ddr控制器1,命令缓存队列中与发送读命令的接口模块对应的子命令缓存队列为fifo31_0,如果ddr命令交叉单元4021确定ddr控制器1的状态信息为异常,fifo31_0的状态信息为非繁忙,则将ddr控制器2作为候选ddr控制器,然后确定ddr控制器2的状态信息和fifo32_0的状态信息,如果ddr控制器2的状态信息为正常,fifo32_0的状态信息为非繁忙状态,则将ddr控制器2作为目标ddr控制器。
114.ddr命令交叉单元4021确定了目标ddr控制器,在发送读命令的接口模块对应的控制器标识缓存队列fifo1中添加目标ddr控制器的控制器标识,并将读命令添加到目标ddr控制器的命令缓存队列fifio3中与发送该读命令的接口模块对应的子命令缓存队列中后,按照负载均衡原则将各个ddr控制器对应的命令缓存队列fifo3包括的各个子命令缓存队列中的读命令发送给对应的ddr控制器,并将该读命令所在的子命令缓存队列对应的接口模块的模块标识添加到发送的读命令对应的控制器的模块标识缓存队列fifo2中,以使各个ddr控制器从对应的ddr sdram中获取接收到的读命令对应的表项。
115.结合图6,比如,子命令缓存队列fifo30_4中存储的读命令最多,则将子命令缓存队列fifo30_4中最先存储的读命令输出至ddr控制器0,并将模块标识4存储到fifo2_0中,ddr控制器0从ddr sdram0中获取表项。
116.上述为发送读命令、获取表项、存储控制器标识和存储模块标识的过程,下面对如何将表项发送至接口模块进行说明。
117.如图7所示,ddr交叉模块中的ddr数据交叉单元4022接收任一ddr控制器发送的表项后,从该ddr控制器对应的模块标识缓存队列fifo2中获取最先存储的目标模块标识,然后将该表项添加至与该目标模块标识对应的接口模块的表项缓存队列fifo4中的该ddr控制器对应的子表项缓存队列中。
118.比如,结合图7,ddr数据交叉单元4022接收到ddr控制器0发送的表项后,从fifo2_0中获取最先存储的模块标识为模块标识1,则将该表项添加至fifo40_1中。
119.通过ddr数据交叉单元4022将接收到的表项添加到对应的子表项缓存队列中后,根据各个接口模块对应的控制器标识缓存队列fifo1中各个ddr控制器标识添加的先后顺序,将各个接口模块的各个表项存储队列fifo4中与各个ddr控制器对应的子表项缓存队列中的表项发送给对应的接口模块。
120.具体的,ddr数据交叉单元4022从各个接口模块对应的控制器标识缓存队列中获取最先存储的控制器标识,然后将各个接口模块的各个表项缓存队列fifo4中与最先存储的控制器标识对应的子表项缓存队列中存储的表项发送给对应的接口模块。
121.比如,结合图7,ddr数据交叉单元4022从fifo1_0中获取到的最先存储的控制器标
识为控制器标识1,然后将fifo40_1中最先存储的表项输出至接口模块0。
122.在一种实施例中,将表项添加到与目标模块标识对应的接口模块的表项缓存队列中与任意ddr对应的子表项缓存队列中后,从任意ddr控制器对应的模块标识缓存队列中删除该目标模块标识,以及将各个接口模块的各个表项缓存队列中与各个ddr控制器对应的子表项缓存队列中的表项发送给对应的接口模块后,从各个接口模块对应的控制器标识缓存队列中删除最先存储的控制器标识。
123.比如,结合图7,ddr数据交叉单元4022从fifo2_0中获取最先存储的接口模块标识为模块标识1,将表项添加至fifo41_0后,从fifo2_0中删除该模块标识1;ddr数据交叉单元4022从fifo1_1中获取到的最先存储的控制器标识为控制器标识0,将fifo41_0中最先存储的表项输出至接口模块1后,从fifo1_1中删除该控制器标识0。
124.上述实施例,可以保证下一次表项能够保序输出,提高表项读取的准确性。
125.本发明实施例提供的表项读取方法中,利用ddr交叉模块,从至少两个ddr控制器中选择一个ddr控制器作为目标ddr控制器,相比于现有技术中接口模块与ddr控制器一一对应的模式更加灵活,可以提高表项读取的可靠性,以及可以动态平衡共享各ddr接口之间的带宽。
126.基于相同的发明构思,本发明实施例还提供一种表项读取装置,应用于网络设备的表项读取器件,所述表项读取器件包括交叉模块、至少两个接口模块、至少两个控制器以及与每个控制器对应的存储器,所述表项读取装置包括命令交叉单元和数据交叉单元;
127.所述命令交叉单元,用于接收所述至少两个接口模块中的任意接口模块发送的读命令后,根据各个控制器的命令缓存队列中与所述任意接口模块对应的子命令缓存队列的状态信息和预设轮询规则确定目标控制器,在所述任意接口模块对应的控制器标识缓存队列中添加所述目标控制器的控制器标识,并将所述读命令添加到所述目标控制器的命令缓存队列中与所述任意接口模块对应的子命令缓存队列中;以及,按照负载均衡原则将各个控制器的各个命令缓存队列包括的各个子命令缓存队列中的读命令发送给对应的控制器,并将发送的读命令所在的子命令缓存队列对应的接口模块的模块标识添加到所述发送的读命令对应的控制器的模块标识缓存队列中,以使各个控制器从对应的存储器获取接收到的读命令对应的表项;
128.所述数据交叉单元,用于接收所述至少两个控制器中的任意控制器返回的表项后,从所述任意控制器对应的模块标识缓存队列中获取最先存储的目标模块标识,将接收到的表项添加到与所述目标模块标识对应的接口模块的表项缓存队列中与所述任意控制器对应的子表项缓存队列中;以及,根据各个接口模块对应的控制器标识缓存队列中各个控制器标识添加的先后顺序,将各个接口模块的各个表项缓存队列中与各个控制器对应的子表项缓存队列中的表项发送给对应的接口模块。
129.可选的,所述命令交叉单元具体用于:
130.根据预设轮询规则确定上一次确定的目标控制器之后的候选控制器;
131.确定所述候选控制器的命令缓存队列中与所述任意接口模块对应的子命令缓存队列的状态信息;
132.若确定与所述任意接口模块对应的子命令缓存队列的状态信息为繁忙状态,则将所述候选控制器更新为所述候选控制器之后的控制器,执行所述确定所述候选控制器的命
令缓存队列中与所述任意接口模块对应的子命令缓存队列的状态信息的步骤;
133.若确定与所述任意接口模块对应的子命令缓存队列的状态信息为非繁忙状态,则将所述候选控制器确定为本次的目标控制器。
134.可选的,所述命令交叉单元具体用于:
135.获取所述候选控制器的命令缓存队列中与所述任意接口模块对应的子命令缓存队列中存储的读命令的第一数量;
136.确定所述第一数量是否小于第一设定阈值;
137.若确定所述第一数量小于所述第一设定阈值,则确定与所述任意接口模块对应的子命令缓存队列的状态信息为非繁忙状态;
138.若确定所述第一数量不小于所述第一设定阈值,则确定与所述任意接口模块对应的子命令缓存队列的状态信息为繁忙状态。
139.可选的,所述将所述候选控制器确定为本次的目标控制器之前,所述命令交叉单元还用于:
140.确定所述候选控制器的状态信息;
141.若确定所述候选控制器的状态信息为异常,则将所述候选控制器更新为所述候选控制器之后的控制器,执行所述确定所述候选控制器的状态信息的步骤;
142.若确定所述候选控制器的状态信息为正常,则执行所述将所述候选控制器确定为本次的目标控制器的步骤。
143.可选的,所述命令交叉单元具体用于:
144.获取所述候选控制器发送的对获取的表项进行验证得到的错误信息;
145.确定获取的错误信息的第二数量是否大于第二设定阈值;
146.若确定所述第二数量大于所述第二设定阈值,则确定所述候选控制器的状态信息为异常;
147.若确定所述第二数量不大于所述第二设定阈值,则确定所述候选控制器的状态信息为正常。
148.可选的,所述数据交叉单元具体用于:
149.从各个接口模块对应的控制器标识缓存队列中获取最先存储的控制器标识;
150.将各个接口模块的各个表项缓存队列中与最先存储的控制器标识对应的子表项缓存队列中存储的表项发送给对应的接口模块。
151.可选的,所述将接收到的表项添加到与所述目标模块标识对应的接口模块的表项缓存队列中与所述任意控制器对应的子表项缓存队列中之后,所述数据交叉单元还用于:
152.从所述任意控制器对应的模块标识缓存队列中删除所述目标模块标识;
153.所述将各个接口模块的各个表项缓存队列中与各个控制器对应的子表项缓存队列中的表项发送给对应的接口模块之后,所述交叉模块还用于:
154.从各个接口模块对应的控制器标识缓存队列中删除最先存储的控制器标识。
155.基于相同的发明构思,本发明实施例还提供一种网络设备,包括表项读取器件,所述表项读取器件包括至少两个接口模块、至少两个控制器、与每个控制器对应的存储器以及上述任一项所述的表项读取装置。
156.进一步的,本技术实施例还提供了一种计算机可读存储介质,其上存储有计算机
指令,当所述计算机指令在计算机上运行时,使得计算机执行上述任一方法的步骤。
157.本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。
158.虽然以上描述了本技术的具体实施方式,但是本领域的技术人员应当理解,这些仅是举例说明,本技术的保护范围是由所附权利要求书限定的。本领域的技术人员在不背离本技术的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更和修改均落入本技术的保护范围。尽管已描述了本技术的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本技术范围的所有变更和修改。
159.显然,本领域的技术人员可以对本技术进行各种改动和变型而不脱离本技术的范围。这样,倘若本技术的这些修改和变型属于本技术权利要求及其等同技术的范围之内,则本技术也意图包含这些改动和变型在内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1