用于LTE中RLC AM模式下的上下行并行处理方法
技术领域
本发明涉及移动通信技术领域,尤其是涉及一种用于LTE移动通信系统(包括TDD-LTE和FDD-LTE)中RLC(无线链路控制)层AM模式数据的传输方法。
背景技术
LTE的无线接入网协议分为三个层次物理层(L1)、数据链路层(L2)以及无线资源控制层(L3)。 L2进一步分为媒介接入控制层(MAC,Medium Access Control)、无线链路控制层(RLC,Radio Link Control)、分组数据收敛协议层(PDCP,Packet Data ConvergenceProtocol)。现有 RLC子层属于用户面 L2 的协议,位于 PDCP 层和 MAC 层之间。
RLC层主要负责无线接入网络的无线链路控制,为用户面数据和控制面数据提供传输服务。RLC子层由RLC实体(Entity)负责实现具体功能,根据RLC实体对应的不同类型的无线承载(Radio Bearer),RLC实体被分为三种类型:TM模式(Transparent Mode,透明模式),TM 不对数据本身做任何处理,数据在RLC层透传,发送实体设置一个发送缓存保存RLC SDU (Service Data Unit,服务数据单元),等待MAC 层指示发送时机,将数据发往低层,通过低层传到对等端的TM 接收实体,接收实体直接把数据发往高层,TM数据传输的特点是处理简单,时延小,适用于实时性要求较高,能容忍一定差错的业务,主要用于传输小区相关的信令消息;UM模式(Unacknowledged Mode,非确认模式),相对于TM,UM 提供了一定的可靠性保障,UM能够保证RLC SDU的按序递交,数据在RLC层发送方会加上序列号,在接受方会根据序列号进行重排序,但由于无 PDU(Protocol Data Unit,协议数据单元)重传,因此UM允许一定量的丢包;AM模式(Acknowledged Mode,确认模式),AM 是 RLC 层功能最复杂,可靠性最高的模式,采用ARQ(Automatic Repeat Reque,自动重复请求)机制保证RLC SDU的正确、按序递交,数据在RLC层发送方会加上序列号,在接收方会根据序列号进行重排序,并把数据的接收情况按照协议规定的包格式组成状态PDU发送给发送方AM实体,来报告数据接收的情况,对正确收到的数据 PDU 给出肯定应答,否则给出否定应答,发送方会重传未被应答的AMD PDU(AM Data PDU,AM数据PDU),以保证接收方能够正确、完整地收到每一个 AMD PDU将且发送方会确认并重传接收方没有收到的数据,RLC实体由RRC配置。
其中,TM 和 UM 的发送操作和接收操作是没有交互的,而AM发送模块和接收模块会有一些交互,不再完全相互独立,需要共享一些必要的信息来支持ARQ 机制。
1、如果AM发送模块和接收模块全部放在一个任务处理的话,两个模块是串行处理,不存在并发问题,流程比较简单,但是性能较低。
2、如果把AM发送模块和接收模块分别放在下行处理和上行处理两个任务中,就会减少上下行处理任务的耦合程度,提高任务的并发性,进而提高处理效率。那么对上行处理任务和下行处理任务的临界资源就要进行特殊的处理,来保证临界资源的互斥。此时,AM发送模块和接收模块分别可称为AM下行发送模块和AM上行接收模块。
综上所述,由于RLC下行发送模块要根据MAC调度结果完成组帧功能,属于半实时性线程,所以第二种处理效率较高的方案比较适合LTE RLC层AM模式数据处理。如图1所示,根据协议规定AM发送模块会根据MAC层的调度结果优先组RLC 状态PDU,其次组RLC重传数据PDU,最后组RLC新传数据PDU;而AM接收模块收到上行的RLC数据PDU后,会对收到的RLC数据PDU进行重复检测、重排序,最后从重排序后的RLC数据PDU中重组出RLC SDU后按顺序递交分发给上层。在发送模块组状态报告和接收模块对上行RLC PDU进行重排序及重组SDU时,都会访问到RLC PDU接收队列。因此就需要实现RLC PDU接收队列的共享,并且保证发送模块能严格按照调度周期规定的时序将数据发出,不会因共享信息的读写带来额外的负担,但现有技术中尚未出现相关解决方案。
发明内容
本发明针对现有技术的问题,结合LTE系统数据链路层的架构需求,设计一种方案实现LTE中RLC AM模式下的上下行并行处理方法,减少因共享信息的读写访问带来的负担,提高了AM下行发送模块和上行接收模块的并发性能。
本发明的技术方案提供一种用于LTE中RLC AM模式下的上下行并行处理方法,所述AM模式为确认模式。
在下行发送模块中,定义变量VT(S)、VT(A)、VT(MS)以及标志位CNTRL_PDU_FLAG,其中,VT(S)为下一个即将发送的AMD PDU的SN, SN为序列号,AMD PDU表示AM数据PDU,PDU为协议数据单元;VT(A)表示SN比它小的PDU已经收到了确认,VT(MS)是发送窗口上边界,恒等于VT(A) +AM_Window_Size,其中AM_Window_Size为发送窗口尺寸;标志位CNTRL_PDU_FLAG,用于标识此刻下行发送模块是否在组一个状态PDU,其中TRUE标识此刻下行发送模块正在组一个状态PDU,FALSE标识此刻下行发送模块未在组一个状态PDU;
在上行接收模块中,定义变量VR(R)、VR(MS)、VR(MR)、VR(H)、VR_RH以及VR_RL,其中,VR(R)为最后一个已经接收并且排序完毕的AMD PDU的SN+1,VR(MS)为能够反馈给发送方的AMD PDU接收状态对应的SN的最高可能值,VR(MR)为是接收窗口的上边界,恒等于VR(R) +AM_Window_Size,其中AM_Window_Size为接收窗口尺寸;VR(H)为接收到的最大AMDPDU的SN+1;VR_RH和VR_RL,分别标识上行接收模块被唤醒后要删除的已经排序重组完成的AMD PDU 的SN上限和下限;
建立AM承载时,首先初始化VR_RL = 0,VR_RH = 0,CNTRL_PDU_FLAG = FALSE;
在上行接收模块中会对AMD PDU进行重排序,并把PDU重组为 RLC SDU 递交给高层后,先不删除已经重组完成的RLC PDU以及该PDU相关的控制结构,等待下次RLC AM上行接收模块被唤醒时,上行接收模块执行以下步骤,
步骤A1,删除VR_RL<= SN< VR_RH的RLC PDU以及该PDU相关的控制结构,更新VR_RL=VR_RH;
步骤A2,检测该RLC数据PDU是否被重复接收,并丢弃重复的RLC数据PDU;若被乱序接收,则对RLC数据PDU按照SN进行重排序;
步骤A3,根据上行接收模块接收的AMD PDU的SN来更新VR(R)、VR(MS) 、VR(MR)、VR(H);
步骤A4,判断CNTRL_PDU_FLAG的值,如果CNTRL_PDU_FLAG值为FALSE进入步骤5,否则进入步骤A6;
步骤A5,更新VR_RH = VR(R);
步骤A6,将重排序完成的AMD PDU 重组为 RLC SDU;
步骤A7,将重组好的RLC SDU递交给高层;
步骤A8,处理上行状态PDU;
下行接收模块被唤醒后,优先组状态PDU,包括组状态RLC PDU之前先将CNTRL_PDU_FLAG置为TURE,然后再根据MAC调度结果指示组RLC状态PDU,组完RLC状态PDU后把CNTRL_PDU_FLAG置为FALSE;其次根据MAC调度结果指示组RLC重传数据PDU,最后根据MAC调度结果指示组RLC新传数据PDU;其中,组状态报告时只访问VR(R) <= SN< VR(MS)的PDU相关的控制结构。
而且,下行接收模块被唤醒后,进行以下流程,
步骤B1,收到MAC层调度的传输机会指示,下行发送模块被唤醒;
步骤B2,根据MAC给的传输机会,构造RLC状态PDU需要发送,包括以下子步骤,
步骤B2-1,如果下行发送模块没有RLC状态PDU需要发送则跳到步骤B3;
步骤B2-2,根据MAC调度结果指示组RLC状态PDU前,首先将CNTRL_PDU_FLAG置为TURE
步骤B2-3,根据MAC给的调度大小把SN映射在VR(R)和VR(MS)之间的AMD PDU的接收状态构造成状态PDU,组出的RLC状态PDU的总大小不能大于MAC给的传输机;
步骤B2-4,CNTRL_PDU_FLAG置为FALSE;
步骤B3,根据MAC调度结果指示组RLC重传数据PDU,包括以下子步骤,
步骤B3-1,如果没有多余传输机会则结束此次发送模块的工作;
步骤B3-2,判断是否有RLC重传数据PDU要发送,如果没有则跳到步骤B4;
步骤B3-3,根据剩余传输机会大小构造RLC重传数据PDU,组出的RLC重传数据PDU的总大小不能大于剩余的传输机会;
步骤B4,根据MAC调度结果指示组RLC新传PDU,包括以下子步骤,
步骤B4-1,如果没有多余传输机会,则结束此次发送模块的工作;
步骤B4-2,根据剩余传输机会大小构造RLC新传数据PDU,组出的RLC新传数据PDU的总大小不能大于剩余的传输机会。
针对LTE系统高速率、大容量的特点,本发明设计了一种适用LTE系统数据链路层的AM模式上下行模块并行处理方案,利用上行接收模块和下行发送模块对共享临界资源RLC AMD PDU接收队列的访问时间错开的方式来提高并发效率。该方案能够很好的避免由于保护上下行模块共同访问的临界资源而加锁带来的处理效率低的问题,保证了基站系统的处理性能。
附图说明
图1是现有技术中的AM处理的模块示意图。
图2是本发明实施例的正常情况下AM处理窗口示意图。
图3是本发明实施例的下行模块组一次状态报告,上行接收模块被唤醒两次的场景示意图。
图4是本发明实施例的AM下行发送模块流程图。
图5是本发明实施例的AM上行接收模块流程图。
具体实施方式
以下结合附图和实施例对本发明技术方案进行详细说明。
本发明针对现有技术的问题,结合LTE系统数据链路层的架构需求,设计一种方案实现RLC AM模式的数据传输,很好的提高了AM下行发送模块和上行接收模块的并发性能,提高RLC AM模式的处理性能。基本设计思路为:把上下行模块共同访问的临界资源RLC AMDPDU队列的访问时间错开,最大限度减少锁的粒度,提高执行效率。
实施例具体实现如下:
预先进行参数定义:
在AM下行发送模块中,定义VT(S)、VT(A)以及VT(MS)这几个变量:其中VT(S)为即将发送的AMD PDU的SN( Sequence Number, AMD PDU的序列号,每组一个AMD PDU,AMD PDU的SN逐增加1,对于AMD PDU来说SN的取值范围为从0到1023循环),每发送一个新的AMD PDU时更新;VT(A)表示SN比它小的AMD PDU应该都已经收到了确认了,它也是整个发送窗口的后驱,收到VT(A)对应的AMD PDU的确认后更新;VT(MS)是发送窗口上边界,其恒等于VT(A)+AM_Window_Size,其中AM_Window_Size为AM发送窗口尺寸,协议规定取值为512。
在AM 上行接收模块中,定义VR(R)、VR(MS)、VR(MR)、VR(H)、VR_RH以及VR_RL这几个变量:其中VR(R)为最后一个已经接收并且排序完毕的AMD PDU的SN+1,它是整个接收窗口的后驱,完全收到VR(R)对应的AMD PDU后更新;VR(MS)为能够反馈给发送方的AMD PDU接收状态对应的SN的最高可能值,也就是小于它的值的AMD PDU接收状态(是否完全正确接收)都可以被反馈给发送方;VR(MR)为是AM接收窗口的上边界,恒等于VR(R) +AM_Window_Size,AM_Window_Size为AM接收窗口尺寸,协议规定取值为512;VR(H)为接收到的最大AMDPDU的SN+1,不能超过接收窗口,收到更大的AMD PDU时更新。VR_RH和VR_RL,分别标识上行接收模块被唤醒后要删除的已经排序重组完成的AMD PDU的 SN的上限和下限,初始化值为0。
本发明把AM发送处理模块和接收处理模块分别放在上行处理和下行处理两个任务中,对于上行接收模块和下行发送模块都要访问的共享临界资源-接收消息队列采用访问和删除之间物理资源分开访问的方式:在上行接收模块中,AMD PDU重排序,重组为 RLCSDU 递交给高层后,先不删除已经重组完成的RLC AMD PDU以及相关的控制结构,等待下次RLC AM上行接收模块被唤醒时,一次性删除SN<VR(R)的RLC PDU以及其相关的控制结构即删除VR_RL<= SN< VR_RH的RLC PDU以及该PDU相关的控制结构,然后更新VR_RL=VR_RH,其中VR_RH<=VR(R)。而下行发送模块组状态报告时只访问VR(R) <= SN< VR(MS)的PDU相关的控制结构,把临界资源AM模式PDU接收队列的访问时间错开,即下行发送模块在组状态报告时,要读接收队列中的AMD PDU队列,从SN=VR(R)开始,根据AMD PDU队列中的每一个AMDPDU的接收状态(是否完全正确接收),对于SN满足VR(R) <= SN < VR(MS)的尚未被完全正确接收的AMD PDU,按PDU的SN增序和PDU内的字节段增序,根据MAC指示的调度结果组成RLC状态 PDU,根据协议规定,下行发送模块在组状态报告时只访问SN映射在VR(R)和VR(MS)之间的AMD PDU。其中<=表示≤,即小于等于。
为便于理解起见,提供相应场景如下:
(1)接收队列中AMD PDU重排序并重组为 RLC SDU 递交给高层后,先不删除已经重组完成的RLC PDU以及该PDU相关的控制结构,只更新VR_RH和VR_RL的值,等待下次RLCAM上行接收模块被唤醒时,一次性删除VR_RL<= SN< VR_RH的RLC PDU以及该PDU相关的控制结构,其中,<=表示≤,即小于等于。如图2所示为正常场景下AM模块处理窗口,处理窗口的大小为0~1023,对应AMD PDU的SN,为便于理解起见,将各PDU的状态采用不同符号在图中标识:
状态a:该PDU已经重组成SDU,并且已经删除了该PDU的相关数据结构
状态b:该PDU已经被接收,但未排好序
状态c:该PDU已经被接收,且已排好序,但还未被删除该PDU的相关数据结构
状态d:该PDU还未被接收
状态e:该PDU的接收情况可以组在状态报告里反馈给发送端
A:场景(1)中,AM上行接收模块收到SN=0和SN=4的RLC AMD PDU,被唤醒后,更新VR(R)=1、VR(H)=VR(MS)=5、VR(MR)=VR(R)+AM_Window_Size=513、VR_RH= VR(R)=1,并把SN=0的PDU重组成SDU递交给上层,此时SN=0的PDU处于状态c,SN=4的PDU处于状态b,其他PDU处于状态d。
B:场景(2)中,AM上行接收模块收到SN=1和SN=6的RLC AMD PDU被唤醒后,删除VR_RL<= SN< VR_RH,此时VR_RL、VR_RH为场景(1)中处理更新的结果,即VR_RL=0,VR_RH=1,此时删除0<= SN< 1(即SN=0)的RLC PDU以及该PDU相关的控制结构,更新相关参数VR_RL=VR_RH=1、VR(R)=2、VR_RH=VR(R)=2、VR(H)=7、VR(MR)= VR(R) +AM_Window_Size=514,并把SN=1的PDU重组成SDU递交给上层,此时SN=0的PDU处于状态a,SN=1的PDU处于状态c,SN=4、6的PDU处于状态b,其他PDU处于状态d。
C:场景(3)中,AM上行接收模块收到SN=2和SN=7的RLC AMD PDU被唤醒后,删除VR_RL<= SN< VR_RH,此时VR_RL、VR_RH为场景(2)中处理更新的结果,VR_RL=1,VR_RH=2,此时删除1<= SN< 2(即SN=1)的RLC PDU以及该PDU相关的控制结构,更新VR_RL=VR_RH =2、VR(R)=3、VR_RH=VR(R)=3、VR(H)=8、VR(MR)=VR(R) +AM_Window_Size=515,并把SN=2的PDU重组成SDU递交给上层,此时SN=0、1的PDU处于状态a,SN=2的PDU处于状态c,SN=4、6、7的PDU处于状态b,其他PDU处于状态d;同时状态禁止定时器超时,AM下行模块可以把3 <= SN < 5的PDU的接收状态以状态报告的形式返回给发送端,即 SN=3、4的PDU处于状态e。
D:场景(4)中,AM上行接收模块收到SN=3的RLC AMD PDU被唤醒后,删除VR_RL<=SN< VR_RH,此时VR_RL、VR_RH为场景(3)中处理更新的结果,VR_RL=2,VR_RH=3,此时删除2<= SN< 3(即SN=2)的RLC PDU以及该PDU相关的控制结构,更新VR_RL=3、VR(R)=5、VR_RH= VR(R)=5、VR(H)=8、VR(MR)= VR(R) +AM_Window_Size=517,并把SN=3和SN=4的PDU重组成SDU递交给上层,此时SN=0、1、2的PDU处于状态a,SN=3、4的PDU处于状态c,SN=6、7的PDU处于状态b;同时状态禁止定时器超时,AM下行模块可以把5 <= SN < 7的PDU的接收状态以状态报告的形式返回给发送端,即 SN=5、6、7的PDU处于状态e。
(2)由于上行接收模块和下行发送模块不是一个任务,所以下行发送模块组一次状态PDU期间,上行接收模块可能会被唤醒两次,导致下行发送模块组状态PDU时,正访问的PDU相关的控制结构被上行接收模块删除,场景如图3所示,状态标识方式和图2一致:
A:在场景(1)中,状态禁止定时器超时,可以把199 <= SN < 204的PDU的接收状态以状态报告的形式返回给发送端,即 SN=199、200、201、202、203的PDU处于状态e。
B:在场景(2)中,下行发送模块此时仍然在组状态报告,此时MAC有SN=199和200的两个PDU上传给RLC上行接收模块,RLC会把这些PDU重组成SDU传递给上层,并把VR(R)的值由场景1中的199更新为201、VR_RL的值由场景1中的197更新为199及VR_RH的值由场景1中的199更新为201,在下次上行接收模块被唤醒的时候就会删除SN=199和200的PDU相关的控制结构,这个时候下行发送模块和上行接收模块就有可能同时访问这块内存,发生临界资源的碰撞,如图中的SN=199和SN=200的包。
因此在下行发送模块中,定义一个标志位CNTRL_PDU_FLAG,来标识此刻下行发送模块是否在组一个状态PDU,其中TRUE标识此刻下行发送模块正在组一个状态PDU,FALSE标识此刻下行发送模块未在组一个状态PDU。
具体实施时可参考软件技术实现自动运行流程。实施例的流程设计如下:
首先,建立AM承载时,首先初始化VR_RL = 0,VR_RH = 0,CNTRL_PDU_FLAG =FALSE;
1、上行接收模块的工作如图5所示,主要包括在上行接收模块唤醒后进行以下步骤:
步骤1,删除VR_RL<= SN< VR_RH的RLC PDU以及该PDU相关的控制结构,更新VR_RL=VR_RH;
步骤2,检测该RLC数据PDU是否被重复接收,并丢弃重复的RLC数据PDU;若被乱序接收,则对RLC数据PDU按照SN进行重排序;
步骤3,根据上行接收模块接收的AMD PDU的SN来更新相应参数VR(R)、VR(MS)、VR(MR)、VR(H);
步骤4,判断CNTRL_PDU_FLAG的值,如果CNTRL_PDU_FLAG值为FALSE进入步骤5,否则进入步骤6;
步骤5,更新VR_RH = VR(R);
步骤6,将重排序完成的AMD PDU 重组为 RLC SDU;
步骤7,将重组好的RLC SDU递交给高层。
步骤8,处理上行的状态PDU。上行接收模块可结束。
上行接收模块的步骤1,在每次AM上行接收模块唤醒之后先删除VR_RL<= SN< VR_RH的RLC PDU以及该PDU的相关的控制结构,更新VR_RL=VR_RH,其中VR_RH<=VR(R);步骤4因为上行接收模块和下行发送模块不是一个任务,为了避免下行发送模块组一次状态PDU期间,上行接收模块被唤醒两次,判断CNTRL_PDU_FLAG的值,如果CNTRL_PDU_FLAG值为FALSE进入步骤5更新VR_RH = VR(R),否则进入步骤6将重排序完成的AMD PDU 重组为 RLC SDU。
2、下行发送模块的工作如图4所示,主要包括在下行接收模块被唤醒后进行:首先根据MAC调度结果指示组RLC状态PDU:组RLC状态PDU之前,将CNTRL_PDU_FLAG置为TURE;然后根据MAC调度结果指示组RLC状态PDU,组完RLC状态PDU之后CNTRL_PDU_FLAG置为FALSE;其次根据MAC调度结果指示组RLC重传数据PDU;最后根据MAC调度结果指示组RLC新传数据PDU。
实施例设计为下行接收模块被唤醒后进行包括以下步骤:
步骤1,收到MAC层调度的传输机会指示,下行发送模块被唤醒;
步骤2,根据MAC给的传输机会,构造RLC状态PDU,包括以下子步骤,
步骤2-1,如果下行发送模块没有RLC状态PDU需要发送则跳到步骤3,有则进入步骤2-2;
步骤2-2,根据MAC调度结果指示组RLC状态PDU前,首先将CNTRL_PDU_FLAG置为TURE;
步骤2-3,根据MAC给的调度大小把SN映射在VR(R)和VR(MS)之间的AMD PDU的接收状态构造成RLC状态PDU,组出的RLC状态PDU的总大小不能大于MAC给的传输机会;
步骤2-4,CNTRL_PDU_FLAG置为FALSE,进入步骤3;
步骤3,根据MAC调度结果指示组RLC重传数据PDU,包括以下子步骤,
步骤3-1,如果没有多余传输机会则结束此次发送模块的工作,有则进入步骤3-2;
步骤3-2,判断是否有RLC重传数据PDU要发送,如果没有则跳到步骤4,有则进入步骤3-3;
步骤3-3,根据剩余传输机会大小构造RLC重传数据PDU,组出的RLC重传数据PDU的总大小不能大于剩余的传输机会,进入步骤4;
步骤4,根据MAC调度结果指示组RLC新传数据PDU,包括以下子步骤,
步骤4-1,如果没有多余传输机会,则结束此次发送模块的工作,有则进入步骤4-2;
步骤4-2,根据剩余传输机会大小构造RLC新传数据PDU,组出的RLC新传数据PDU的总大小不能大于剩余的传输机会。
因为上行接收模块和下行发送模块不是一个任务,为了避免下行发送模块组一次状态PDU期间,上行接收模块被唤醒两次,本发明定义了标志位CNTRL_PDU_FLAG来防止AM上下行模块对共享资源PDU接收队列的访问碰撞。下行接收模块的步骤2-2中,下行发送模块组状态PDU时首先将CNTRL_PDU_FLAG置为TURE,步骤2-4在下行发送模块组完状态PDU后把CNTRL_PDU_FLAG重新置为FALSE;上行接收模块的步骤4中,在更新VR_RH 的值时,首先判断CNTRL_PDU_FLAG标志位,如果CNTRL_PDU_FLAG为TRUE,则表明下行发送模块正在组状态PDU,则不更新VR_RH的值,反之更新。
以上内容是结合具体的实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。