一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

处理单元及流控制单元、以及相关方法与流程

2022-03-22 20:01:22 来源:中国专利 TAG:


1.本公开涉及处理单元互连,更具体而言,涉及一种处理单元及流控制单元、以及相关方法。


背景技术:

2.人工智能(ai)芯片(如npu,神经网络加速单元)专用于对神经网络进行硬件加速和机器学习处理。在部署ai芯片时经常需要将ai芯片互连,以形成更大的处理网络,从而应对需要更多计算资源的ai任务。
3.如果ai芯片通信时,发送端ai芯片向接收端ai芯片发送的数据量超过了接收端ai芯片的接收缓冲器容量,就会发生数据溢出。因此,必须进行流控制。现有技术的一种流控制技术采用基于事先通知允许的流量值的机制。接收端ai芯片的接收缓冲器中的数据移入存储器后,这部分数据在接收缓冲器中不存在了,就可以根据该部分数据的大小(从接收缓冲器转移到接收端存储器的数据量),向发送端ai芯片发送表示允许其向自己发送多少分组的数据的流量值。随着接收端ai芯片使用过程中不断从接收缓冲器向存储器转移数据量,不断更新向发送端ai芯片发出的流量值。发送端ai芯片每当发出数据,就相当于消耗了对应的流量值。每次发送端ai芯片在向接收端ai芯片发送数据之前,都检查要发出的数据大小是否不大于流量极值与已消耗流量值的差,如果是,才能发出数据。
4.上述基于事先通知允许的流量值的机制虽然减少了数据溢出,但有发生死通信的风险。如果发送端ai芯片发送到接收端ai芯片的数据在传输中丢失了,由于接收端ai芯片没有接收到此数据,就不会在接收缓冲器中缓冲,更不会从接收缓冲器移至存储器,进而触发向发送端ai芯片更新流量值。这样,向发送端ai芯片释放的总流量值就少于预期。如果越来越多的数据途中丢失,发送端ai芯片接收不到更新的流量值,就无法再发送数据,陷入死通信。


技术实现要素:

5.有鉴于此,本公开旨在避免由于数据中途丢失而使发送端没有更新的流量值可用来发出数据的情况,从而避免死通信的发生。
6.为了达到这个目的,根据本公开的一方面,本公开提供了一种流控制单元,位于发送端,包括:
7.第一流量极值存储器,用于存储第一流量极值,所述第一流量极值根据位于接收端的流控制单元发送的第一流量值来更新,所述第一流量值表示所述接收端允许进一步接收的数据量;
8.第一流量消耗存储器,用于存储所述发送端已消耗的流量值,所述已消耗的流量值表示所述发送端已发送至所述接收端的数据量;
9.比较器,用于确定待发送数据的大小未超过所述第一流量极值与所述已消耗的流量值的差,允许所述待发送数据被发送到所述接收端;
10.第二流量产生器,将所述已消耗的流量值作为第二流量值,发送给所述位于接收端的流控制单元,以便所述位于接收端的流控制单元根据所述第二流量值与所述接收端已从所述发送端接收的数据量的差,调整下一次发送到所述第一流量极值存储器的第一流量值。
11.可选地,所述发送端包括发送端处理单元,所述流控制单元位于所述发送端处理单元中;所述接收端包括接收端处理单元,所述接收端的流控制单元位于所述接收端处理单元中。
12.可选地,该流控制单元还包括:
13.第一流量值解析器,用于从位于接收端的流控制单元接收到的当前第一流量值通知分组中解析出流量值;
14.前一第一流量值缓冲器,缓存从位于接收端的流控制单元接收到的前一第一流量值通知分组中解析出的流量值;
15.减法器,用于用从当前第一流量值通知分组中解析出的流量值,减去所述前一第一流量值缓冲器缓存的流量值,得到流量值差值;
16.第一加法器,用于将所述流量值差值累加到第一流量极值存储器存储的第一流量极值上。
17.可选地,在所述减法器得到所述流量值差值之后,所述流量值解析器用从当前第一流量值通知分组中解析出的流量值,更新所述前一第一流量值缓冲器。
18.可选地,该流控制单元还包括:第二加法器,用于在向所述接收端发送数据之后,将发送的数据大小累加到第一流量值消耗存储器存储的已消耗的流量值上。
19.可选地,第二流量值产生器将所述第二流量值放在第二流量值通知分组中,发送到所述接收端。
20.可选地,所述第一流量值解析器对从接收端接收到的当前第一流量值通知分组进行传输错误校验,如校验错误,丢弃该当前第一流量值通知分组。
21.可选地,所述当前第一流量值通知分组包括第一流量值初始通知分组、和第一流量值更新通知分组,所述发送端芯片流控制单元还包括第一流量值初始确认分组产生器,用于在第一流量值极值存储器存储所述第一流量值初始通知分组通知的流量值后,产生向所述接收端发送的第一流量值初始确认分组。
22.可选地,所述发送端向所述接收端发送的数据、所述第一流量值初始通知分组、所述第一流量值更新通知分组、所述第一流量值初始确认分组、所述第二流量值通知分组是以流量值消息分组格式传输的,所述流量值消息分组格式包括目的地芯片地址、源芯片地址、分组类型、通知的流量值、填充位、传输错误校验位。
23.可选地,所述第一流量极值存储器存储的第一流量极值包括与多个接收端的虚拟通道分别对应的多个第一流量极值;所述第一流量消耗存储器存储发送端针对所述多个接收端的虚拟通道分别已消耗的流量值;所述比较器确定数据要发送到的接收端的虚拟通道,如果待发送数据大小未超过所述接收端的虚拟通道对应的流量极值与该接收端的虚拟通道对应的已消耗的流量值的差,允许该数据发送到所述接收端的虚拟通道;第二流量值产生器将针对所述多个接收端的虚拟通道分别已消耗的流量值分别作为与所述多个接收端的虚拟通道各自对应的第二流量值,以分别发送给所述多个接收端;所述通知的第二流
量值包括多个接收端的虚拟通道对应的第二流量值。
24.可选地,所述流量值或第二流量值的单位设定等于64字节,第一流量值初始通知分组中的初始流量值设定为1440个流量值单位,所述第一流量极值存储器和所述第一流量值消耗存储器存储的最大值为4096个流量值单位,超过最大值后复位存储。
25.可选地,发送所述流量值或第二流量值的周期是所述发送端向所述接收端发送数据的周期的n倍,n为大于等于2的正整数。
26.可选地,n=8或n=16。
27.根据本公开的一方面,提供了一种处理单元,位于发送端,包括:存储器;直接存储器访问模块,用于控制所述所述存储器的直接访问;多个端口;交换模块,控制所述直接存储器访问模块与所述多个端口的连接,其中,所述多个端口中的至少一个端口包括根据权利要求1-13所述的发送端芯片流控制单元、用于进行介质访问控制mac的mac层、以及将待发送数据进行串行化或对接收的数据进行解串行化的串行及解串器。
28.根据本公开的一方面,提供了一种流控制单元,位于接收端,包括:
29.接收数据缓冲器,用于缓冲从发送端接收的数据;
30.第二流量值存储器,用于存储从发送端接收的第二流量值;
31.已接收数据大小存储器,用于存储从发送端已接收的数据大小;
32.差计算单元,用于计算所述第二流量值存储器中存储的第二流量值和所述已接收数据大小存储器存储的已接收到的数据大小的差;
33.第一流量值分配单元,用于在根据所述第二流量值与已接收到的数据大小的差、以及所述接收数据缓冲器发送到接收端存储器的数据量,更新发送给发送端的流量值。
34.可选地,所述接收端包括接收端处理单元,所述流控制单元位于所述接收端处理单元中;所述发送端包括发送端处理单元,所述发送端的流控制单元位于所述发送端处理单元中。
35.可选地,所述已接收数据大小存储器存储的初始值设置为0,所述流控制单元还包括:第三加法器,用于响应于从所述发送端接收到数据,将接收的数据大小累加到所述已接收数据大小存储器存储的值上。
36.可选地,所述第三加法器在所述差计算单元计算出所述差后,将所述差累加到所述已接收数据大小存储器存储的值上。
37.可选地,该流控制单元还包括:第五加法器,用于将所述第二流量值与已接收到的数据大小的差、以及所述接收数据缓冲器发送到接收端存储器的数据量累加到第一流量值分配单元已分配的流量值上。
38.可选地,该流控制单元还包括:第一流量值通知分组产生器,用于将更新后的流量值放在第一流量值通知分组中,发送到所述发送端。
39.可选地,该流控制单元还包括:第二流量值解析器,用于从所述发送端接收到的第二流量值通知分组中解析出第二流量值,存储到所述第二流量值存储器中。
40.可选地,所述当前第一流量值通知分组包括第一流量值初始通知分组、和第一流量值更新通知分组;所述接收端芯片流控制单元在向所述发送端芯片流控制单元发送第一流量值初始通知分组之后,还接收到所述发送端芯片流控制单元发送的第一流量值初始确认分组。
41.可选地,所述发送端向所述接收端发送的数据、所述第一流量值初始通知分组、所述第一流量值更新通知分组、所述第一流量值初始确认分组、所述第二流量值通知分组是以流量值消息分组格式传输的,所述流量值消息分组格式包括目的地芯片地址、源芯片地址、分组类型、通知的流量值、填充位、传输错误校验位。
42.可选地,所述第二流量值存储器存储的第二流量值包括与多个发送端的虚拟通道分别对应的多个第二流量值;所述已接收数据大小存储器分别存储从所述多个发送端的虚拟通道已接收的数据大小;所述差计算单元分别计算所述第二流量值存储器中存储的与多个发送端的虚拟通道对应的多个第二流量值和所述已接收数据大小存储器存储的与所述多个发送端的虚拟通道对应的已接收到的数据大小的差;所述第一流量值分配单元根据针对所述多个发送端的虚拟通道得到的所述差、以及所述接收数据缓冲器中的针对所述多个发送端的虚拟通道的发送到接收端存储器的数据量,分别更新发送给发送到所述多个发送端的虚拟通道的多个第一流量值,所述通知的第一流量值包括多个发送端的虚拟通道对应的第一流量值。
43.可选地,所述接收数据缓冲器的大小设定为720k比特,流量值的单位设定等于64字节,第一流量值初始通知分组中的初始流量值设定为1440个流量值单位,所述第二流量值存储器存储的第二流量值和所述已接收数据大小存储器存储的已接收的数据大小的最大值为4096个流量值单位,超过最大值后复位存储。
44.可选地,发送所述流量值或第二流量值的周期是所述发送端向所述接收端发送数据的周期的n倍,n为大于等于2的正整数。
45.可选地,n=8或n=16。
46.根据本公开的一方面,提供了一种处理单元,位于接收端,包括:存储器;直接存储器访问模块,用于控制所述所述存储器的直接访问;多个端口;交换模块,控制所述直接存储器访问模块与所述多个端口的连接,其中,所述多个端口中的至少一个端口包括根据权利要求15-27所述的接收端芯片流控制单元、用于进行介质访问控制mac的mac层、以及将要发送的数据进行串行化或对接收的数据进行解串行化的串行及解串器。
47.根据本公开的一方面,提供了一种发送端流控制方法,包括:
48.根据接收端发送的流量值,更新第一流量极值,所述发送的流量值为接收端当前允许增加接收的数据量;
49.如果要发送的数据大小未超过所述第一流量极值与已消耗的流量值的差,允许该数据发送到所述接收端,其中,所述已消耗的第一流量值等于发送端已发送到接收端的数据量;
50.将所述已消耗的流量值作为第二流量值,以发送给所述接收端,以便所述接收端根据第二流量值与接收端已从所述发送端接收的数据量的差调整发送到发送端的所述流量值。
51.可选地,所述根据接收端发送的流量值,更新第一流量极值,包括:
52.从接收端接收到的当前第一流量值通知分组中解析出流量值;
53.从当前第一流量值通知分组中解析出的流量值,减去从接收端接收到的前一第一流量值通知分组中解析出的流量值,得到流量值差值;
54.将所述流量值差值累加到第一流量极值存储器存储的流量值上。
55.可选地,在允许该数据发送到所述接收端之后,所述方法还包括:将发送的数据大小累加到所述已消耗的流量值上。
56.可选地,所述将所述已消耗的流量值作为第二流量值,以发送给所述接收端,包括:所述将所述已消耗的流量值作为第二流量值放在第二流量值通知分组中,以发送给所述接收端。
57.可选地,在从接收端接收到的当前第一流量值通知分组中解析出流量值之前,所述方法还包括:对从接收端接收到的当前第一流量值通知分组进行传输错误校验,如校验错误,丢弃该当前第一流量值通知分组。
58.根据本公开的一方面,提供了一种接收端芯片流控制方法,包括:
59.将从发送端接收的数据存储在接收数据缓冲器中;
60.从发送端接收第二流量值;
61.获取从发送端芯片已接收的数据大小;
62.计算所述第二流量值和所述已接收的数据大小的差;
63.根据所述差、以及从所述接收数据缓冲器转移到接收端存储器的数据量,更新发送给发送端的流量值。
64.可选地,所述获取从发送端已接收的数据大小,包括:
65.设置已接收数据大小存储器,该已接收数据大小存储器存储的初始值为0;
66.响应于从所述发送端接收到数据,将接收的数据大小累加到所述已接收数据大小存储器存储的值上;
67.从所述已接收数据大小存储器读取所述已接收的数据大小。
68.可选地,在计算所述第二流量值和所述已接收的数据大小的差之后,所述方法还包括:将所述差累加到所述已接收数据大小存储器存储的值上。
69.可选地,所述根据所述差、以及以及从所述接收数据缓冲器转移到接收端存储器的数据量,更新发送给发送端的流量值,包括:
70.将所述第二流量值与已接收到的数据大小的差、以及从所述接收数据缓冲器转移到接收端存储器的数据量累加到已分配用于发送到所述发送端的流量值上;
71.将所述流量值发送到所述发送端芯片。
72.可选地,所述将所述流量值发送到所述发送端,包括:将所述流量值放在第一流量值通知分组中,发送到所述发送端。
73.可选地,所述从发送端接收第二流量值,包括:从所述发送端接收到的第二流量值通知分组中解析出第二流量值。
74.区别于现有技术基于单向流量值的流控制机制,本公开实施例提出了一种基于双向流量值的流控制机制。也就是说,不只接收端根据自己的接收数据缓冲器的数据向存储器的转移情况向发送端芯片发送允许发送的流量值,以通知发送端还能发送多少数据,发送端也要向接收端发送已消耗的流量值(即发送端已经向接收端发送了多少数据)作为第二流量值,使得接收端能够比较第二流量值与接收端已从所述发送端接收的数据量,看二者是否一致,如不一致说明数据传输途中丢失,这样就可以根据二者的差调整发送到发送端的流量值,保证发送和接收端流量值同步。通过上述方法,即使数据传输中丢失,允许发送的流量值也能自动校正,不会陷入死通信。
附图说明
75.通过参考以下附图对本公开实施例的描述,本公开的上述以及其它目的、特征和优点将更为清楚,在附图中:
76.图1是本公开实施例所应用的处理单元互连的整体构架图;
77.图2是两个互连的处理单元内部结构图;
78.图3是现有技术的发送端流控制单元和接收端流控制单元的内部结构图。
79.图4是根据本公开一个实施例的发送端流控制单元和接收端流控制单元的内部结构图。
80.图5是根据本公开一个实施例的发送端的流控制方法的流程图。
81.图6是根据本公开一个实施例的接收端的流控制方法的流程图。
82.图7是根据本公开一个实施例的流量值消息分组的通用格式示意图。
具体实施方式
83.以下基于实施例对本公开进行描述,但是本公开并不仅仅限于这些实施例。在下文对本公开的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本公开。为了避免混淆本公开的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
84.术语解释
85.在本文中使用以下术语。
86.处理单元:通过运行程序以进行信息处理的单元,包括用于执行通用运算的传统处理单元(中央处理器等)、和对一些传统处理单元处理速度较慢的事务处理进行加速的加速单元,例如,针对传统处理单元在处理神经网络领域的计算时效率不高的情况,为了提高在神经网络领域中的数据处理速度而设计的加速单元,包括中央处理器(cpu)、图形处理器(gpu)、通用图形处理器(gpgpu)、现场可编程门阵列(fpga)、专用集成电路(asic)、以及专用智能加速硬件(例如,神经网络处理器npu)。
87.流量值:接收端累计允许接收的数据量,也就是接收端历史上允许发送端发送的数据量的累加值。它不是每次接收数据缓冲器新空闲出的数据增量,而是历史上所有这些增量的累计值。接收端接收到的数据缓存在接收数据缓冲器中,然后正式存储到存储器。一旦接收数据缓冲器有数据移入存储器,接收数据缓冲器就又空闲出来一部分存储容量用来接收新的数据。接收端将新增的允许发送端发送的数据量不断累加,成为第一流量值。
88.第一流量极值:发送端所知晓的接收端累计允许接收的数据量。也就是说,上述流量值是接收端知晓的自己累计允许接收的数据量,而第一流量极值是发送端知晓的接收端累计允许接收的数据量,二者实际上是同一量从不同角度观察的结果。接收端每次发送流量值到发送端,发送端从中提取出流量值增量,即该流量值与上一次接收到的流量值的差值,然后将该差值不断累积到第一流量极值上,使得第一流量极值反映所有这些差值的和,最后也就是发送端角度来看的接收端累计允许接收的数据量。它反映了接收端历史上曾经空闲出的存储容量的总和。它可能会大于接收端的接收数据缓冲器的存储容量,因为接收数据缓冲器的同一存储空间会多次反复空闲出,该部分存储空间会反复地体现在该流量值和第一流量极值中。但由于消耗的流量值(即发送端已经向接收端发送的数据量总和)也是
反复累加的,即只要发送端向接收端发送数据,就消耗流量值,不管消耗的是流量值中同一存储空间首次出现的部分,还是之后多次反复出现的部分,因此,可以将消耗的流量值与第一流量极值比较,确定差值,根据该差值,确定是否可以让接下来的数据从发送端向接收端发出。
89.已消耗的流量值:发送端已发送到接收端的数据量。只要发送端向接收端发送数据,就消耗上述流量值,将新发送的数据量累加到已消耗的流量值上。
90.第二流量值:发送端已消耗的流量值,即发送端已发送到接收端的数据量。第二流量值反映的是一个累积量,不是增量,它是历史上发送端已发送到接收端的数据总量。在接收端记录有其从发送端历史上接收到的数据总量。二者相减就可以得到传输中丢失的数据量。弥补该数据量后,就可以实现发送端与接收端的信用量同步。
91.第一流量值通知分组:用于接收端向发送端通知允许发送的流量值的分组。其包括第一流量值初始通知分组、和第一流量值更新通知分组。第一流量值初始通知分组是指发送端尚未有数据传输到接收端时接收端向发送端通知流量值的分组。第一流量值更新通知分组是指发送端已经有数据传输到接收端时接收端向发送端通知更新的流量值的分组。
92.第二流量值通知分组:用于发送端向接收端通知第二流量值的分组。
93.传输错误校验:针对接收的数据分组,验证其在传输过程中是否发生错误的校验,包括循环冗余校验(crc)等。
94.第一流量值初始确认分组:发送端接收到接收端发来的第一流量值初始通知分组,向接收端确认其已收到该第一流量值初始通知分组的分组。
95.流量值消息分组格式:用于传输发送端向接收端发送的数据、第一流量值初始通知分组、第一流量值更新通知分组、第一流量值初始确认分组、第二流量值通知分组的通用格式。
96.流量值单位:流量值的记录单位,每单位的流量值对应于固定大小的数据量。
97.复位存储:存储量数据的累加值超过规定的最大值时变成0,在此基础上继续累加存储。
98.死通信:在以流量值为允许发送更多数据的凭据的条件下,如果发送端无法继续接收到接收端发送的流量值,就无法继续向接收端发送数据,叫做死通信。
99.直接存储器访问(dma):直接存储器访问是一种高速数据传输的方法,数据可以从一个通道,不经过cpu的处理就直接在存储器或输入输出设备之间进行传输。一个设备接口试图通过总线直接向另一个设备发送数据(一般是大批量的数据),它会先向cpu发送dma请求信号。外设通过dma的一种专门接口电路――dma控制器(dmac),向cpu提出接管总线控制权的总线请求,cpu收到该信号后,在当前的总线周期结束后,会按dma信号的优先级和提出dma请求的先后顺序响应dma信号。cpu对某个设备接口响应dma请求时,会让出总线控制权。于是在dma控制器的管理下,外设和存储器直接进行数据交换,而不需cpu干预。数据传送完毕后,设备接口会向cpu发送dma结束信号,交还总线控制权。
100.介质访问控制(mac):一种解决当局域网中共用信道的使用产生竞争时,如何分配信道的使用权问题的机制。它定义了数据帧怎样在介质上进行传输。在共享同一个带宽的链路中,对连接介质的访问是“先来先服务”的。物理寻址在此处被定义,逻辑拓扑(信号通过物理拓扑的路径)也在此处被定义。线路控制、出错通知(不纠正)、帧的传递顺序和可选
择的流量控制也在这一层实现。
101.串行化:将并行数据转换成串行数据从而在处理单元之间进行传输。
102.解串行化:由于处理单元之间传输的数据是串行数据,处理单元接收后需要将串行数据解成并行数据后处理和存储,将串行数据解成并行数据的过程叫做解串行化。
103.本公开实施例产生的背景和大体网络结构
104.处理单元是通过运行程序以进行信息处理的单元。其包括用于执行通用运算的传统处理单元(中央处理器等)、和对一些传统处理单元处理速度较慢的事务处理进行加速的加速单元,例如,针对传统处理单元在处理神经网络领域的计算时效率不高的情况,为了提高在神经网络领域中的数据处理速度而设计的加速单元,包括中央处理器(cpu)、图形处理器(gpu)、通用图形处理器(gpgpu)、现场可编程门阵列(fpga)、专用集成电路(asic)、以及专用智能加速硬件(例如,神经网络处理器npu)。人工智能领域,处理单元常体现为人工智能(ai)芯片。
105.ai领域中,可以将处理单元互连,以形成一个大型处理网络,来处理需要更多计算能力的ai任务,如图1所示。在图1中,示出了多个处理单元110的互连。每个处理单元110有四个端口120,即p0-p3,用于在四个方向上与不同其它处理单元110互连。与四个端口120对应的是四个存储器110,用来存储与不同其它处理单元110通信需要的数据。例如,接收自四个不同其它处理单元110的数据可以分别存储在四个存储器110中。虽然图中端口120和存储器110都示出了四个,实际上本领域技术人员理解,也可以有其它数目的端口120和存储器110。
106.图1中,处理单元a可以将数据从内部存储器m0通过端口p0传输到相邻处理单元b,通过处理单元b的端口p2存储到处理单元b的存储器m2。处理单元b可以将数据从处理单元b的存储器m3通过端口p3移动到相邻处理单元e,通过处理单元e的端口p1存储到处理单元e的存储器m1,等等。
107.已有的一种构建处理单元互连的方法是采用pcie接口并引入pcie交换机构建互连网络。但是,通过pcie交换机导致吞吐量低、等待时间长,无法满足ai应用的要求。
108.现有技术为了提高吞吐量和延迟的性能,采用图2的结构来实现处理单元互连。如图2所示,处理单元100包括4个端口120、交换模块140、直接存储器访问(dma)模块130、存储器110。图中虽然示出了4个端口120,但本领域技术人员理解,也可以设置其它数目的端口120。每个端口120包括串行及解串器121、介质访问控制(mac)层122、发送端流控制单元123、接收端流控制单元124。
109.串行及解串器121用于将要发送的数据转换成串行数据从而在处理单元间高速传输,并将处理单元间的串行数据转换成并行数据以便处理和存储。将并行数据转换成串行数据从而在处理单元之间进行传输叫做串行化。将串行数据解成并行数据的过程叫做解串行化。
110.mac层122主要解决的是当局域网中共用信道的使用产生竞争时,如何分配信道的使用权问题。它定义了数据帧怎样在介质上进行传输。在共享同一个带宽的链路中,对连接介质的访问是“先来先服务”的。物理寻址在此处被定义,逻辑拓扑(信号通过物理拓扑的路径)也在此处被定义。
111.发送端流控制单元123是当处理单元向外发出数据时,控制数据何时发出的单元。
接收端流控制单元124是当处理单元接收数据时控制数据接收的单元。关于流量值的控制都是在这两个部分完成的。它也是本公开实施例通过对第二流量值的控制来避免死通信的主要单元。
112.交换模块140是用于实现各端口120与存储器110的数据交换的模块。图2中,交换模块140与四个端口120各有一对输入和输出端口(这里的端口是交换模块140内部的端口,不是上述的四个端口120,其与上述的四个端口120对接),与直接存储器访问模块130与一对输入和输出端口。
113.直接存储器访问(dma)模块130是用于处理单元100外部与处理单元100内部的存储器110进行dma通信的模块。dma是一种高速数据传输的方法,数据可以从一个通道,不经过cpu的处理就直接在存储器或输入输出设备之间进行传输。一个设备接口试图通过总线直接向另一个设备发送数据(一般是大批量的数据),它会先向cpu发送dma请求信号。外设通过dma的一种专门接口电路――dma控制器(dmac),向cpu提出接管总线控制权的总线请求,cpu收到该信号后,在当前的总线周期结束后,会按dma信号的优先级和提出dma请求的先后顺序响应dma信号。cpu对某个设备接口响应dma请求时,会让出总线控制权。于是在dma控制器的管理下,外设和存储器直接进行数据交换,而不需cpu干预。由于处理单元之间的通信链路不是100%可靠的,在某些情况下必须重传数据。因此,即使发送端已发送数据,发送端的dma模块130仍然会将数据锁定在存储器110中,直到收到来自接收端的确认(ack)信号为止。如果接收到ack信号,指示数据已被接收端成功接收,则dma模块130可以释放地址空间,重新分配。如果接收到非确认(nak)信号,则dma模块130将重新传输数据,达到省略专用的重传缓冲区的目的。
114.存储器110是处理单元100中存储数据的部分。处理单元100的各端口120接收的数据最后都进入存储器110存储。处理单元100的各端口120发送的数据也来自存储器110。
115.图2的结构中,每个端口120支持800gbps的数据通信。这样,图2的每个处理单元支持通过4个端口向4个其它处理单元发送和接收共计3200gbps的数据。
116.将用于发送数据的处理单元100称为发送端处理单元1001,将用于接收数据的处理单元100称为接收端处理单元1002。由于接收端处理单元1002接收到的数据要先缓存在接收数据缓冲器中,再转移到存储器110,如果处理单元通信时,发送端处理单元1001向接收端处理单元1002发送的数据量超过了接收端处理单元1002的接收缓冲器容量,就会发生数据溢出。因此,现有技术采用图3的方式进行流控制。在图3中,只示出了发送端处理单元1001的发送端流控制单元123、和接收端处理单元1002的接收端流控制单元124,但实际上,发送端处理单元1001也有接收端流控制单元124,接收端处理单元1002也有发送端流控制单元123,只不过本文中主要着眼于从发送端处理单元1001向接收端处理单元1002发送数据,因此,发送端处理单元1001的接收端流控制单元124、接收端处理单元1002的发送端流控制单元123没有发挥作用。另外,由于本公开实施例主要由发送端流控制单元123和接收端流控制单元124完成,因此,图3中省略了图2中串行及解串器121、mac层122、切换模块140、dma模块130、存储器110这些部分。
117.为了防止溢出,发送端处理单元1001需要根据接收端处理单元1002能够接收的数据量进行数据发送。因此,其采用一种预先通知允许发送的流量的机制。接收端的接收数据缓冲器12401中的数据移入存储器110后,这部分数据在接收数据缓冲器12401中不存在了,
就可以根据该部分数据的大小(接收数据缓冲器12401新向接收端存储器转移的数据大小),向发送端处理单元1001发送表示允许其向自己发送多少分组的数据的流量值。随着接收端在使用过程中接收数据缓冲器12401不断向接收端存储器转移数据,不断更新向发送端发出的流量值。发送端处理单元1001每当发出数据,就相当于消耗了对应的流量值。每次发送端处理单元1001在向接收端处理单元1002发送数据之前,都检查要发出的数据大小是否不大于流量极值与已消耗流量值的差,如果是,说明不会使接收端的接收数据缓冲器12401溢出,才能发出数据。
118.如图3所示,当接收端处理单元1002没有接收到来自发送端处理单元1001的数据时,接收数据缓冲器12401没有存储任何数据,允许发送端处理单元1001向自己发送的数据大小就是整个接收数据缓冲器12401的大小,这时第一流量值分配单元12402分配初始的第一流量值,其大小就是接收数据缓冲器12401的大小。第一流量值通知分组产生器12403将该初始的第一流量值放在第一流量值初始通知分组中,通过发送器12405发送到所述发送端流控制单元123。
119.发送端处理单元1001的接收器12311接收到该第一流量值初始通知分组。第一流量值解析器12305从接收端流控制单元124接收到的该第一流量值初始通知分组中解析出流量值,反映到第一流量极值存储器12302中。
120.第一流量极值存储器12302存储第一流量极值。第一流量极值是发送端从接收端接收的流量值的累加值。它反映了从开始计数起,发送端处理单元1001从接收端芯片1002接收到了多少流量值,即接收端历史上曾经空闲出的存储容量的总和。发送端从接收端接收的初始流量值是接收数据缓冲器12401的整个存储容量。发送端按照该初始流量值发送数据到接收端,填满接收数据缓冲器12401。之后,该接收数据缓冲器12401一部分数据转移到存储器110,就会空闲出一部分存储空间。因数据转移而空闲出多少存储空间,发送端就从接收端接收到多大的更新流量值。每当接收数据缓冲器12401向接收端存储器转移数据,接收端处理单元1002将该转移数据量累加到流量值上发送给发送端处理单元1001,最终累加到发送端处理单元1001记录的第一流量极值中。因此,第一流量极值一般会大于接收端的接收数据缓冲器12401的存储容量,因为接收数据缓冲器12401的同一存储空间会多次反复空闲出,该部分存储空间会反复地累加到流量值和第一流量极值中。
121.当在第一流量极值存储器12302存储了初始流量值之后,发送端的第一流量值初始确认分组产生器12319就通过发送端的发送器12310向接收端发送第一流量值初始确认分组。
122.第一流量值消耗存储器12303存储消耗的流量值,即发送端已经向接收端发送的数据量总和。发送端向接收端发送数据,就会在第一流量值消耗存储器12303增加相应大小的流量值。第一流量极值存储器12302存储的流量极值是接收端允许发送端发送的数据量,第一流量值消耗存储器12303存储的消耗的流量值是按照第一流量极值已经发走的数据量,两者的差值就是还允许发送端额外发送的数据量。比较器12304比较发送数据缓冲器12301中当前要发送到接收端的数据量是否不超过该差值,如果不超过,就可以让接下来的数据从发送端向接收端发出。如果超过,则不能发出。但由于之后第一流量极值存储器12302存储的第一流量极值是会增长的,一定会等到一个不超过的时刻,让接下来的数据从发送端向接收端发出。
123.当将要发送的数据分组通过发送端流控制单元123的发送器12310向接收端发送后,通过第二加法器12309,将发送的数据大小累加到第一流量值消耗存储器12303存储的已消耗的流量值上。
124.接收端流控制单元124通过其接收器12406接收到发送端发送的数据分组后,存储在接收数据缓冲器12401,直到接收数据缓冲器12401填满。接收数据缓冲器12401填满后,接收数据缓冲器12401中存储的接收的数据会转移到接收端的存储器110中。这样,接收数据缓冲器12401又重新空闲出存储容量。这时,又重新可以接收来自发送端的数据。因此,通过第五加法器12404将所述接收数据缓冲器12401中新转移到接收端存储器的数据量累加到第一流量值分配单元12402已分配的流量值上。之前,第一流量值分配单元12402已分配的流量值是接收数据缓冲器12401的整个存储容量,此时第一流量值分配单元12402分配的流量值就变成接收数据缓冲器12401的整个存储容量加上接收数据缓冲器12401新转移到接收端存储器的数据量的和,即历史上允许发送端发送到接收端的数据量。接着,第一流量值通知分组产生器12403用于将更新后的流量值放在第一流量值更新通知分组中,通过发送端的发送器12405发送到发送端流控制单元123。
125.发送端的第一流量值解析器12305通过发送端的接收器12311接收到第一流量值更新通知分组,从中解析出更新后的流量值。该更新后的流量值实际上是历史上接收端允许发送端向其发送数据的总量。前一第一流量值缓冲器12306缓存从接收端流控制单元123接收到的前一第一流量值通知分组中解析出的流量值,也就是接收到当前的流量值更新通知分组之前接收端允许发送端向其发送数据的总量。减法器12307将二者相减,得到的是该当前的第一流量值更新通知分组新允许发送端向接收端发送的数据量,即流量值差值。第一加法器12308将所述流量值差值累加到第一流量极值存储器12302存储的流量极值上,就得到更新后的第一流量极值。更新后的第一流量极值反映的是历史上接收端总共允许发送端向其发送的数据量。
126.在发送端之所以采取先接收更新后的流量值,再据此得到第一流量值差值,再将该差值累加到第一流量极值的方式,而不是采用直接让接收端传输流量值的差值,即接收数据缓冲器12401新转移到接收端存储器的数据量的方式,是为了避免传输丢失造成的影响。如果接收端向发送端直接发送流量值的差值,一旦差值在传输中丢失,第一流量极值存储器12302中存储的第一流量极值就永远无法反映出丢失的这部分差值。如果发送的是更新后的流量值,即使该值在传输过程中丢失,由于第一流量值分配单元12402分配的流量值永远是在前一次分配的第一流量值的基础上累加,因此,在更新后的整个流量值中其实并没有丢失该差值,这样,第一流量值解析器12305接收到下一个第一流量值更新通知分组后,解析出更新后的流量值,与前一第一流量值缓冲器12306缓存的值相减时,得到差就变成接收端最近两次向发送端传输的第一流量值差值的和,因此,即使传输丢失,丢失的流量值差值也会在后续过程中正确累加到第一流量极值存储器12302中,避免了传输丢失造成的影响。
127.另外,第一流量值解析器12305对从接收端接收到的第一流量值通知分组可以进行传输错误校验。传输错误校验是针对接收的数据分组,验证其在传输过程中是否发生错误的校验,包括循环冗余校验(crc)等。如校验错误,丢弃该第一流量值通知分组。这样做可以提高接收的流量值的可靠性。丢弃该第一流量值通知分组不会产生丢失应接收的流量值
的风险。理由同上。即使该当前流量值被丢弃,接收端芯片1002下一个发送过来的流量值是在当前流量值基础上累加的,这样,第一流量值解析器12305接收到下一个第一流量值更新通知分组后,解析出更新后的流量值,与前一第一流量值缓冲器12306缓存的值相减时,得到差就变成接收端当前和下一次向发送端传输的第一流量值差值的和,因此,即使传输丢失,丢失的流量值差值也会在后续过程中正确累加到第一流量极值存储器12302中,避免了传输丢失造成的影响。
128.在减法器12307得到第一流量值差值之后,所述第一流量值解析器12305可以用从当前第一流量值通知分组中解析出的流量值,更新所述前一第一流量值缓冲器12306,因为在下一次计算流量值差值时,当前的流量值实际上变成了下一次计算中的前一个流量值。这样做是为了使下一次的流量值差值计算具有正确的前提。
129.当发送端要发送数据到接收端时,比较器12304从发送数据缓冲器12301中取出要发送的数据,将该数据大小与所述第一流量极值存储器12302存储的流量极值与所述第一流量值消耗存储器12303存储的已消耗的流量值的差作比较,如果要发送的数据大小未超过所述差,说明发送该数据不会引起接收端的接收数据缓冲器12401溢出,可以发出该数据。经发送端的发送器12310发出该数据后,第二加法器12309将发送的数据大小累加到第一流量值消耗存储器12303存储的已消耗的流量值上,使已消耗的流量值一直反映发送端已发送给接收端的数据量。
130.发送端将数据发送到接收端后,接收端流控制单元124重复上述同样的处理,从而实现数据的持续发送。
131.上述基于流量值的流量控制相对于之前的技术的优势包括:
132.(1)即使在途中丢失第一流量值通知分组,也绝不会造成溢出。这是由于如上所述的原因,第一流量值解析器12305接收到下一个未丢失的流量值后,与前一第一流量值缓冲器12306缓存的值相减时,得到差就变成接收端这次和下一次向发送端传输的流量值差值的和。因此,即使传输丢失,丢失的流量值差值也会在后续过程中正确累加到第一流量极值存储器12302中,避免了传输丢失造成的影响。
133.(2)该机制能够准确知道接收数据缓冲器12401转移到接收端存储器的空间大小,充分利用接收数据缓冲器12401的空间,而不是为数据包预留一些缓冲区空间,造成浪费。
134.(3)由于合理评估发送端发送到接收端的数据大小,发送效率提高,从数据等待的状态切换到发送新数据的状态的时间缩短了。
135.(4)接收数据缓冲器12401的大小可灵活控制。
136.但是,由于链路不是100%可靠的,基于流量值的流量控制存在通信中断的风险,即死通信。在上述的过程中,如果从发送端向接收端发送的数据在传输途中丢失,没有到达接收端,这时在发送端认为已经发出,因此在第一流量值消耗存储器12303中累加了消耗的流量值,但是接收端没有接收到数据,无法根据接收数据缓冲器12401相应数据空间的释放来分配新的流量值,发送端也无法接收到新的流量值,从而更新第一流量极值存储器12302中的第一流量极值。这样,第一流量极值存储器12302中的第一流量极值得不到增加,第一流量值消耗存储器12303中的消耗的流量值却不断增加,导致二者的差越来越小,这样要从发送数据缓冲器12301发送的数据变得无法发出,导致发送端处理单元100和接收端处理单元1002之间陷入死通信。
137.本公开实施例的基于双向流量值的流控制机制
138.基于双向流量值的流控制机制意味着,不仅接收端将表示接收端允许发送端向自己发送多少数据的流量值发送给发送端,发送端也将表示发送端已经累计向接收端发送了多少数据的第二流量值发送给接收端。接收端接收到该第二流量值,会与其内部计数的已经从发送端接收的总数据大小进行比较,如果出现偏差,将该偏差弥补到下次要发送给发送端的流量值中,从而使第一流量极值存储器12302存储的第一流量极值在发生死通信时还有机会被校正,从而避免死通信。
139.根据本公开一个实施例的基于双向流量值的流控制机制如图4所示。图4与图3在发送端流控制单元123部分的不同在于,图4的发送端流控制单元123增加了第二流量值产生器12312。第二流量值产生器12312将第一流量值消耗存储器12303中存储的消耗的流量值(实际上就是发送端已经向接收端发送了多少数据)作为第二流量值,以发送给接收端流控制单元124。具体地说,第二流量值产生器12312将第二流量值放在第二流量值通知分组中,通过发送端的接收器12311发送到接收端流控制单元124。图4的发送端流控制单元123的其它部分与图3相同,关于这些部分的功能和信号流关系在参照图3的介绍中已经详细描述,故不赘述。
140.图4的接收端流控制单元124与图3的区别在于,它增加了第二流量值解析器12411、第二流量值存储器12407、已接收数据大小存储器12408、差计算单元12409、第三加法器12410,且第五加法器12404累加的内容与图3不同,其余部分与图3相同。其余部分的功能和信号流关系在参照图3的介绍中已经详细描述,故不赘述。
141.第二流量值解析器12411将接收端的接收器12406从发送端流控制单元123接收到的第二流量值通知分组中解析出第二流量值,存储到第二流量值存储器12407中。第二流量值存储器12407专用于存储第二流量值。
142.已接收数据大小存储器12408存储接收端从发送端已接收的数据大小。第二流量值表示的是发送端已经向接收端发送的数据量。第二流量值与已接收数据大小存储器12408存储的已接收数据大小的差实际上就是途中丢失的数据量。差计算单元12409用于计算该差。当该差为0时,表示没有途中丢失,这时第五加法器12404就如同图3中一样,将所述接收数据缓冲器12401中新转移到接收端存储器的数据量累加到第一流量值分配单元12402已分配的流量值上,不考虑该差值。当该差值不为0时,与图3中第五加法器12404仅累加所述接收数据缓冲器12401新转移到接收端存储器的数据量不同,图4中,第五加法器12404将所述第二流量值与已接收到的数据大小的差、以及所述接收数据缓冲器12401新转移到接收端存储器的数据量累加到第一流量值分配单元12402已分配的流量值上。将该差累加到第一流量值,是为了弥补传输丢失导致的接收数据缓冲器12401新空闲出的存储空间量不准确,导致回复到发送端的流量值不准确,而造成的死通信。
143.在确定已接收数据大小存储器12408中的已接收数据大小时,让所述已接收数据大小存储器12408存储的初始值设置为0。第三加法器12410响应于从所述发送端接收到数据,将接收的数据大小累加到所述已接收数据大小存储器12408存储的值上。由于已接收数据大小存储器12408存储的初始值为0,接收端每接收到数据,就将数据大小累加到已接收数据大小存储器12408存储的值上,这样,直接可以从已接收数据大小存储器12408读出接收端已从发送端接收的数据大小。另外,第三加法器12410在差计算单元12409计算出所述
差后,将所述差累加到所述已接收数据大小存储器12408存储的值上。
144.上述第一流量值初始通知分组和第一流量值更新通知分组统称为第一流量值通知分组。第一流量值通知分组即用于通知第一流量值的分组,不管是第一次向发送端通知第一流量值,还是之前通知更新的第一流量值。
145.本公开实施例中,发送端向所述接收端发送的数据、第一流量值初始通知分组、第一流量值更新通知分组、第一流量值初始确认分组、第二流量值通知分组都可以以流量值消息分组格式传输。流量值消息分组格式即用于传输发送端芯片向接收端芯片发送的数据、第一流量值初始通知分组、第一流量值更新通知分组、第一流量值初始确认分组、第二流量值通知分组的通用格式。设置通用格式传输本公开实施例特有的多种分组,有利于减小处理负荷,提高处理效率。
146.该流量值消息分组格式如图7所示,包括包括目的地芯片地址(da)701、源芯片地址(sa)702、分组类型703、通知的流量值或第二流量值(c0-c3)704-707、填充位708、传输错误校验位709。
147.da 701即处理单元数据通信中的接收端处理单元1002的地址,sa 702是处理单元数据通信中的发送端处理单元1001的地址。若要建立处理单元通信,首先要知道发送端处理单元1001和接收端处理单元1002的地址,因此要包括这两个字段。在总分组长度为64字节的例子中,可以为这两个字段分别分配8字节。
148.通信类型703即表示该消息分组是数据分组、第一流量值初始通知分组、第一流量值更新通知分组、第一流量值初始确认分组,还是第二流量值通知分组。在总分组长度为64字节的例子中,可以为这个字段分配2字节。
149.通知的流量值或第二流量值(c0-c3)704-707字段承载通知的流量值或第二流量值。对于第一流量值初始通知分组来说,该字段承载的是初始的流量值;对于第一流量值更新通知分组来说,该字段承载的是更新的流量值;对于第一流量值初始确认分组来说,该字段承载的是确认接收到的流量值;对于第二流量值通知分组来说,该字段承载的是第二流量值;对于数据分组来说,该字段为空。通知的流量值或第二流量值(c0-c3)704-707设置成多个字段c0-c3而不是一个字段c0的原因在下文中详述。在总分组长度为64字节的例子中,可以将多个字段c0-c3中的每个字段设置为2字节。
150.填充位708是为了让整个流量值消息分组的长度达到规定长度,例如64字节,而填充的位。对于第一流量值初始通知分组、第一流量值更新通知分组、第一流量值初始确认分组,还是第二流量值通知分组来说,填充位可以放置固定码串。对于数据分组来说,可以利用填充位708承载需要传递的数据。在总分组长度为64字节的例子中,可以为这个字段分配36字节。
151.传输错误校验位709是为了校验整个流量值消息分组在传输过程中是否发生错误而设置的位,例如循环冗余校验(crc)位。如果该位表明发生了传输错误,可以丢弃分组或重传等。在总分组长度为64字节的例子中,可以为这个字段分配2字节。
152.由于处理单元网络可能由成百上千的处理单元构成,为了避免网络传输拥塞,可以上述的一个消息分组中承载多个虚拟通道要传送的内容,以减少网络负荷。可以认为,一个发送端处理单元1001与多个接收端处理单元1002分别有多个虚拟通道,可以在一个消息分组中同时携带多个虚拟通道的要传递的内容。一个接收端处理单元1002与多个发送端处
理单元1001也分别有多个虚拟通道,可以在一个消息分组中同时携带多个虚拟通道的要传递的内容。
153.例如,对于一个发送端处理单元1001要发送的一个消息分组来说,让其同时传送其向多个(例如4个)接收端处理单元的虚拟通道发送的第二流量值或数据,其例如分别占用上述的c0-c3字段,该发送端处理单元1001和任一个接收端处理单元1002之间形成一个虚拟通道。对于一个接收端处理单元1002要发送的一个通知分组来说,让其同时传送其向多个(例如4个)发送端处理单元的虚拟通道发送的流量值(初始或更新的第一流量值),其例如分别占用上述的c0-c3字段,该接收端处理单元1002和任一个发送端处理单元1001之间形成一个虚拟通道。这样,可以大大降低网络负荷。
154.在一个发送端处理单元1001与多个接收端处理单元1002组成多个虚拟通道的情况下,第一流量极值存储器12302存储的第一流量极值包括与多个接收端处理单元1002的虚拟通道分别对应的多个第一流量极值,反映了对于每个接收端处理单元1002,能够允许该发送端处理单元1001向其发送的数据量;第一流量值消耗存储器12303存储发送端处理单元针对所述多个接收端处理单元的虚拟通道分别已消耗的流量值,反映了对于各个接收端处理单元1002,已经向其发送的数据量;所述比较器12304针对发送数据缓冲器12301中一个要发送的数据,判断要发送数据到的接收端处理单元1002的虚拟通道,如果要发送的数据大小未超过所述接收端处理单元1002的虚拟通道对应的第一流量极值与该接收端处理单元1002的虚拟通道对应的已消耗的流量值的差,允许该数据发送到所述接收端处理单元1002的虚拟通道;第二流量值产生器12312将针对所述多个接收端处理单元1002的虚拟通道分别已消耗的流量值分别作为与所述多个接收端处理单元10021002的虚拟通道各自对应的第二流量值,以分别发送给所述多个接收端处理单元1002的接收端流控制单元124。这样,第二流量值产生器12312产生的第二流量值通知分组的c0-c3字段就分别包括多个接收端处理单元(例如4个)的虚拟通道对应的第二流量值,达到同时向多个接收端处理单元1002通知第二流量值,减少网络拥塞的目的。
155.在一个接收端处理单元1002与多个发送端处理单元1001组成多个虚拟通道的情况下,第二流量值存储器12407存储的第二流量值包括与多个发送端处理单元的虚拟通道分别对应的多个第二流量值,分别反映了所述多个发送端处理单元1001分别向该接收端处理单元1002发送的数据量;已接收数据大小存储器12408分别存储该接收端处理单元1002从所述多个发送端处理单元1001的虚拟通道已接收的数据大小;所述差计算单元12409分别计算所述第二流量值存储器12407中存储的与多个发送端处理单元1001的虚拟通道对应的多个第二流量值和所述已接收数据大小存储器12408存储的从所述多个发送端处理单元1001的虚拟通道分别接收到的数据大小的差,针对每个发送端处理单元1001的虚拟通道计算出的该差实际就是该发送端处理单元1001向接收端处理单元1002传输数据途中丢失的数据量;第一流量值分配单元12402根据针对所述多个发送端处理单元1001的虚拟通道得到的所述差、以及针对所述多个发送端处理单元1001的虚拟通道从接收数据缓冲器12401转移到接收端存储器的数据量,分别更新发送到所述多个发送端处理单元1001的虚拟通道的多个流量值。这样,第一流量值通知分组产生器12403产生的第一流量值初始通知分组或第一流量值更新通知分组的c0-c3字段就分别包括多个发送端处理单元(例如4个)的虚拟通道对应的流量值,达到同时向多个发送端芯片1001通知各自的流量值,减少网络拥塞的
目的。
156.如果c0-c3字段中的流量值或第二流量值直接以字节或比特为单位,将大大占用消息分组中的存储空间,降低传输效率。因此,可以将流量值或第二流量值的单位设定等于64字节。流量值为多少个单位就代表多少个64字节的存储容量。另外,可以将接收数据缓冲器12401的大小设置为720k比特来覆盖数据在两个处理单元之间往返一圈所用的时间。由于如上所述,初始的流量值就对应着整个接收数据缓冲器12401的存储空间(一开始接收数据缓冲器12401没有存储数据,接收数据缓冲器12401有多大存储空间,就允许发送端处理单元1001向接收端处理单元1002发多少数据),因此初始的流量值可以为720k/(8
×
64)=1440个流量值单位。
157.另外,从上面的过程可以看出,第一流量极值存储器12302、第一流量值消耗存储器12303、第二流量值存储器12407、已接收数据大小存储器12408存储的都是累加值,都是随着使用过程不断累加上新的数值,从来不会减少。这样,就存在其存储的数值越来越大,浪费存储空间的问题。为了避免存储空间的浪费,规定这4个存储器存储的最大值,超过该最大值从0开始重新累加。例如,当最大值设置为5000个流量值单位时,当存储器存储的值达到5000时,自动变回0,在0的基础上重新累加,即复位存储。由于本公开实施例主要用的是第一流量极值存储器12302存储的值与第一流量值消耗存储器12303存储的值的差值,第二流量值存储器12407存储的值与第一流量值消耗存储器12303存储的值的差值,相比较的一对值往往在比较相近的时间点归零,它们的差值保持不变,即不影响它们的差值的计算,同时节省了存储空间。即使在某一时间点,相比较的一对值中有一个归零,另一个未归零,得到的差值如果是负数,在负数的基础上加上最大值(如5000)就可以得到正确的差值。
158.该最大值的一个经验公式是2
×
2^(ceil(log2(a))),其中,a表示初始流量值,ceil(x)为天花板函数,其作用是求大于等于x的最小整数,2^(x)表示2的x次方。当a=1440时,代入公式,得到4096,即此时第一流量极值存储器12302、第一流量值消耗存储器12303、第二流量值存储器12407、已接收数据大小存储器12408存储的最大值为4096个流量值单位。
159.发送第一流量值初始通知分组、第一流量值更新通知分组、第一流量值初始确认分组、第二流量值通知分组并不一定与发送数据的周期一致。由于本公开实施例的主要成本在于传输第一流量值初始通知分组、第一流量值更新通知分组、第一流量值初始确认分组、第二流量值通知分组所需的额外带宽。一个典型的数据分组大小为1k字节,第一流量值初始通知分组、第一流量值更新通知分组、第一流量值初始确认分组、第二流量值通知分组的典型大小分别为64字节。假设发送第一流量值初始通知分组、第一流量值更新通知分组、第一流量值初始确认分组、第二流量值通知分组的周期是发送数据分组的周期的n倍。如果n=1,则意味着发送第一流量值初始通知分组、第一流量值更新通知分组、第一流量值初始确认分组、第二流量值通知分组的周期与发送数据分组的周期相等。如果n=1,则传送流量值相关信息的带宽成本是64/1024=6.25%。如果n=a,则传送流量值相关信息的带宽成本是64/1024a=(6.25/a)%。例如,n=8时,带宽成本为0.78%。n=16时,带宽成本为0.39%。此时接收数据缓冲器12401大小仅需要多出8kb(在n=8时)或16kb(在n=16时)。实践表明,让n为大于等于2的正整数,尤其是n=8或n=16,能够使本公开实施例达到较佳效果。
160.根据本公开的一个实施例,如图5所示,提供了一种发送端流控制方法,包括:
161.步骤510、根据接收端发送的流量值,更新第一流量极值,所述发送的流量值为接收端当前允许增加接收的数据量;
162.步骤520、如果要发送的数据大小未超过所述第一流量极值与已消耗的流量值的差,允许该数据发送到所述接收端,其中,所述已消耗的第一流量值等于发送端已发送到接收端的数据量;
163.步骤530、将所述已消耗的流量值作为第二流量值,以发送给所述接收端,以便所述接收端根据第二流量值与接收端已从所述发送端接收的数据量的差调整发送到发送端的所述流量值。
164.可选地,步骤510包括:
165.从接收端接收到的当前第一流量值通知分组中解析出流量值;
166.从当前第一流量值通知分组中解析出的流量值,减去从接收端接收到的前一第一流量值通知分组中解析出的流量值,得到流量值差值;
167.将所述流量值差值累加到第一流量极值存储器存储的流量值上。
168.可选地,在步骤520之后,所述方法还包括:将发送的数据大小累加到所述已消耗的流量值上。
169.可选地,步骤530包括:所述将所述已消耗的流量值作为第二流量值放在第二流量值通知分组中,以发送给所述接收端。
170.可选地,在从接收端接收到的当前第一流量值通知分组中解析出流量值之前,所述方法还包括:对从接收端接收到的当前第一流量值通知分组进行传输错误校验,如校验错误,丢弃该当前第一流量值通知分组。
171.如图6所示,根据本公开的一个实施例,提供了一种接收端流控制方法,包括:
172.步骤610、将从发送端接收的数据存储在接收数据缓冲器中;
173.步骤620、从发送端接收第二流量值;
174.步骤630、获取从发送端芯片已接收的数据大小;
175.步骤640、计算所述第二流量值和所述已接收的数据大小的差;
176.步骤650、根据所述差、以及从所述接收数据缓冲器转移到接收端存储器的数据量,更新发送给发送端的流量值。
177.可选地,步骤630包括:
178.设置已接收数据大小存储器,该已接收数据大小存储器存储的初始值为0;
179.响应于从所述发送端接收到数据,将接收的数据大小累加到所述已接收数据大小存储器存储的值上;
180.从所述已接收数据大小存储器读取所述已接收的数据大小。
181.可选地,在步骤640之后,所述方法还包括:将所述差累加到所述已接收数据大小存储器存储的值上。
182.可选地,步骤650包括:
183.将所述第二流量值与已接收到的数据大小的差、以及从所述接收数据缓冲器转移到接收端存储器的数据量累加到已分配用于发送到所述发送端的流量值上;
184.将所述流量值发送到所述发送端芯片。
185.可选地,所述将所述流量值发送到所述发送端,包括:将所述流量值放在第一流量
值通知分组中,发送到所述发送端。
186.可选地,步骤620包括:从所述发送端接收到的第二流量值通知分组中解析出第二流量值。
187.上述发送端流控制方法和接收端流控制方法的实现细节在前述装置实施例部分已经描述,为节约篇幅,不再赘述。
188.本公开实施例的商业价值
189.利用本公开实施例的基于双向流量值的流控制机制,能够确保当某些数据包由于传输中的错误而丢失时,发送端和接收端的流量值是同步的,并可以自动纠正。因此,可以将基于流量值的流控制与端到端dma和内部切换模块一起使用,以在不可靠的链路上提供高吞吐量的互连。基于流量值的流控制可以减少传输延迟,并提高交换效率。实验证明,本公开实施例使得网络吞吐量提高20%,处理单元之间的传输效率提高30%以上,具有广阔的市场前景。
190.应该理解,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。
191.应该理解,上述对本说明书特定实施例进行了描述。其它实施例在权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
192.应该理解,本文用单数形式描述或者在附图中仅显示一个的元件并不代表将该元件的数量限于一个。此外,本文中被描述或示出为分开的模块或元件可被组合为单个模块或元件,且本文中被描述或示出为单个的模块或元件可被拆分为多个模块或元件。
193.还应理解,本文采用的术语和表述方式只是用于描述,本说明书的一个或多个实施例并不应局限于这些术语和表述。使用这些术语和表述并不意味着排除任何示意和描述(或其中部分)的等效特征,应认识到可能存在的各种修改也应包含在权利要求范围内。其他修改、变化和替换也可能存在。相应的,权利要求应视为覆盖所有这些等效物。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献