先进先出缓冲器的阈值设置方法 【技术领域】
本发明涉及计算机和通讯系统,尤其涉及网络处理器与接口芯片之间的信号匹配和控制的方法。
背景技术
随着通讯技术的发展,互联网(Internet)上的数据流量成几何级数增长,由原来的64Kbps速率接口发展到目前的10Gbps速率接口。对于高速数据流的处理,传统的通用通讯CPU已经捉襟见肘,满足不了用户的性能要求,在这样的情况下,网络处理器也就成为数据通讯发展中的必然产物,图1就是一个数据通讯系统中网络处理器和接口芯片典型连接示意图。
为了适应复杂网络环境的不同需求,目前几乎所有网络的网络处理器都采用基于软件微代码(microCode)的方法来实现对接口状态信息的处理,该方法在灵活性方面虽然有很大的优势,但同时也带来了网络处理器与接口芯片之间流量匹配的问题。因为软件的时延性很难满足硬件信号地要求,比如网络处理器通过软件从它自身的状态寄存器中读取接口芯片的状态到网络处理器通过软件发出相应的收发数据包的操作的时间虽然只有短短的几微秒,但却已经大大超出了硬件的纳秒级时延要求,换句话说,网络处理器所读到的接口芯片的状态信息已经不是接口芯片当前的状态信息,而是接口芯片以前的状态信息,由于网络处理器所用的接口信息并没有实时地反映接口芯片当前的状态,因此网络处理器基于读到的接口状态信息发出数据包的收发操作的严重后果就是数据包的丢失或错误,同时会出现当网络处理器向接口芯片发数据包时,也许接口此时正处于满负荷状态,造成数据包丢失,或者当网络处理器向接口收数据包时,接口芯片此时却没有数据,收到的是无效数据的情况,产生数据错误。
综上所述,现有的基于软件读取接口状态信息的网络处理器与接口芯片之间存在信号匹配的问题,很容易导致网络处理器和接口之间数据包的丢失或错误。
【发明内容】
本发明的目的是解决现有技术中基于软件读取接口状态信息的网络处理器与接口芯片之间信号的不匹配所造成的数据包丢失或错误问题,进而提出一种接口芯片中先进先出(FIFO)缓冲器的阈值设置方法。
本发明所述方法包括以下步骤:
步骤一:将整个FIFO在结构形式上划分为实际使用部分L1或L1’、附加缓冲部分L2或L2’、禁止使用部分L3或L3’等三个部分;
步骤二:当数据流量较少的情况下,FIFO只利用实际使用部分L1或L1’来缓存数据包,而当数据流量较大时,FIFO除利用实际使用部分L1或L1’来缓存数据包外,还可以利用附加缓冲部分L2或L2’来缓存数据包;
步骤三:将整个FIFO中的实际使用部分L1或L1’的空满状态指示给外部接口;
步骤四:将FIFO中实际使用部分L1或L1’、附加缓冲部分L2或L2’两个部分合在一起的空满状态指示给内部接口。
与现有技术相比,本发明由于采用将FIFO分割的方法,预留FIFO的一部分给内部接口使用,来实现接口消息的提前通报,解决网络处理器与接口芯片之间由于信号的不匹配所造成的数据包丢失或错误问题,使得本发明方法实现成本低,实现方法简单,可应用于所有与网络处理器对接的接口芯片的设计中。
【附图说明】
图1是现有数据通讯系统中网络处理器和接口芯片间连接图。
图2是本发明所述方法的流程图。
图3是本发明发送侧FIFO构造示意图。
图4是本发明L1满时发送侧FIFO示意图。
图5是本发明L1、L2满时发送侧FIFO示意图。
图6是本发明接收侧FIFO构造示意图。
图7是本发明L1’满时接收侧FIFO示意图。
图8是本发明L1’、L2’满时接收侧FIFO示意图。
【具体实施方式】
本发明涉及通讯或计算机系统中接口芯片的设计,以及网络处理器与接口芯片之间的信号匹配和控制的方法。提出了通过对接口芯片FIFO进行处理的方法,达到网络处理器和接口之间数据包不丢失目的。
本发明的基本思想是利用FIFO的存储空间在对内部接口和对外部接口表现不一致特点实现,具体思路如下:发送侧和接收侧FIFO的存储空间对外部接口表现得相对小一些,对内部接口表现得相对大一些。网络处理器在获得了发送侧的外部接口信号以后,即使没有来更新,即还向接口发送数据,但是由于上报给网络处理器的接口信号所表现的发送侧FIFO存储空间并不是真实的发送侧FIFO存储空间,也就是说网络处理器即使往发送侧FIFO再写入小量的数据也不会丢失。同理,网络处理器在获得了接收侧的外部信号以后,即使没有来得及发出接收命令,接收侧FIFO还可以继续容纳小量的数据而不丢失。
如图2所述,本发明所述方法简述如下:
步骤一:将整个FIFO在结构形式上划分为实际使用部分L1或L1’、附加缓冲部分L2或L2’、禁止使用部分L3或L3’等三个部分,如图2和图5所示;
步骤二:当数据流量较少的情况下,FIFO只利用实际使用部分L1或L1’来缓存数据包,而当数据流量较大时,FIFO除了可以利用实际使用部分L1或L1’来缓存数据包外,还可以利用附加缓冲部分L2或L2’来缓存数据包;
步骤三:将整个FIFO中的实际使用部分L1的空满状态指示给外部接口;
步骤四:将其中实际使用部分L1或L1’、附加缓冲部分L2或L2’两个部分合在一起的空满状态指示给内部接口。
具体的说,实现本技术方案如下所述:
根据具体的应用场合不同确定合适深度的发送侧和接收侧FIFO。目前以太网数据包小于1500字节,在以太网应用场合选用3000字节以上发送侧和接收侧FIFO就可满足要求。
将发送侧FIFO分割成3个部分,如图3所示,即L1、L2、L3,系统上电时,发送侧FIFO中没有数据,即L1、L2、L3状态为空,external_empty(指示给外部的FIFO空信号)信号和internal_empty(指示给内部接口的FIFO空信号)信号均为高。
L1的空满程度通过external_empty信号上报给网络处理器,即当网络处理器向发送侧FIFO中所写的数据超过L1所表示的深度时,如图4所示,external_empty信号发生改变,比如系统上电时,L1状态为空,external_empty信号为高,表示网络处理器可以向发送侧FIFO中发送数据,当数据填满L1时,external_empty信号变低,通知网络处理器当前发送侧FIFO的已经处于满状态,不能再接收数据。
当数据填满L1时,虽然external_empty信号通知网络处理器当前发送侧FIFO的已经处于满状态时,但是由于网络处理器基于软件读取接口状态信息,当前发送侧FIFO的状态网络处理器并没有及时更新,网络处理器很可能还会继续向发送侧FIFO中发送数据,这时如果发送侧FIFO没有空间的话,即发送侧FIFO只由L1构成的话,发送的数据将丢失。为了不丢失网络处理器在L1满状态下继续发送的数据,内部接口采样internal_empty信号,即内部接口在L1满状态下继续接收网络处理器发送过来的数据,并将它写入到L2中,如图5所示。
由于大部分网络处理器基于包模式采样external_empty信号,即采样一次external_empty信号,发送一个完整的数据包,为了不丢失网络处理器L1满状态下继续发送的数据包,即要求L2的深度能够容纳下一个网络处理器发送的最长数据包的长度。比如在以太网应用中,要求L2的深度大于等于1500字节。
同样,将接收侧FIFO分割成3个部分,如图6所示,即L1’、L2’、L3’,系统上电时,接收侧FIFO中没有数据,即L1’、L2’、L3’状态为空,external_full(指示给外部的FIFO满信号)信号和internal_full(指示给内部接口的FIFO满信号)信号均为低。L1’的空满程度通过external_full信号上报给网络处理器,即当接收侧FIFO中的数据超过L1’所表示的深度时,external_full信号发生改变,如图7所示。比如系统上电时,L1’状态为空,external_full信号为低,表示接收侧FIFO中没有数据要送给网络处理器,当数据填满L1’时,external_full信号变高,通知网络处理器当前接收侧FIFO的已经处于满状态,网络处理器可以发接收数据的命令了。
当数据填满L1’时,虽然external_full信号通知网络处理器当前接收侧FIFO的已经处于满状态时,但是由于网络处理器基于软件读取接口状态信息,当前接收侧FIFO的状态网络处理器并没有及时更新,网络处理器没有来得及发接收数据的命令,这时如果接收侧FIFO没有空间的话,即接收侧FIFO只由L1’构成的话,物理线路上过来的数据就丢失了。为克服网络处理器在L1’满状态下还不发接收数据的命令所造成的数据丢失,内部接口采样internal_full信号,即内部接口在L1’满状态下继续接收物理线路送过来的数据,并将它写入到L2’中,如图8所示。