一种优先级流控PFC电路及方法与流程

文档序号:14022727阅读:451来源:国知局
一种优先级流控PFC电路及方法与流程

本发明属于通信技术领域,尤其是涉及一种优先级流控pfc电路及方法。



背景技术:

在多个业务或者应用共用一条数据链路的流量控制场景中,不同的业务或者应用的优先级不同,需要在逻辑上将数据链路分为不同的通道,pfc(priority-basedflowcontrol)在ieee802.1qbb中定义,是dcb(datacenterbridging)的一部分,它适用于以太网的全双工的点到点链路,用于满足多种流量在以太网中共存,且不会互相影响。在传统的流控机制中,当某条链路出现拥塞时流控会阻止该链路上的所有流量。而pfc允许在一条以太网链路上创建8个逻辑通道,并为每条逻辑通道指定一个ieee802.1p优先等级(cos),允许单独暂停和重启其中任意一条逻辑通道,同时不影响其它逻辑通道的流量。

然而,现有的pfc多采用固定缓存大小的实现方法,随着以太网带宽越来越大,为了吸收pfc报文发送后还会收到的过冲流量,保证不丢包,导致需要为每个通道都分配足够的缓存量,导致缓存越来越大。另外不同业务或者应用可能需要的带宽不同,低带宽的业务或者流量需要的缓存小,高带宽的则需要相对大一些的缓存,固定的缓存配置也会造成资源的浪费。



技术实现要素:

有鉴于此,本发明旨在提出一种优先级流控pfc电路,以方便地实现pfc的相关功能,提高系统的整体性能。

为达到上述目的,本发明的技术方案是这样实现的:

一种优先级流控pfc电路,包括存储部分、统计部分、配置部分,所述存储部分用于完成数据的存储,接受配置部分和统计部分的控制;所述统计部分用于实时记录当前各个pfc通道的数据所占用的独享缓存空间大小、共享缓存空间大小;所述配置部分用于实现每个pfc通道的缓存空间的划分。

进一步的,所述存储部分包括3块ram:data_ram、link_ram、pool_ram;所述data_ram用于存储8个pfc通道的数据,data_ram分为独享部分和共享部分,每个pfc通道可用的独享缓存大小和共享缓存大小通过配置部分来确定;所述link_ram用于存储各个pfc通道的数据的链接关系,每个pfc通道的数据都以链的方式维护;所述pool_ram用于存储data_ram当前所有可用的空间的地址。

进一步的,所述统计部分包括16个计数器,其中8个ocupied_own_buf_size用于存储每个pfc通道当前占用的独享缓存空间的大小,8个ocupied_share_buf_size用于存储每个pfc通道当前占用的共享缓存空间的大小。

进一步的,所述统计部分中当某个pfc通道接收到数据时首先使用ocupied_own_buf_size计数器计数,即首先使用独享空间,当ocupied_own_buf_size计数达到own_buf_size时再使用ocupied_share_buf_size计数,即当独享缓存空间使用完后再使用共享空间;当某个pfc通道释放缓存时首先使用ocupied_share_buf_size计数,即释放缓存时首先释放到共享缓存空间,当ocupied_share_buf_size计数到0时再使用ocupied_own_buf_size计数,即只有所占用的共享缓存空间释放完毕后才会释放到独享缓存空间。

进一步的,所述配置部分包括以下配置项:每个pfc通道可用独享data_ram空间的大小own_buf_size0~7、每个pfc通道可用共享data_ram空间的大小share_buf_size0~7、每个pfc通道的发送pfc报文的水线pfc_set_size0~7、每个pfc通道的发送解pfc报文的水线pfc_unset_size0~7。。

进一步的,所述配置部分对pfc通道n来说own_buf_sizen是其一定可以占用的缓存空间大小,pfc通道n的数据首先占用独享缓存,独享缓存占用完后再占用共享部分。

进一步的,所述配置部分对pfc通道n来说share_buf_sizen不一定是其一定可以占用的缓存空间大小,某时刻其可以占用的共享缓存大小为min{share_buf_sizen,data_ram总大小-own_buf_size0~7之和-其它7个pfc通道当前占用的共享缓存大小之和}。

进一步的,所述配置部分对pfc通道n来说其占用的总缓存大小达到pfc_set_sizen时向数据发送端发送pfc报文。如果独享缓存和共享缓存全部占用完后还有写数据请求则将数据丢弃以避免此通道对其它通道产生影响。

进一步的,所述配置部分对pfc通道n来说其占用的总缓存大小由pfc_set_sizen降到pfc_unset_sizen时向数据发送端发送解pfc报文。

相对于现有技术,本发明所述的一种优先级流控pfc电路具有以下优势:

(1)本发明可以方便地实现pfc的相关功能,提高系统的整体性能,并且在ip模块复用的专用集成电路设计中提供一种通用的解决方法,缩短产品研制时间,降低设计成本;

(2)本发明具有方便灵活的特点,可以可靠的实现多通道的拥塞控制。

本发明的另一目的在于提出一种优先级流控pfc方法,实现多通道的拥塞控制。

为了达到上述目的,本发明的技术方案是这样实现的:

一种优先级流控pfc方法,包括

以链接的方式将每个pfc通道的数据存储到数据ram中;

对每个pfc通道占用的总缓存大小进行统计,并与配置的发送pfc水线和发送解pfc水线进行比较,来决定何时发送pfc报文及解pfc报文;

根据配置的可用独享缓存大小、可用共享缓存大小对每个pfc通道当前可用的总缓存大小进行实时计算,如果数据量达到可用的总缓存大小还有数据从发送端发送过来则将新发送过来的数据丢弃。

本发明所述的一种优先级流控pfc方法和上述一种优先级流控pfc电路的有益效果相同,在此不再赘述。

附图说明

构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1为本发明实施例所述的pfc电路结构示意图;

图2为本发明实施例所述的pool_ram的维护方式示意图示意图;

图3为本发明实施例所述的data_ram及link_ram的关系示意图;

图4为本发明实施例所述的统计部分电路示意图。

具体实施方式

需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。

下面将参考附图并结合实施例来详细说明本发明。

本发明包含以下3部分:存储部分、统计部分、配置部分。

如图1中的标记1所示存储部分用于完成数据的存储,其接受配置部分和统计部分的控制。存储部分针对写数据操作的实施方式如下:

1、复位后首先初始化pool_ram,即向pool_ram的地址0写入数据0,地址1写入数据1,地址2写入数据2……,这里的数据实际是data_ram中可用的地址,即初始化后data_ram的地址0、1、2……都是可用的,之后会以fifo的方式来维护pool_ram,如图2所示,标记10为写指针,标记11为读指针。

2、初始化完成后本发明中的电路可以开始接收数据,当数据发送端向存储部分发送数据时,本发明会从pool_ram的rd_ptr处取出一个数据data0来当作数据在data_ram中的存储地址,同时将data0保存下来(命名为data_ram_addr_pre)。如果此数据是所在pfc通道(pfcn)的第一个数据则还要进行以下操作:

将data0保存到cur_addr_n中作为pfc通道n数据链的首地址。如果此数据不是所在pfc通道的第一个数据则还要进行以下操作:

向link_ram的地址data_ram_addr_pre中写入data0。以此实现此pfc通道的数据链接,链接后data_ram和link_ram存储数据的对应关系通过举例来说明,如图3所示:通道0的数据依次存储在data_ram的0、8、1、6地址中,则link_ram的地址0中存储8(表示data_ram的地址0之后的数据是地址8中的数据),地址8中存储1(表示data_ram的地址8之后的数据是地址1中的数据),地址1中存储6(表示地址1之后的数据是地址6中的数据)。

3、之后每写入一个数据则重复步骤2。

存储部分针对读数据操作的实施方式如下:

1、对data_ram进行读操作,读取数据所属pfc通道的首地址cur_addr_n。

2、如果此数据后面还链接有其他数据则还要对link_ram进行读操作,同样读取地址cur_addr_n,并将读回的数据放到cur_addr_n中。

3、将cur_addr_n写入到pool_ram中,来实现空闲地址的回收。

统计部分针对写操作的实施方式如下:

1、写入pfc通道n的数据时首先对ocupied_own_buf_sizen进行加1操作,如图4标记20所示。

2、当ocupied_own_buf_sizen计数达到own_buf_sizen时再对ocupied_share_buf_sizen进行加1操作,如图4标记22所示。

3、ocupied_share_buf_sizen计数达到min{share_buf_sizen,data_ram总大小-own_buf_size0~7之和-其它7个pfc通道当前占用的共享缓存大小之和}时停止计数,后续即使有写数据请求也不会写入到data_ram中,直到满足如下条件:

ocupied_share_buf_sizen+ocupied_own_buf_sizen<pfc_unset_sizen如图4标记24所示。

统计部分针对读操作的实施方式如下:

1、读pfc通道n的数据时首先对ocupied_share_buf_sizen进行减1操作。如图4标记23所示。

2、当ocupied_share_buf_sizen减为0时再对ocupied_own_buf_sizen进行减1操作。如图4标记21所示。

3、当ocupied_own_buf_sizen也减为0时表明pfc通道n的数据全部读出。

配置部分用于实现每个pfc通道的缓存空间的划分:

1、own_buf_size0~7用于保证每个pfc通道至少可用的缓存空间。

2、share_buf_size0~7用于为每个pfc通道额外提供一部分空间,这部分空间设计用于吸收过冲数据。

3、pfc_set_size0~7用于设置每个pfc通道发送pfc报文的时机,此配置值配置小于pfc通道实际可用的独享缓存和共享缓存之和,从而当过冲数据到来时可以顺利的接受下来。

pfc_unset_size0~7用于设置每个pfc通道发送解pfc报文的时机,此配置值配置大于pfc_set_size0~7,即某个pfc通道的可用缓存达到一定量后才重新开始接收数据。

本发明所述存储部分将一块物理存储空间划分为8份逻辑存储空间,划分方式灵活:

每个pfc通道的逻辑存储空间可以分为独享部分和共享部分,独享部分保证每个通道的正常工作,共享部分用于吸收过冲。共享部分和独享部分大小可以在正常范围内任意配置。

各个pfc通道的数据采用链式维护,且各个通道的链的首地址分别保存,从而使得各个逻辑空间独立,不会因为一个通道的空间用完而影响其它通道的数据的写入及读出。

对于一条特定的以太网链路,过冲数据量的最大值是一定的,但是过冲数据所属的pfc通道是不一定的,为了在任何情况下都能将过冲数据吸收下来且尽可能的节省存储资源,本发明没有为每个pfc通道都开辟能够吸收最大量过冲的缓存空间,而是为每个pfc通道配置了可用共享缓存大小,这样所需的吸收过冲用缓存只需要前者的1/8。

为了最大限度的提高缓存空间的利用率,本发明采用先占用独享缓存空间,先释放共享缓存空间的方式。即共享缓存空间保留到最后才使用,这样共享缓存空间可以被8个pfc通道使用的几率更大。而释放的缓存空间首先当做共享缓存来使用,这样8个通道都可以使用,如果释放的缓存空间首先当做独享缓存来使用,则只有1个通道来使用这样释放的缓存的利用率没有前一种方式大。

本发明针对不合理的配置做了保护,如果配置的吸收过冲的缓存过小(即反压水线值设置的过小)则有可能存在缓存不能将所有过冲数据都吸收下来的情况,此时本发明将采取丢包操作,将后续的数据直接丢弃,并上报中断,以此来保证其它通道的正常功能,同时通知软件配置不合理,需要重新配置。

本发明所述统计部分用于实时的记录当前各个pfc通道的数据所占用的独享缓存空间大小、共享缓存空间大小。独享缓存空间用于保证每个pfc通道都可以正常的工作,不受其它通道的影响。当所占用的缓存空间达到反压水线时发送pfc报文,通知对端停止发送数据,同时用多余的空间来吸收过冲,共享缓存用于保证不管是哪个通道的过冲都能够吸收下来。

为了实现灵活的控制,被发明支持配置每个pfc通道可用独享data_ram空间的大小、每个pfc通道可用共享data_ram空间的大小、每个pfc通道的发送pfc报文的水线、每个pfc通道的发送解pfc报文的水线。通过这些配置项和当前的统计值来决定数据的写入以及pfc报文、解pfc报文的发送时机。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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