一种数据传输过程中提高带宽利用率的方法

文档序号:7919334阅读:429来源:国知局
专利名称:一种数据传输过程中提高带宽利用率的方法
技术领域
本发明涉及一种数据传输过程中提高带宽利用率的方法,属数据传输
2、将包信息通过虚拟输出队列进行调度。
3、根据调度结果,从数据缓存中读出数据进行发送。
上述第一步中所使用的数据缓存经常使用大容量双数据速率数据存储器(以下简称DDR SDRAM)作为数据缓存,采用成组方式进行读写操作,一次读写固定长度的数据(简称burst方式)。
如图2所示,假设数据包长65字节,DDR SDRAM一次读写长度为64字节。那么第一次处理64字节之后,数据包只剩下1字节。第二次处理时仍然要处理64字节。除了数据包剩余的1字节外,其余63字节用无效位(全零或全1)填充。其DDR SDRAM的带宽利用率只有64+1)/(64+64)=50.8%,这样就会造成带宽的很大浪费,使DDR SDRAM的读写环节成为整个系统的速度瓶颈,这种现象称为“n+1”问题。n表示一次DDRSDRAM分组处理的数据长度,本例中为64。当数据包的长度刚好为n+1时,带宽浪费率最高。
已有技术中,通常解决“n+1”问题的方法是通过提高芯片频率、加大总线宽度等办法提高芯片的整体性能。当出现“n+1”现象时,虽然性能大打折扣,仍然能够满足设计要求。这种方法实际上是对系统性能的一种浪费,并没有真正解决n+1问题。

发明内容
本发明的目的是提出一种数据传输过程中提高带宽利用率的方法,以解决数据传输中由双数据速率存储器引起的“n+1”现象带来的带宽浪费问题,减少带宽的浪费,提高带宽利用率。
本发明提出的数据传输过程中提高带宽利用率的方法,包括以下各步骤1、接收数据包;2、对数据包进行打包处理,将打包后的数据包的包载荷存入数据缓存;3、将打包后的数据包的包信息,根据包含在数据包中的种类信息进行虚拟输出队列管理和调度;4、根据上述队列调度后的包信息,对存储在数据缓存中的相应数据包的包载荷进行解包处理;5、发送上述解包处理后的数据包。
上述方法的第二步的打包处理,包括如下各步骤1、对接收的数据包按长度进行分流,将长包的包载荷存入数据缓存,将短包的包载荷存入过渡缓存,将长包的包信息与包含在短包包信息中的虚拟输出队列索引一起按原始顺序存储;2、建立与虚拟输出队列相对应的打包队列,将上述短包信息送入打包队列,若进入的打包队列队尾的短包信息空缺段数为零,则不打包,若不为零,则用进入短包的包信息的包头填充该队尾短包信息的空缺段;3、按原始顺序读取上述第一步存储的长包的包信息和短包包信息中的虚拟输出队列索引,若为长包信息,则直接将该信息送入虚拟输出队列;4、若读取的是短包队列索引,则根据索引从打包队列中读取第一个短包的包信息,并根据该信息从过渡缓存中读取该短包的包载荷存入数据缓存。
上述打包队列队尾的短包信息空缺段数的计算方法包括如下步骤
1、将数据缓存的一次读写字节分成n段,n=m/l,其中m为数据缓存的一次读写字节数,l为每段的字节数;2、将包头空缺段数与包尾空缺段数之和与n作比较,若小于n,则两者之和即为原队尾短包信息的空缺段数,若大于等于n,则减掉n,所得差值即为原队尾短包信息的空缺段数;3、若空缺段数不为零,则将原队尾短包信息的填充段数改为该空缺段数,同时将进入短包信息的包头空缺段数改为该空缺段数。
本发明方法中第四步的解包处理,包括如下各步骤1、根据虚拟输出队列调度出来的打包后的包信息,从数据缓存中读取长、短包的包载荷;2、若读取的是长包载荷,则直接将长包发送;3、若读取的是短包载荷,则对短包载荷进行解包后发送。
上述解包过程,包括如下各步骤1、建立与虚拟输出队列相对应的解包队列,并为每个队列建立一个相应的队列缓存;2、当读取的是短包的包载荷时,若包载荷分属前后两个短包,则将第一个短包连同缓存中的包载荷一起发送,后一短包的包载荷存在相应的队列缓存中;3、当该队列的下一个短包到来时,将缓存中上一个包留下的包载荷与新到来的短包一起发送;4、当包载荷只属于一个短包时,则连同缓存内的包载荷发送。
本发明提出的数据传输过程中通过打包提高带宽利用率的方法,在原有网络处理流程中加入了打包、解包两个步骤,解决了n+1问题。利用本发明的方法,以数据包长度为65字节的情况为例,DDR SDRAM的带宽利用率上升到(64+1+48)/(64×2)=88.3%


图1是已有技术网络处理器工作流程。
图2是已有技术中的n+1问题示意图。
图3是本发明方法的流程图。
图4是打包步骤流程图。
图5是通过打包解决n+1问题示意图。
图6是解包步骤流程图。
上述方法中的打包处理过程如图4所示,首先对接收的数据包按长度进行分流,将长包的包载荷存入数据缓存,将短包的包载荷存入过渡缓存,将长包的包信息与包含在短包包信息中的虚拟输出队列索引一起按原始顺序存储;建立与虚拟输出队列相对应的打包队列,当上述短包信息进入打包队列时,若所进入的打包队列队尾的短包信息空缺段数为零,则不打包,若不为零,则用进入短包的包信息的包头填充该队尾短包信息的空缺段;读取上述第一步存储的长包的包信息和短包包信息中的虚拟输出队列索引顺序,若为长包信息,则直接将该信息送入虚拟输出队列;若读取的是短包队列索引,则根据索引从打包队列中读取第一个短包的包信息,并根据该信息从过渡缓存中读取该短包的包载荷存入数据缓存。其中打包队列队尾的短包信息空缺段数的计算方法是,将数据缓存的一次读写字节分成n段,n=m/l,其中m为数据缓存的一次读写字节数,l为每段的字节数;将包头空缺段数与包尾空缺段数之和与n作比较,若小于n,则两者之和即为原队尾短包信息的空缺段数,若大于等于n,则减掉n,所得差值即为原队尾短包信息的空缺段数;若空缺段数不为零,则将原队尾短包信息的填充段数改为该空缺段数,同时将进入短包信息的包头空缺段数改为该空缺段数。
上述方法中的解包步骤流程如图6所示,首先根据虚拟输出队列调度出来的打包后的包信息,从数据缓存中读取长、短包的包载荷;若读取的是长包载荷,则直接将长包发送;若读取的是短包载荷,则对短包载荷进行解包后发送。短包包载荷的解包过程为首先建立与虚拟输出队列相对应的解包队列,并为每个队列建立一个相应的队列缓存;当读取的是短包的包载荷时,若包载荷分属前后两个短包,则将第一个短包连同缓存中的包载荷一起发送,后一短包的包载荷存在相应的队列缓存中;当该队列的下一个短包到来时,将缓存中上一个包留下的包载荷与新到来的短包一起发送;当包载荷只属于一个短包时,则连同缓存内的包载荷发送。
本发明方法中,打包步骤的功能是将接收到的未打包的数据进行打包处理,将打好包的包载荷写入DDR SDRAM数据缓存,同时得到含有打包信息的包信息供虚拟输出队列进行调度。解包步骤的功能是从DDRSDRAM读出的打包过的包载荷,根据虚拟队列调度出来的含有打包描述的包信息对包载荷进行解包处理。加入打包、解包步骤后,原网络处理器的工作步骤基本不需要更改。同时网络处理器芯片可以对是否打包进行用户配置。
长、短包的判断标准可以由用户设定。临界长度越大则对传输效率改善越多,但相应片内缓存开销也越大。最少可以规定大于三个burst长度(每个burst是64字节)的包为长包。
该步骤中提到的数据仲裁目的是将通向DDR SDRAM的长包、短包两条数据通路合为一条数据通路,以减少已有网络处理器技术增加打包功能后的修改。
为寻址方便,不按字节而是按段打包。即如果一包包尾空闲空间是一个或一个以上完整的段(这里规定一段为16字节,也就是一次burst长度的四分之一)才打包,而且打包数据只占用这些完整的段。不足一段的空间仍然空闲。
当一个包进入打包队列中,首先根据包的队列索引进入相应队列,然后根据该队列的队尾的包的空缺段数和剩余段数,当存在空余段时,更改进入包与队尾包的包头空缺段数、包尾剩余段数和包尾打包段数,完成打包过程。
有些包很小,小于上一包包尾的整段空闲空间(如上一包空闲了三段48字节,而该包只有40字节),该小包就会被完全打在前一包上,使一次burst的数据内存在两个包尾。这种情况下是不允许打包的,因为在解包时会出现乱序。
可以看出,某一包是否被打包取决于该包入队列时所属队列是否为空。当DDR SDRAM总线繁忙时,包出队列速度很慢,打包队列内不容易呈空状态,这时打包率很高。反之DDR SDRAM总线通畅,打包队列经常为空,则打包率很低。通过这种自动调节,保持打包率与DDR SDRAM总线状态一致,既防止打包率低引起传输效率低下数据堵塞,又防止一味提高打包率引起数据不必要的滞留。保持传输速度与数据流速保持动态平衡。
解包过程中利用解包队列的缓存将打在一起的数据进行分离。对长包不做处理,透明传输过去。而对于短包,如果缓存中存有数据,一定是该短包的包头。这是由前面所述的打包过程决定的。通过这种方法使两个被长包隔开的短包打包之后也可以被正确解包恢复成原始状态。
权利要求
1.一种数据传输过程中提高带宽利用率的方法,其特征在于该方法包括以下步骤(1)接收数据包;(2)对数据包进行打包处理,将打包后的数据包的包载荷存入数据缓存;(3)将打包后的数据包的包信息,根据包含在数据包中的种类信息进行虚拟输出队列管理和调度;(4)根据上述队列调度后的包信息,对存储在数据缓存中的相应数据包的包载荷进行解包处理;(5)发送上述解包处理后的数据包。
2.如权利要求1所述的方法,其特征在于其中所述的第二步的打包处理,包括如下各步骤(1)对接收的数据包按长度进行分流,将长包的包载荷存入数据缓存,将短包的包载荷存入过渡缓存,将长包的包信息与包含在短包包信息中的虚拟输出队列索引一起按原始顺序存储;(2)建立与虚拟输出队列相对应的打包队列,将上述短包信息送入打包队列,若所进入的打包队列队尾的短包信息空缺段数为零,则不打包,若不为零,则用进入短包的包信息的包头填充该队尾短包信息的空缺段;(3)按原始顺序读取上述第一步存储的长包的包信息和短包包信息中的虚拟输出队列索引,若为长包信息,则直接将该信息送入虚拟输出队列;(4)若读取的是短包队列索引,则根据索引从打包队列中读取第一个短包的包信息,并根据该信息从过渡缓存中读取该短包的包载荷存入数据缓存。
3.如权利要求2所述的方法,其特征在于其中所述的第二步中打包队列队尾的短包信息空缺段数的计算方法包括如下步骤(1)将数据缓存的一次读写字节分成n段,n=m/l,其中m为数据缓存的一次读写字节数,l为每段的字节数;(2)将包头空缺段数与包尾空缺段数之和与n作比较,若小于n,则两者之和即为原队尾短包信息的空缺段数,若大于等于n,则减掉n,所得差值即为原队尾短包信息的空缺段数;(3)若空缺段数不为零,则将原队尾短包信息的填充段数改为该空缺段数,同时将进入短包信息的包头空缺段数改为该空缺段数。
4.如权利要求1所述的方法,其特征在于其中所述的第四步的解包处理,包括如下各步骤(1)根据虚拟输出队列调度出来的打包后的包信息,从数据缓存中读取长、短包的包载荷;(2)若读取的是长包载荷,则直接将长包发送;(3)若读取的是短包载荷,则对短包载荷进行解包后发送。
5.如权利要求4所述的方法,其特征在于其中第(3)步中的解包过程,包括如下各步骤(1)建立与虚拟输出队列相对应的解包队列,并为每个队列建立一个相应的队列缓存;(2)当读取的是短包的包载荷时,若包载荷分属前后两个短包,则将第一个短包连同缓存中的包载荷一起发送,后一短包的包载荷存在相应的队列缓存中;(3)当该队列的下一个短包到来时,将缓存中上一个包留下的包载荷与新到来的短包一起发送;(4)当包载荷只属于一个短包时,则连同缓存内的包载荷发送。
全文摘要
本发明涉及一种数据传输过程中通过打包提高带宽利用率的方法,属数据传输技术领域。本方法首先接收数据包,然后对数据包进行打包处理,并将打包后的数据包的包信息进行虚拟输出队列调度,数据包载荷写入数据缓存。根据上述数据包种类进行虚拟输出队列管理和调度,根据队列调度后的包信息,对写入数据缓存中的相应数据包的包载荷进行解包处理,最后发送上述解包处理后的数据包。本发明的方法,在原有网络处理流程中加入了打包、解包两个步骤,解决了n+1问题。利用本发明的方法,以数据包长度为65字节的情况为例,DDR SDRAM的带宽利用率可以大幅度上升。
文档编号H04L12/56GK1474512SQ0213000
公开日2004年2月11日 申请日期2002年8月9日 优先权日2002年8月9日
发明者王宏宇, 邓云庆, 张乃波, 徐敏, 吴刚, 蒋代林 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1