具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
实施例一
参照图1,示出了根据本发明实施例一的一种数据组包方法的步骤流程图。
本实施例的数据组包方法包括以下步骤:
步骤S102:确定待发送数据的RB是按照RB对应的SDU长度向量,将待发送数据组织到ULgrant资源中。
其中,SDU长度向量中的元素分别用于标识RB的各SDU的分段长度。
采用按照RB对应的SDU长度向量,将RB的待发送数据组织到ULgrant资源中的方式,除最后一个SDU外,其它SDU中的实际数据长度与SDU分段长度相同,也即,只要SDU分段长度确定,则对应的SDU中的实际数据长度即确定;而最后一个SDU中的实际数据长度可能小于也可能等于SDU分段长度,无法根据SDU分段长度确定最后一个SDU中的实际数据长度,也就无法根据SDU分段长度确定MAC PDU的头长。
在按照RB对应的SDU长度向量,将RB的待发送数据组织到ULgrant资源中时,可以先根据本RB对应的SDU长度向量获取大于或等于本RB的Bj、且与本RB的Bj最接近的SDU分段长度;然后选择获取的SDU的分段长度和当前剩余的ULgrant资源的长度中的小值作为本RB的第一轮资源分配值,按照第一轮资源分配值为本RB分配ULgrant资源。若第一轮资源分配后仍有待发送数据的RB,且仍有剩余的ULgrant资源,则可以继续按照第一轮资源分配的方法继续进行第二轮资源分配,直到所有RB的待上传数据全部获得ULgrant资源或者ULgrant资源耗尽。其中,Bj用于标识需要给RB分配的无线资源的长度。Bj在RB未得到授权时,是RB的PBR(PrioritisedBit Rate,保证速率)与TTI(Transmission Time Interval,传输时间间隔)的乘积,表示当前调度时需要在第一轮给RB分配的数据长度,该Bj随着时间的推移会逐渐增长。在为RB分配资源后,Bj会更新,从原Bj中减去为该RB分配的资源值,Bj可以为负值。
例如,一个RB有三个待上传的SDU分段,各SDU分段的数据长度均为5,则第一SDU分段的长度向量值为5,第二SDU分段的长度向量值为10,第三SDU分段的长度向量值为15,该RB的SDU长度向量为{5,10,15}。若该RB的Bj为13,则选择的SDU分段长度为15。当ULgrant资源充足时,为该RB分配长度为15的ULgrant资源。
步骤S104:先对组织到ULgrant资源中的、待发送数据进行MAC SDU组包,再根据MAC SDU组包结果,确定MAC PDU的实际头长与预留头长的差;或者,先确定在最后一个MAC SDU中填充的RLC PDU的长度,再对组织到ULgrant资源中的、待发送数据进行MAC SDU组包。
其中,预留头长大于或等于实际头长。
当按照RB对应的SDU长度向量,将待发送数据组织到ULgrant资源时,除最后一个MAC SDU外,其它MAC SDU对应的头长可以方便地根据该MAC SDU的SDU长度向量确定,但最后一个MAC SDU的的SDU长度向量指示的长度则有可能不能实现该MAC SDU的完整组包。因此,在MACPDU组包时,需要针对这种情况而进行特别处理。
当先进行MAC SDU组包时,MAC层和物理层共享的BUFFER中预留有足够的头长(也即预留头长)空间,进行MAC SDU组包后即可计算获得MAC PDU的实际头长,该实际头长与预留头长的差值即为实际MAC PDU与预留MAC PDU的偏差。依赖该偏差可以确定MAC PDU的实际起始地址和长度,实现直接的BUFFER写入,无须中间地址和再次拷贝。
当先确定在最后一个MAC SDU中填充的RLC PDU的长度时,可以根据该长度,和,根据最后一个MAC SDU的长度确定的最后一个MAC SDU的头长,再结合其它MAC SDU对应的头长,获得MAC PDU的实际头长,根据该实际头长即可确定MAC PDU的实际起始地址和长度,以及MACSDU的实际地址和长度,进而实现直接的BUFFER写入,无须中间地址和再次拷贝。
步骤S106:根据MAC PDU的实际头长与预留头长的差,或者,根据RLC PDU的长度,在MAC层和物理层共享的BUFFER缓冲区中,进行MACPDU的组包。
当进行了先对组织到ULgrant资源中的、待发送数据进行MAC SDU组包,再根据MAC SDU组包结果,确定MAC PDU的实际头长与预留头长的差后,可以根据MAC PDU的实际头长与预留头长的差,在MAC层和物理层共享的BUFFER缓冲区中,进行MAC PDU的组包。
当进行了先确定在最后一个MAC SDU中填充的RLC PDU的长度,再对组织到ULgrant资源中的、待发送数据进行MAC SDU组包后,可以根据RLC PDU的长度和计算出的各个MAC SDU对应的头长,在MAC层和物理层共享的BUFFER缓冲区中,进行MAC PDU的组包。
本实施例的数据组包方法的执行主体为资源分配装置,例如该资源分配装置具体可以为调度器。
通过本实施例,首先,待发送数据的RB按照其对应的SDU长度向量,将待发送数据组织到ULgrant资源。SDU长度向量为RB的各待上传SDU分段的数据长度的向量,向量中的每一个元素都是RB的一个完整SDU分段,当资源充足时,按照SDU长度向量为RB分配的无线资源能够保证RB中SDU分段的完整传输,保护了SDU的完整性,SDU的完整性是提高LTE整体性能的一个手段,它能够有效地降低SDU的分割,减小上层报文的开销以及被重传的可能性。
其次,在进行MAC PDU组包时,通过获得MAC PDU的实际头长与预留头长的差,或者,通过获得最后一个MAC SDU中填充的RLC PDU的长度,实现了在协议规定的调度器特性的基础上,BUFFER零拷贝的方案,其直接使用MAC层和底层(物理层)共享的BUFFER进行MAC PDU的组包,MAC层直接把组包数据写入BUFFER,而不再通过中间地址进行组包后再拷贝到BUFFER中,从而减少了数据的拷贝次数,降低了CPU load,也避免了地址空间浪费,提高了MAC PDU的组包速度和效率。
实施例二
参照图2,示出了根据本发明实施例二的一种数据组包方法的步骤流程图。
本实施例的数据组包方法包括以下步骤:
步骤S202:调度器为Bj>0的RB进行ULgrant资源分配。
本实施例中,以执行主体为MAC层调度器为例详细介绍本发明的技术方案。
本实施例的资源分配方案基于两轮调度的基本框架,第一轮调度针对PBR结果Bj,对于Bj>0的RB,将ULgrant资源按照RB的优先级顺序,先根据Bj结果和SDU长度向量分配给各个RB。如果在ULgrant资源耗尽之前,各个信道都被满足,则可以进入第二轮调度。第二轮调度会将剩余的ULgrant资源,按照RB的优先级顺序,依次分配给还有待发数据的各RB。
具体地,本步骤可以包括:
步骤S2022:为Bj>0的RB生成SDU长度向量。
SDU长度向量为RB的各待上传SDU分段的长度向量。以一个RB为例,生成该RB的SDU长度向量的步骤包括:获取该RB的各SDU分段标识(如包括第一SDU分段、第二SDU分段和第三SDU分段)的长度值;对于每一个SDU分段,将本SDU分段所标识的长度值与本SDU分段前的所有SDU分段所标识的长度值的和,作为本SDU的分段长度(如单个SDU分段所标识的长度值均为5,则第一SDU的分段长度5为该RB的SDU长度向量中的第一个元素、第二SDU的分段长度5+5=10为该RB的SDU长度向量中的第二个元素,第三SDU的分段长度5+5+5=15为该RB的SDU长度向量中的第三个元素);按照该RB中的各SDU分段的前后顺序,以各SDU的分段长度为元素生成该RB的SDU长度向量(该RB的SDU长度向量为{5,10,15})。其中,SDU分段所标识的长度值是一个SDU分段所能标识的长度值,即该SDU分段的长度的值。
步骤S2024:获取ULgrant资源,调度器确定Bj>0的RB。
本实施例中,设定Bj>0的RB包括RB-1、RB-2、RB-3、RB-4和RB-5,相对应地,每个RB的SDU长度向量分别为{5,10,15}、{5,10,15,20}、{5,10,15}、{5,10,15}和{5,10,15,20}。
本实施例中,对于Bj大于0的上述各RB可以按照优先级的顺序进行后续的ULgrant资源分配处理。
步骤S2026:调度器获取Bj>0的各RB的Bj,从各RB对应的SDU长度向量中获取大于本RB的Bj、且与本RB的Bj最接近的SDU分段长度。
本实施例中,设定RB-1的Bj为5、RB-2的Bj为13、RB-3的Bj为8、RB-4的Bj为9、RB-5的Bj为18。并且,如上所述,RB-1、RB-2、RB-3、RB-4和RB-5对应的SDU长度向量分别为{5,10,15}、{5,10,15,20}、{5,10,15}、{5,10,15}和{5,10,15,20}。因此,调度器确定的各RB的SDU分段长度分别为5、15、10、10和20。
步骤S2028:调度器将获取的SDU的分段长度和当前剩余的ULgrant资源的长度中的小值作为本RB的第一轮资源分配值,按照第一轮资源分配值分配ULgrant资源给本RB。
ULgrant资源通常以长度形式表示和度量,因此,本步骤中的当前剩余的ULgrant资源的长度能够表示当前剩余的ULgrant资源。
本实施例中,设定SDU的分段长度和当前剩余的ULgrant资源的长度中,SDU的分段长度为小值,则调度器将确定的各RB的SDU的分段长度作为第一轮资源分配值,根据该值为各RB分配上行授权资源。
步骤S20210:对于每一个RB,调度器将该RB的Bj减去对应RB的第一轮资源分配值后的结果作为该RB的新Bj。
也即,Bj(n)=Bj(n)-lk(n),其中,第一个Bj(n)表示第n个RB的新Bj,第二个Bj(n)表示第n个RB的原Bj,lk(n)表示第n个RB的第一轮资源分配值,k表示该RB的SDU向量序号。
步骤S20212:在上述为各个待发送数据的RB按照各自对应的SDU长度向量进行第一轮的ULgrant资源分配之后,若ULgrant资源有剩余,则根据仍有待上传数据的RB的优先级,按照仍有待上传数据的RB对应的SDU长度向量,为仍有待上传数据的RB分配ULgrant资源,直到所有RB的待上传数据全部获得ULgrant资源或者ULgrant资源耗尽。
也即,在进行上述步骤后,若ULgrant资源分配给Bj大于0的各RB后有剩余,则按照仍有待上传数据的RB的优先级,为仍有待上传数据的RB分配ULgrant资源,直到所有RB的待上传数据全部获得ULgrant资源或者ULgrant资源耗尽。
第一轮调度在正常情况下,可能并不能将待发数据全部待发完,这时信道上还有剩余SDU。如果此时还有剩余的ULgrant资源,可以进行ULgrant资源分配的第二轮调度。
第二轮调度可以采用多种方式,
例如,优选地,若同一优先级的仍有待上传数据的RB有至少两个,则根据各个RB对应的LC(逻辑信道)的ID(标识)的排列顺序,按照各个RB对应的SDU长度向量,将剩余的ULgrant资源轮转分配给仍有待上传数据的RB。
再例如,优选地,若同一优先级的仍有待上传数据的RB有N个,且N个RB中有M个RB的待上传数据的长度l
i小于或等于Ul
rem/N,其中,N>1,M<=N,0<=i<=M-1,Ul
rem为当前剩余的上行授权资源的长度;则为M个RB分配各自所需的l
i长度的上行授权资源,并按照公式:
更新Ul
rem;为剩余的N—M个RB分配Ul
rem/N的上行授权资源,并将更新后的Ul
rem指示的上行授权资源迭代平均分配给剩余的N—M个RB。
其中,将更新后的Ulrem指示的上行授权资源迭代平均分配给剩余的N—M个RB包括:将N-M个RB视为新的上述操作(上一段中描述的操作)中的N个RB,再一次施行上述操作,反复执行,直到新一轮的N-M为1,则将所有的剩余上行授权资源分配给该RB。
再例如,优选地,在按照RB的优先级,为仍有待上传数据的RB分配上行授权资源的过程中,当首次对同一优先级的N个RB,且N个RB中有M个RB的待上传数据的长度li小于或等于Ulrem/N进行资源分配时,其中,N>1,M<=N,0<=i<=M-1,Ulrem为当前剩余的上行授权资源的长度;则为M个RB分配各自所需的li长度的上行授权资源,并按照公式:更新Ulrem,获得更新后的Ulrem;对剩余的N—M个RB(即剩余的N—M个数据长度大于Ulrem/N的RB)中的每个RB,获取本RB已分配到的上行授权资源(即第一轮调度分配到的授权长度),并与更新前的Ulrem/N相加得到本RB的Ulavg,从本RB对应的SDU长度向量中获取小于本RB的Ulavg、且与本RB的Ulavg最接近的SDU长度,作为本RB的授权长度lj,其中,各RB的SDU长度向量在本RB每次获得上行授权资源后更新,0<=j<=N-M;按照所有剩余的、仍有待上传数据的RB的标识(ID)排列顺序,将更新后的Ulrem指示的上行授权资源轮转分配给所有剩余的、仍有待上传数据的RB。例如,假定同优先级的RB为ABCD四个,本次调度到这个阶段,CD尚需资源分配时则本次分配给C,下次调度到这个阶段,如果还有CD需分配资源,则将资源分配给D。但不限于上述方式,第二轮调度还可以采用现有的调度方法,如,当调度到第二轮的时候,高优先级RB更有可能分配到剩余的ULgrant资源,并且这些ULgrant资源会倾向于满足所有的待发数据。
步骤S204:调度器确定待发送数据的RB已按照RB对应的SDU长度向量,将待发送数据组织到ULgrant资源中。
步骤S206:调度器确定MAC PDU的头长,并根据确定后的MAC PDU头长,进行MAC PDU组包。
一种可行方式是,先对组织到ULgrant资源中的、待发送数据进行MACSDU组包,再根据MAC SDU组包结果,确定MAC PDU的实际头长与预留头长的差,其中,预留头长大于或等于实际头长;然后,根据MAC PDU的实际头长与预留头长的差,在MAC层和物理层共享的BUFFER缓冲区中,进行MAC PDU的组包。
具体地,因预留头长是已知的,可以先将MAC层和物理层共享的BUFFER的首地址加上预留头长,得到SDU组包起始地址;从SDU组包起始地址开始,对组织到ULgrant资源中的、本RB的待发送数据进行MACSDU组包;在进行MAC SDU组包后,即可采用传统方式计算出MAC PDU的实际头长;然后,确定MAC PDU的实际头长与预留头长的差;在确定了MAC PDU的实际头长与预留头长的差之后,将MAC层和物理层共享的BUFFER的首地址加上实际头长与预留头长的差,得到PDU组包起始地址;从PDU组包起始地址开始,进行MAC PDU的组包,先写入MAC PDU的头部数据,再写入MAC SDU数据。
另一种可行方式是,先确定在最后一个MAC SDU中填充的RLC PDU的长度,再对组织到ULgrant资源中的、待发送数据进行MAC SDU组包;然后,根据RLC PDU的长度,在MAC层和物理层共享的BUFFER缓冲区中,进行MAC PDU的组包。此种方式又可以进一步分为两种方式:
方式一,在进行MAC SDU组包前,通知RLC层确定本RB的最后一个MAC SDU中填充的RLC PDU的长度;从RLC层获取确定的所述长度;再对组织到ULgrant资源中的、待发送数据进行MAC SDU组包;根据最后一个MAC SDU中填充的RLC PDU的长度,和根据各个MAC SDU的长度计算出的各个MAC SDU对应的头长,确定MAC PDU的头长;再根据确定的MAC PDU的头长和MAC SDU的长度,在MAC层和物理层共享的BUFFER中,进行MAC PDU的组包。
方式二,将最后一个MAC SDU在ULgrant资源中的普通填充(commonpadding,即填充数超过2个字节的填充)的长度,确定为最后一个MAC SDU中填充的RLC PDU的长度;再对组织到ULgrant资源中的、待发送数据进行MAC SDU组包;然后,获取最后一个MAC SDU在ULgrant资源中的授权长度;根据获取的授权长度,确定最后一个MAC SDU的头长为中头(即MAC PDU子头包含六个头字段R/R/E/LCID/F/L时,其中L头字段为7个bit的头长)与普通填充的长度之和,或者,为长头(即MAC PDU子头包含六个头字段R/R/E/LCID/F/L时,其中L头字段为15个bit的头长)与普通填充的长度之和;接着,根据确定的最后一个MAC SDU的头长,以及,其它各个MAC SDU的长度对应的各个MAC SDU的头长,确定MAC PDU的头长;再然后,根据MAC PDU的头长和MAC SDU的长度,在MAC层和物理层共享的BUFFER中,进行MAC PDU组包。
通过本实施例,在协议规定的调度器特性的基础上,提供了一种BUFFER零拷贝方案,直接使用MAC层和底层(物理层)共享的BUFFER进行MAC的组包,减少了一次拷贝,从而降低了CPU load。并且,针对BUFFER零拷贝对调度器进行了改进,对同优先级LC采用了一种轮询方式进行了公平性的近似处理。多个同优先级公平性,因为与当前信道的待发数据量直接相关所以较为复杂。本实施例采用了基础公平保证+剩余轮询的方式,前者保证每个同优先级RB都能得到均值内最大限度的完整SDU个数的授权,而剩余轮询也能确保最大限度的完整SDU个数的授权,同时兼顾公平原则,算法处理的复杂性也是可以接受的。
实施例三
参照图3,示出了根据本发明实施例三的一种数据组包方法的步骤流程图。
本实施例仍基于两轮调度的基本框架,从两轮调度和BUFFER零拷贝层面对本实施例的数据组包方法进行说明。
本实施例的数据组包方法包括以下步骤:
步骤S302:MAC调度器对所有Bj大于0的RB进行第一轮调度。
本步骤在ULgrant授权通告到达UE时执行,针对所有Bj大于0的RB,按照优先级的顺序(同优先级则按照ID顺序)分配ULgrant资源。每个RB得到的ULgrant授权长度GrantStep1为:SDU向量中从Bj向上取整值、和剩余ULgrant即Ulrem中的最小值。同时,更新Bj为Bj-GrantStep1。
具体地,第一轮调度针对PBR结果Bj:将ULgrant按照RB的优先级顺序,先根据Bj结果和待发数据长度分配资源给各个RB;如果在ULgrant耗尽之前,各个信道都被满足,则可以进入第二轮调度,而第二轮调度会将剩余的ULgrant,按照RB的优先级顺序,依次分配给还有待发数据的各RB。
具体的各调度轮次情形如下:
上述公式(1)和(2)中,RB共有N个,从0到N-1,ThStep1表示第一轮调度所需的无线资源量,Bj(n)表示第n个RB的Bj,也即,需要给第n个RB分配的数据长度,LTotal1(n)表示根据第n个RB的Bj确定的第n个RB的SDU长度,第n个RB的实际无线资源需求量为Bj(n)和LTotal1(n)中的小值;ThStep2表示第二轮调度所需的无线资源量,是第一轮数据调度上传后,各RB实际剩余的仍需要上传的数据所需要的无线资源量,也即,公式(2)中的LTotal2(n)与公式(1)中的LTotal1(n)的含义不同,是第n个RB在上传完第一轮的LTotal1(n)后,剩余的LTotal2(n)。
显然,当ULgrant资源值<ThStep1时,ULgrant资源不足以完成第一次调度;当ThStep1<=ULgrant资源值<ThStep2时,ULgrant资源足以完成第一次调度但不足以完成第二次调度;当ULgrant资源值>ThStep2时,ULgrant资源足以完成第二次调度。
本实施例中,设定ULgrant资源值>ThStep2,在ULgrant授权通告到达UE(User Equipment,用户设备)时进行资源分配和调度。
在资源分配和调度过程中,对RB进行ULgrant资源分配的依据包括SDU长度向量和Bj。其中,SDU长度向量是待发数据长度的一个变种,它考虑到了SDU的完整性。在RLC的缓存中会记录当前所有待发SDU的数据长度(包括RLC的首部,记为lk),称之为SDU长度向量。MAC在给RB进行调度时,会倾向于上取整到向量中的一个lk值,这样RLC向ULgrant资源中填写实际SDU时,就会倾向于保持SDU的完整性。
在第一阶段调度到某个RB时,可以将Bj与SDU长度向量相结合,实际分配到这个RB上的数据一般是要大于实际Bj的。具体地,对于第n个RB,MAC将Bj(n)值传给RLC,RLC对SDU长度向量表进行折半查找,返回大于Bj(n)的第一个长度向量lk(n)作为第一阶段调度结果,并更新Bj(n)-=lk(n),Bj(n)此时为负值。一个具有负Bj的RB就不能参与第一阶段调度了,它必须等过一段时间随着PBR将Bj重新增长到正值之后才能参与第一阶段调度。
步骤S304:如果完成了第一轮调度后还有ULgrant剩余,则MAC调度器执行第二轮调度。
按照优先级顺序分配ULgrant,如果这个RB的优先级是唯一的,则其得到的授权长度GrantStep2为Ulrem(剩余ULgrant)、和待发数据长度L二者的最小值,如果有ULgrant剩余再分配给次优先级RB。如果这个RB有相同优先级的RB,则这个RB得到的授权长度GrantStep2为Ulrem、和待发数据长度L二者的最小值,并把此RB排到同优先级RB的队尾,剩余的ULgrant再分配给同优先级次RB,如果没有相同优先级的RB,那么剩余的ULgrant就分配给次优先级低的RB,按照上面的方式依次处理后面的RB,直到分配完所有的ULgrant。通过这样的调度方式,确保了除了最后一个SDU可能因为授权不够而不完整外,其余所有的SDU都是完整,同时也兼顾了公平性。
第二阶段调度处理时,在36.321协议中规定,在第二阶段调度中,相同优先级的信道须得到平等地对待,这个要求增加了第二阶段调度工作的复杂性。从上述描述中可以看出,在第二阶段只需要将ULgrant按顺序全部分配给各RB,直到该RB的数据全部得到调度或者ULgrant耗尽。但是,因为需要考虑同优先级多RB的竞争,本发明做如下的分析:
设第二阶段调度到当前优先级P时的剩余ULgrant值为Ul
rem,有n个信道的优先级为P其上的数据长度为l
k,0<k<n-1;假设当前有m个信道上的数据长度(假设是l
1…l
m)小于等于Ul
rem/n,则它们得到的ULgrant资源即为其数据长度,更新Ul
rem为:
将Ul
rem/n与当前该RB已得到的ULgrant长度即Grant
Step1相加得到Ul
avg,并传给RLC让其从SDU长度向量中找到小于Ul
avg的第一个长度值l,先以这个l值作为这些RB的授权长度,则此轮平均化调度后还剩余的
此时,直接将Ul
rem按照RB的ID排列顺序(即不考虑优先级)全部分配掉。考虑到RB的ID排列顺序是不变的,所以在对这部分多余的长度进行分配时会进行轮转,只要当发生一次这样多余长度资源的分配,就会轮转一次ID排列顺序,这样最大限度的保证了公平性。
上面的策略展示了一个非常好的平均分配方案,但因为每轮第二阶段调度处理需要轮转同优先级LC的ID,且最坏的迭代次数是O(n)/2,所以算法性能很差,而且容易导致SDU分割而不完整。为此,下面采用一种近似的处理方法并且考虑SDU完整性,具体过程如下:
将Ulrem按照LC的ID排列顺序(即考虑优先级,高优先级的LC排在前面,同优先级LC ID小的LC排在前面)尽量满足一个LC。除非满足排在前面的LC后还有ULgrant剩余再考虑到其后的LC,为了确保公平,对于同优先级的LC进行轮询处理,即对于同优先级的LC得到调度资源后需排到同优先级的LC的队尾,那么下次调度就会优先调度上次没有分配到资源的同优先级的LC,这样最大限度的保证了SDU完整性,同时兼顾了公平性。
步骤S306:MAC调度器进行MAC PDU组包。
在上面的两轮调度基础上,本实施例采用三种不同方式实现BUFFER零拷贝方式的MAC PDU组包。
为了减少数据的拷贝次数,降低CPU load,BUFFER零拷贝指的是MAC层和底层(物理层)共享使用一个BUFFER,MAC层直接把组包数据写入BUFFER,而不再先通过中间地址进行组包再拷贝到BUFFER的方法。
以下对三种采用BUFFER零拷贝方式实现MAC PDU组包分别进行说明。
方式一,动态offset的方式,前提需要底层硬件支持BUFFER以动态offset的方式读取数据。也就是说,MAC组完包之后,数据不是从共享的BUFFER首地址写入MAC PDU值,而是从共享的BUFFER+offset的地址开始写入MAC PDU值,offset值是通过每次组包动态计算的。采用这种方式时,首先预留最大的MAC PDU头长Lmax,然后从(BUFFER的首地址+Lmax)的地址开始组MAC SDU,接着计算出真实的MAC PDU头长L,最后offset值就为BUFFER首地址加上(Lmax减L的差值),从(BUFFER的首地址+Lmax-L)的地址开始组MAC PDU。
方式二和方式三均是在写MAC SDU到BUFFER之前确定MAC PDU头的长度,采用上面的两轮调度,组最后一个MAC SDU的时候可能会造成MAC PDU的头长发生变化,因为RLC在最后一个MAC SDU授权长度限制内填充RLC PDU这个过程有可能会造成极少量的授权浪费,所以需要针对最后一个MAC SDU做特殊处理,确保在写最后一个MAC SDU的时候不会影响MAC PDU的头长。方式二和方式三的实现方式:
方式二,在写MAC SDU之前,提前通知RLC确定最后一个MAC SDU在授权长度限制内填充RLC PDU的长度。获取并根据这个长度在MAC层和底层共享的BUFFER中进行MAC PDU组包。其中,确定RLC PDU长度的参数可以携带在上下文(RLC的全局变量)中。
方式三,固定最后一个MAC SDU的头长,即,根据最后一个MAC SDU的授权长度确定MAC SDU的头长为中头+普通填充或者为长头+普通填充。通过普通填充的方式来抵消RLC在最后一个MAC SDU授权长度限制内填充RLC PDU长度这一个过程可能产生的授权浪费,同时需要杜绝长头变中头的可能。
上述方式中,方式一需要底层硬件支持BUFFER以动态offset的方式读取数据,而且硬件不能有字节对齐的限制,否则难以实现;方式二需要在写MAC SDU之前,提前通知RLC确定最后一个MAC SDU在授权长度限制内填充RLC PDU的长度,相对方式一计算相对复杂,可能会加大调度的延迟时间;方式三相对方式一,上行授权的利用率相对要低些,相对方式二计算要简单,从而能够降低调度的延迟时间,另外上行授权的利用率也相对低些。
本实施例提供了一种提高LTE系统多承载业务性能的MAC调度器,该调度器以简单高效的算法思想,合理调度具有不同优先级的多用户业务,并最大程度地利用ULgrant资源。该调度器算法兼顾了RB调度的各个调度要素或指标,但同时不会对ULgrant的利用率造成较大影响,又能降低调度的延迟,最大限度地满足SDU的完整性,最终还能实现BUFFER零拷贝。
实施例四
参照图4,示出了根据本发明实施例四的一种数据组包装置的结构框图。
本实施例的数据组包装置包括:第一确定模块402,用于确定待发送数据的RB是按照RB对应的SDU长度向量,将待发送数据组织到ULgrant资源中,其中,SDU长度向量中的元素分别用于标识RB的各SDU的分段长度;第二确定模块404,用于先对组织到ULgrant资源中的、待发送数据进行MAC SDU组包,再根据MAC SDU组包结果,确定MAC PDU的实际头长与预留头长的差,其中,预留头长大于或等于实际头长;或者,用于先确定在最后一个MAC SDU中填充的RLC PDU的长度,再对组织到ULgrant资源中的、待发送数据进行MAC SDU组包;组包模块406,用于当先对组织到ULgrant资源中的、待发送数据进行MAC SDU组包时,则根据MACPDU的实际头长与预留头长的差,在MAC层和物理层共享的BUFFER中,进行MAC PDU的组包;或者,当先确定在最后一个MAC SDU中填充的RLC PDU的长度时,则根据RLC PDU的长度,在MAC层和物理层共享的BUFFER中,进行MAC PDU的组包。
本实施例的数据组包装置用于实现前述多个方法实施例中相应的数据组包方法,并具有相应的方法实施例的有益效果,在此不再赘述。
实施例五
参照图5,示出了根据本发明实施例五的一种数据组包装置的结构框图。
本实施例对实施例四中的数据组包装置进行了进一步优化。优化后的数据组包装置中:
优选地,第二确定模块404在先对组织到ULgrant资源中的、待发送数据进行MAC SDU组包时:将MAC层和物理层共享的BUFFER的首地址加上预留头长,得到SDU组包起始地址;从SDU组包起始地址开始,对组织到ULgrant资源中的、待发送数据进行MAC SDU的组包;组包模块406在根据MAC PDU的实际头长与预留头长的差,在MAC层和物理层共享的BUFFER中,进行MAC PDU的组包时:将MAC层和物理层共享的BUFFER的首地址加上实际头长与预留头长的差,得到PDU组包起始地址;从PDU组包起始地址开始,进行MAC PDU的组包。
优选地,第二确定模块404在确定在最后一个MAC SDU中填充的RLCPDU的长度时:在进行MAC SDU组包前,通知RLC层确定最后一个MACSDU中填充的RLC PDU的长度;从RLC层获取确定的所述长度;组包模块406在根据RLC PDU的长度,在MAC层和物理层共享的缓冲区中,进行MAC PDU的组包时:根据RLC PDU的长度,和各个MAC SDU的长度,确定MAC PDU的头长;根据确定的MAC PDU的头长和MAC SDU的长度,在MAC层和物理层共享的BUFFER中,进行MAC PDU的组包。
优选地,第二确定模块404在确定在最后一个MAC SDU中填充的RLCPDU的长度时:将最后一个MAC SDU在ULgrant资源中的普通填充的长度,确定为最后一个MAC SDU中填充的RLC PDU的长度;组包模块406在根据RLC PDU的长度,在MAC层和物理层共享的BUFFER中,进行MAC PDU的组包时:获取最后一个MAC SDU在ULgrant资源中的授权长度;根据获取的授权长度,确定最后一个MAC SDU的头长为中头与普通填充的长度之和,或者,为长头与所普通填充的长度之和;根据最后一个MAC SDU的头长,和其它各个MAC SDU的长度,确定MAC PDU的头长;根据确定的MAC PDU的头长和MAC SDU的长度,在MAC层和物理层共享的BUFFER中,进行MAC PDU组包。
优选地,本实施例的数据组包装置还包括:调度模块408,用于在第一确定模块402确定待发送数据的RB已按照RB对应的SDU长度向量,将待发送数据组织到ULgrant资源中之前,在为各个待发送数据的RB按照各自对应的SDU长度向量进行第一轮的ULgrant资源分配之后,若ULgrant资源有剩余,则根据仍有待上传数据的RB的优先级,按照仍有待上传数据的RB对应的SDU长度向量,为仍有待上传数据的RB分配ULgrant资源,直到所有RB的待上传数据全部获得ULgrant资源或者ULgrant资源耗尽。
优选地,调度模块408在根据仍有待上传数据的RB的优先级,按照仍有待上传数据的RB对应的SDU长度向量,为仍有待上传数据的RB分配ULgrant资源时:若同一优先级的仍有待上传数据的RB有至少两个,则根据各个RB对应的LC(逻辑信道)的标识的排列顺序,按照各个RB对应的SDU长度向量,将剩余的ULgrant资源轮转分配给仍有待上传数据的RB。
优选地,本实施例的数据组包装置可以设置在MAC调度器中。
本实施例的数据组包装置用于实现前述多个方法实施例中相应的数据组包方法,并具有相应的方法实施例的有益效果,在此不再赘述。
本发明提供了一种数据组包方案,可用于MAC调度器对RB的ULgrant资源调度,能够为LTE多业务数据传输性能提供直接的有益效果,主要体现在:(1)算法调度功能全面:本发明提供的多种ULgrant资源调度算法不仅考虑到了多个RB的优先级、保证速率等基本配置,同时还近似处理了多个相同优先级信道的授权分配。能够兼顾业务的优先级保证,公平性,以及防止低优先级的饥饿。(2)算法重点考虑到了SDU传输的整体性:SDU整体性是提高LTE整体性能的一个手段,它能够有效地降低SDU的分割,减小上层报文的开销以及被重传的可能性。尽管SDU整体性给算法增加了一定的复杂性,但对系统的整体收益是很可观的。(3)算法简单:虽然本发明中的MAC调度器考虑到了多种调度特性,但基本上都采用了一种近似的实现方式,最明显的是第二阶段调度对同优先级RB采用轮询方式。严格的平均化需要考虑到SDU整体性,待发数据量,以及绝对均值,想要完美实现开销很大。但本解决方案保证了多RB,其优先级相同在一段时间里面的调度是公平的。
此外,本发明还在协议规定的调度器特性的基础上,提出了BUFFER零拷贝方案,直接使用MAC层和底层共享的BUFFER进行MAC的组包,减少了一次拷贝,从而降低了CPU load。而针对BUFFER零拷贝方案,对调度器进行的改进,即,对同优先级LC采用轮询方式进行了公平性的近似处理,采用基础公平保证+剩余轮询的方式,前者保证每个同优先级RB都能得到均值内最大限度的完整SDU个数的授权,而剩余轮询也能确保最大限度的完整SDU个数的授权,同时兼顾公平原则,算法处理的复杂性也是可以接受的。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上对本发明所提供的一种数据组包方法和装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。