徐方圆 张治中 李 晨
(重庆邮电大学通信与信息工程学院 重庆 400065)
传统测试基站容量的方法是使用多个终端对基站进行呼叫,缺点是需要布置多个终端测试,成本高且十分复杂。而5G终端模拟器能同时模拟多个用户的行为,在进行基站测试时,只需要放置几台终端模拟设备就可以代替大量的终端,这样大大减少了测试基站容量的复杂性。在5G终端模拟系统中,随机接入过程是一个至关重要的过程,只有经过随机接入过程后UE才能进行上行数据的传输。文献[1]提出了NB-IOT系统的随机接入过程的实现,主要针对物联网中超低复杂性和低吞吐量来设计,具有窄带随机接入的特点。文献[2]提出了基于TD-LTE系统的随机接入过程的设计与实现,主要面向TD-LTE系统中终端的随机接入,对用户的接入速度和时延达不到5G低时延高速的标准要求。为了使多个用户能够获得上行同步以及满足时延标准,5G终端模拟系统中的随机接入过程具有十分重要的作用。
为更好提高系统资源利用率和管理系统资源,设计出了线程池。在MAC层实现中,创建一个主进程,在主进程中创建任务管理线程、管理线程、监控线程,以及一个任务池、空闲线程池、忙碌线程池。对线程池的动态调度和调整,由监控线程负责。将MAC层中的消息事件封装成任务并激活休眠,是任务管理线程的主要任务。管理线程主要负责从任务池中取任务以及从线程池中取线程,通过条件变量进行同步。监控线程主要负责动态调整和调度线程池。任务池主要将任务封装成任务对象。空闲线程池主要是负责创建线程对象,忙碌线程池主要对与任务匹配的线程进行处理。当任务线程中的任务到达时,管理线程才会从休眠的状态中被激活。
管理线程先将任务线程池中线程ID与空闲线程池中的线程ID赋值,然后将任务池中的函数指针放到线程池对象中进行匹配,最后将匹配到的任务放到相应的空闲线程池中的线程中。
将空闲线程池中的线程添加到忙碌线程池中,在忙碌线程池中处理匹配的任务。主要思路如下:创建空闲线程池链表和忙碌线程池链表,在空闲线程池中创建8个用户线程。此时监控进程对空闲线程池中的线程进行判断,如果创建的用户线程大于空闲线程池线程总量的80%,则添加20%的空闲线程池线程总量。如果创建的用户线程小于线程池线程总量的50%,则杀死多余20%空闲线程池线程总量。获取用户线程链表的头结点,当第一个任务到达时,将空闲线程池中的第一个用户线程节点取出,然后添加到忙碌线程池链表头节点后面,并将此用户线程节点的指针域置为空。当第二个任务到达时,将空闲线程池中的第二个用户线程节点取出,添加到忙碌线程池链表的第一个节点后面,并将添加的第二个用户线程节点的指针域置为空。以此类推,当8个用户同时添加时,只需将空闲线程池中的8个线程添加到忙碌线程池中,由忙碌线程池来处理8个用户的任务。最终,降低添加用户线程的时间复杂度,从原来轮询整个线程链表时的O(N)下降到O(1),具体流程如图1所示。
图1 线程池设计
图2 链表的设计
随机接入消息所在的任务对象与空闲线程池中的任务对象,通过管理线程进行匹配。如果匹配成功,将空闲线程池中匹配成功的线程添加到忙碌线程池,并对随机接入消息进行处理,通过原语发送到物理层。以随机接入过程为例子,利用线程池的思想设计具体流程如图3所示。
图3 随机接入过程设计
随机接入主要采用状态分析法对各个交互接口进行分析。以原语的形式对接入状态进行设计,5G终端模拟系统中UE的状态转移图如图4所示。
图4 UE状态分析
UE刚开机时处于空状态NUL,UE的RRC层命令MAC层去测量周围小区的功率和频点。经物理层测量后上报给RRC层,RRC层就会根据测量的值取平均最终得出小区驻留的结果。此时UE就会处于选择态SEL。当小区驻留后,基站会不断地广播MIB消息,UE收到基站广播的MIB消息后对其进行解析然后命令物理层接收SIB1消息。当物理层接收到SIB1消息并解析成功后,UE由选择态SEL变成空闲态IDL。当UE需要接入到基站时就会从空闲态IDL变成接入态ACC,此时UE开始随机接入。当随机接入完成时,UE由接入态ACC变成连接态CON。当UE连接到小区时,如果想要断开无线连接,UE会从连接态CON变成非激活态INA。当UE处于非激活态时,此时UE与核心网保持连接,但断开了无线连接。本文主要研究UE从接入态ACC到连接态CON的过程。
原语是协议通信的一种形式,也是函数接口的一种表示方法,运用原语来描述协议栈之间的消息交互更加准确。当UE发起随机接入时,原语设计如图5所示。具体步骤如下:
图5 UE原语设计
步骤1物理层在收到PHY_SSB_REQ后,开始SSB的测量,测量的过程中会不断地向MAC层发送PHY_SSB_ACK,当收齐SSB后,MAC层选择随机接入前导和随机接入资源,并将选择的结果和其他参数通过原语PHY_RACH_REQ发给物理层。
步骤2物理层在收到随机接入响应后,组装原语PHY_RACH_REC发给MAC,MAC收到该原语后,首先存储消息中的退避值(无退避值则设为0),然后根据消息中的RAPID是否与前导匹配来判断随机接入响应是否接收成功,如果成功,则执行定时提前命令以及保存上行授权信息,如果失败且未达到前导最大发送次数,重新发起前导和资源选择并重发。最后将接收成功或失败(达到前导最大发送次数)的结果通过原语MAC_ACC_IND发送给RRC层。
步骤3若随机接入响应接收成功,则RRC会将RRC连接建立请求通过原语MAC_RRC_SETUP发送至MAC层队列来建立请求,然后开启竞争解决定时器。
步骤4当物理层收到Msg4后,进行解码,将解码结果通过原语PHY_DL_ACK发送到MAC层,MAC层收到后停止竞争解决定时器,根据Msg4中携带的竞争解决标识或C-RNTI判断竞争解决是否成功,若成功则组装原语MAC_CCCH_IND上报给RRC,至此随机接入过程完成。若不成功且未达到前导最大发送次数,则再次发送前导。如果竞争解决成功,则RRC会向MAC层发送原语MAC_CONNECT_REC,MAC层收到后保存参数,并发送PHY_CONNECT_REQ给物理层,之后MAC层跳到连接态。
测试的方案有很多,论文主要基于Linux平台下进行模拟测试,最终生成测试日志log。然后将传统用户模拟与本文设计模拟的线程资源占用率进行对比。整个测试的形式是以消息的传输形式体现的。对于基于竞争的随机接入测试时,首先,按照TS38.331协议标准配置随机接入前导资源。其次,当发送Msg1后,UE开启时间窗ra-ResponseWindow。在有效的时间窗内,对收到的随机接入响应的数据包进行解析。最后对竞争解决进行测试,主要的判断依据是能否接收到小区的信息,如果能说明竞争解决成功。
如图6所示,按照TS38.331协议配置了发送前导码的相关资源。如图7可知,随机接入响应能成功解出ra_RNTI并且RAR中的RAPID的值与preamble id相等,说明随机接入响应成功。Msg3的发送数据如图8所示。当发送Msg3时,终端侧开启竞争解决定时器并在定时器定时的范围内成功地接收了Msg4。Msg4的接收如图9所示,最终UE建立了RRC连接并成功驻留主小区。
图6 随机接入资源选择测试用例
图7 RAR PDU解析
图8 Msg3的发送数据
图9 Msg4的接收
传统模拟用户在模拟过程中采用线程的结构,其资源利用情况如图10所示。本文设计的是5G终端模拟采用的是线程池架构设计,其资源利用情况如图11所示。结果表明,采用线程池架构实现随机接入过程的CPU占用率比传统的使用线程的CPU占用率低30%左右。随机接入过程中大大减少创建线程和销毁线程的环节。故此方案设计更有利于资源的节省和提高资源利用效率。
图10 采用普通线程系统的资源利用情况
图11 采用线程池系统的资源利用情况
针对资源能耗的问题,文中首先提出了一种线程池的架构对随机接入过程进行设计,避免频繁创建线程造成的资源浪费。然后根据UE的状态,对UE随机接入过程原语进行设计。最后,对5G终端模拟系统中UE的随机接入过程进行测试,并对传统用户模拟与本文设计模拟的线程资源占用率进行对比。结果表明,采用本文设计的5G终端模拟系统随机接入过程的资源利用率大大增加,减少线程不必要的资源损耗。