无线通信基站空口数据CIPHER加速方法.pdf

上传人:b*** 文档编号:628285 上传时间:2018-02-27 格式:PDF 页数:13 大小:637.37KB
返回 下载 相关 举报
摘要
申请专利号:

CN201410371834.3

申请日:

2014.07.31

公开号:

CN104102494A

公开日:

2014.10.15

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 9/44申请日:20140731|||公开

IPC分类号:

G06F9/44

主分类号:

G06F9/44

申请人:

武汉邮电科学研究院

发明人:

杨小帅; 蔡鑫; 张汇

地址:

430074 湖北省武汉市洪山区邮科院路88号

优先权:

专利代理机构:

武汉科皓知识产权代理事务所(特殊普通合伙) 42222

代理人:

严彦

PDF下载: PDF下载
内容摘要

一种无线通信基站空口数据cipher加速方法,初始化QMAN和SEC协处理器,分配内核内存用于保存用户态任务和内核线程需要交互的数据,初始化双无锁队列indata队列与outdata队列,创建内核任务、用户态接收消息任务和用户态发送消息任务;用户态发送消息任务将需要进行cipher处理的数据包放到双无锁队列的indata队列中,内核任务从indata队列中获取数据包,入队到QMAN队列,然后QMAN发到SEC协处理器中,处理完毕后填写到双无锁队列中的outdata队列中,唤醒用户态接收消息任务;用户态接收消息任务被唤醒后,直接将报文从outdata队列中取出交给其它业务模块处理。

权利要求书

1.  一种无线通信基站空口数据cipher加速方法,其特征在于:包括初始化过程和数据传输过程;
初始化过程包括以下子步骤,
步骤1.1,初始化QMAN和SEC协处理器,并初始化相应算法描述符;所述QMAN为硬件队列管理器;
步骤1.2,在SEC协处理器初始化后,分配一块内存用于保存用户态任务和内核线程需要交互的数据,然后初始化双无锁队列indata队列与outdata队列,indata队列为输入数据队列,outdata队列为输出数据队列;indata队列与outdata队列相同大小,两队列是一一对应,indata中存放接收数据,outdata对应的数据缓存区中存放相应数据经过SEC协处理器处理过后的结果;
步骤1.3,创建内核任务,该内核任务用来处理与协议栈的数据交互,包括轮询indata 队列,将indata队列中的数据写入SEC协处理器;
步骤1.4,创建用于用户态中空口数据cipher处理的用户态任务,所述用户态任务包括用户态接收消息任务和用户态发送消息任务;将步骤1.2中分配的内存映射到用户空间;
步骤1.5,创建用户态接收消息任务,该任务不断轮询outdata队列,获取SEC协处理器处理过后的消息;
数据传输过程包括以下子步骤,
步骤2.1,用户态发送消息任务将需要进行cipher处理的数据包放到双无锁队列的indata队列中,每写入一帧数据就将indata队列写指针加1;如果indata队列已满,根据消息优先级丢弃帧或等待indata队列非满;
步骤2.2,步骤1.3建立的内核任务从indata队列中获取数据包,入队到QMAN队列,然后QMAN根据步骤1.1初始化算法描述符的结果将QMAN队列中的数据包发到SEC协处理器中;如indata队列已空则等待;
步骤2.3,数据包被SEC协处理器处理完毕后,触发QMAN的DQRR中断,中断回调函数进行收包,将报文描述符中的信息填写到双无锁队列中的outdata队列中,递增outdata队列的写指针,唤醒用户态接收消息任务;
步骤2.4,用户态接收消息任务被唤醒后,直接将报文从outdata队列中取出交给其它业务模块处理,并将读指针加一,直到outdata队列再次为空,继续等待被唤醒。

2.
  根据权利要求1所述无线通信基站空口数据cipher加速方法,其特征在于:步骤1.2中,将分配用于保存用户态任务和内核线程需要交互的数据的内存块切分为多个大小相等的格子,每个格子的数据结构相同。

3.
  根据权利要求1或2所述无线通信基站空口数据cipher加速方法,其特征在于:所述无线通信基站为LTE基站,步骤1.1中初始化的相应算法描述符为LTE协议要求支持的算法描述符。

说明书

无线通信基站空口数据cipher加速方法
技术领域
本发明涉及无线通信技术领域,尤其是涉及一种无线通信基站空口数据cipher(加密和完整性校验)加速方法。
背景技术
无线通信系统中,最有代表性的是LTE系统。3GPP长期演进(LTE)项目是2006年以来3GPP启动的最大的新技术研发项目,这种以OFDM/FDMA为核心的技术可以被看作“准4G”技术。随着无线通信技术的进步,越来越重视空口数据安全性。为此,LTE专门制定了PDCP cipher方面的协议。Cipher处理需要大量的算法运算,如果纯粹用软件来实现,那么对CPU的负担会很大,而且实时性上也很难保证。所以,目前很多CPU都集成了cipher方面的硬件协处理器。但是,软件如何与硬件协处理器高效的协调工作也是一个比较有挑战性的工作。
发明内容
本发明提出了一种无线通信基站空口数据cipher加速方法,其目的是在无线通信基站空口数据cipher处理过程中,提高数据处理吞吐量,满足实时性要求,降低CPU的使用率。
本发明的技术方案提供一种无线通信基站空口数据cipher加速方法,包括初始化过程和数据传输过程;
初始化过程包括以下子步骤,
步骤1.1,初始化QMAN和SEC协处理器,并初始化相应算法描述符;所述QMAN为硬件队列管理器;
步骤1.2,在SEC协处理器初始化后,分配一块内存用于保存用户态任务和内核线程需要交互的数据,然后初始化双无锁队列indata队列与outdata队列,indata队列为输入数据队列,outdata队列为输出数据队列;indata队列与outdata队列相同大小,两队列是一一对应,indata中存放接收数据,outdata对应的数据缓存区中存放相应数据经过SEC协处理器处理过后的结果;
步骤1.3,创建内核任务,该内核任务用来处理与协议栈的数据交互,包括轮询indata 队列,将indata队列中的数据写入SEC协处理器;
步骤1.4,创建用于用户态中空口数据cipher处理的用户态任务,所述用户态任务包括用户态接收消息任务和用户态发送消息任务;将步骤1.2中分配的内存映射到用户空间;
步骤1.5,创建用户态接收消息任务,该任务不断轮询outdata队列,获取SEC协处理器处理过后的消息;
数据传输过程包括以下子步骤,
步骤2.1,用户态发送消息任务将需要进行cipher处理的数据包放到双无锁队列的indata队列中,每写入一帧数据就将indata队列写指针加1;如果indata队列已满,根据消息优先级丢弃帧或等待indata队列非满;
步骤2.2,步骤1.3建立的内核任务从indata队列中获取数据包,入队到QMAN队列,然后QMAN根据步骤1.1初始化算法描述符的结果将QMAN队列中的数据包发到SEC协处理器中;如indata队列已空则等待;
步骤2.3,数据包被SEC协处理器处理完毕后,触发QMAN的DQRR中断,中断回调函数进行收包,将报文描述符中的信息填写到双无锁队列中的outdata队列中,递增outdata队列的写指针,唤醒用户态接收消息任务;
步骤2.4,用户态接收消息任务被唤醒后,直接将报文从outdata队列中取出交给其它业务模块处理,并将读指针加一,直到outdata队列再次为空,继续等待被唤醒。
而且,步骤1.2中,将分配用于保存用户态任务和内核线程需要交互的数据的内存块切分为多个大小相等的格子,每个格子的数据结构相同。
而且,所述无线通信基站为LTE基站,步骤1.1中初始化的相应算法描述符为LTE协议要求支持的算法描述符。
本发明对比传统LTE用户面数据处理技术有以下创新点:
1、  利用硬件SEC协处理器来完成数据包的cipher处理比使用传统OCF(Open Cipher Framework)框架中的软件算法快很多。
2、  利用无锁队列和异步通知技术,完成单生产者和单消费者的同步,避免频繁的系统调用。
3、  利用内核-用户空间内存映射技术,避免内存拷贝。
附图说明
图1 为本发明实施例中sec frame结构图。
图2 为本发明实施例中双无锁队列的操作原理示意图。
图3 为本发明实施例中内核cipher模块驱动初始化流程图。
图4 为本发明实施例中用户态cipher发包程序处理流程图。
图5 为本发明实施例中内核cipher任务处理流程图。
图6 为本发明中用户态cipher收包程序处理流程图。
具体实施方式   
本发明主要针对LTE空口数据cipher处理的优化,适用但并不限于LTE基站,本方案同样适用于其它需要在嵌入式Linux系统中实现高效数据cipher处理的无线通信基站系统。该方案能满足无线通信基站建设中高速数据传输的需求,有效减少系统资源的占用,本设计充分利用FreeScale P4080 SEC协处理器的硬件加速性能,并且利用内核空间-用户空间内存映射技术避免内存拷贝,利用无锁化队列和异步通知机制减少内核态和用户态的上下文切换,从而显著的提高数据cipher处理的性能。
以下结合附图和实施例详细说明本发明技术方案。
实施例基于Linux系统实现,包括初始化过程和数据传输过程。
实施例的初始化过程包括以下子步骤,
步骤1.1,初始化QMAN(硬件队列管理器)和SEC协处理器,并初始化相应算法描述符。SEC表示安全引擎协处理器,可采用SEC驱动程序进行初始化。
此步骤的目的是初始化QMAN和SEC协处理器。LTE协议要求cipher支持四种算法,所以在初始化工程中,需要在QMAN中创建四条硬件通道,并且初始化这四种算法的SEC描述符。
步骤1.2,在SEC协处理器初始化后,分配一块内存,将内存块切分为多个大小相等,约2K字节的格子(根据L2协议栈软件协商结果),然后初始化双无锁队列的indata队列(输入数据队列)与outdata队列(输出数据队列);indata队列与outdata队列相同大小,两队列是一一对应,indata中存放接收数据,outdata对应的entry(数据缓存区)中存放该数据经过SEC协处理器硬件处理过后的结果。
实施例在硬件初始化后,分配一段物理地址连续的内核内存,该内存用来保存用户态任务和内核线程需要交互的数据。驱动软件将这块内存划分为多个大小相等的,长度为4K的格子,每个格子的数据结构相同,如图1所示。然后,再申请一段物理地址连续的内存,用来构造用户态程序和内核线程之间的双无锁队列,该双无锁队列的结构如图2所示。最后,将划分好的内存格子的地址,填入到双无锁队列中。
参见图1,每个格子的数据结构sec frame包括有Out_data、In_data、out_len、in_len、p_srcmsg、flag、private。
Out_data:输出数据
In_data:输入数据
Out_len:Out_data中的数据长度;
In_len: In_data中的数据长度;
p_srcmsg:数据的消息头指针;
flag:数据标志;
private:数据的私有结构。
参见图2,该图显示了两条无锁队列,即indata和outdata。L2_sec_recv和L2_sec_send分别是用户态中空口数据的cipher处理的收发任务,L2_sec_send通过b_write接口向indata队列中插入待处理的数据,L2_sec_recv通过a_read接口从outdata中获取处理完后的空口数据。sec_send(kernel thead)为一个内核任务,负责调用b_read接口从队列中获取待处理的空口数据,然后将该数据发送到SEC协处理器中。Dqrr callback()是处理SEC协处理器的中断回调函数,负责调用a_write接口,将处理完后的处理插入到outdata队列中。
具体实施时,一个基站可能为多个小区服务,每个小区相应设置一个双无锁队列(即一对indata队列和outdata队列),双无锁队列记为SEC_fb队列,SEC_fb表示SEC帧描述块。例如某基站为三个小区服务时,共有3个indata队列和3个outdata队列。
步骤1.3,创建内核任务,用来处理与协议栈的数据交互,该任务轮询indata 队列,将该队列中的数据写入SEC协处理器。
实施例中,在驱动初始化的最后阶段,将会创建一个内核任务,该任务负责将双无锁队列中的indata队列中的数据缓存指针取出来,根据cipher请求的五元组信息(由空口cipher协议规定),将指针指向的数据入队到步骤1.1中创建的QMAN硬件通道中。这个内核驱动初始化流程如图3所示:
步骤301,ioremap基址寄存器,即对基址寄存器执行ioremap操作,ioremap是内核提供的一个接口函数,用来将寄存器的物理地址映射为linux可见的虚拟地址;
步骤302,动态分配fifo队列内存,此次队列即indata和outdata这两条环形队列,失败则结束,成功则进入步骤303;
步骤303,分配缓存,并配置相关地址信息,例如内核中的文件描述符信息fd、链表头结构等;
步骤304,设置硬件寄存器,配置好sec回调函数,失败则结束,成功则进入步骤305;
步骤305,创建发送任务,失败则结束,成功则进入步骤306;
步骤306,注册驱动设备,结束流程。
步骤1.4,创建用户态任务(即用户态中空口数据的cipher处理的收发任务,包括用户态接收消息任务L2_sec_recv和用户态发送消息任务L2_sec_send),将步骤1.2中分配的内存,映射到用户空间。
用户态任务初始化中,将步骤1.2中分配的内存映射到用户空间,即从内核空间的一段映射到用户空间的一段,从而能避免网络数据从内核态到用户态的拷贝。
创建的用户态接收消息任务L2_sec_recv,该任务不断轮询outdata队列,获取SEC协处理器处理过后的消息。用户态接收消息任务如果发现双无锁队列中的outdata队列为空时,会调用poll系统调用等待内核任务唤醒。用户态发送消息任务L2_sec_send则主动进行,不需唤醒。
实施例的数据传输过程包括以下子步骤,
步骤2.1,用户态发送消息任务将需要进行cipher处理的数据包放到双无锁队列的indata队列中,每写入一帧数据就将indata队列写指针加1;如果队列已满,根据消息优先级丢弃帧或等待队列非满。
具体实施时,本领域技术人员可采用软件技术实现用户态发送消息任务。如图4所示,用户态发送消息任务L2_sec_send处理流程可设计如下:
步骤401,对SEC req消息(SEC服务请求消息),解析消息;
步骤402,当消息类型为SEC_reset(SEC功能复位请求)消息,设置相应的过滤表相应位,流程结束。当为非SEC_reset消息,进入步骤403;
步骤403,判断SEC_fb(SEC帧描述块)是否满,是则进入步骤404,否则进入步骤405;
步骤404,判断消息优先级是否为高,是则返回执行步骤403,否则释放消息,返回SEC_FULL错误(即双缓冲队列已满),结束流程;
步骤405,计算算法五元组,将payload及算法五元组写入对应的indata队列,并将队尾指针向前移动1,结束流程。
用户态cipher发包任务收到上层软件,如协议栈软件,发过来的cipher处理请求后,如果此时indata队列为满,这条请求将被缓存起来,当下次请求到来时再入队,当缓存的数目超过一定门限时,将会丢包。否则,将会计算这次请求的cipher五元组,将该五元组和数据段写入indate队列中,当发现indate队列中未处理的数据超过16个时,就通过系统调用并通知内核线程从indate队列中取包,尽量减少系统调用的使用。然后,将indata队列的写指针加一。
步骤2.2,步骤1.3建立的内核任务从indata队列中获取数据包,入队到QMAN队列,然后QMAN(硬件队列管理器)根据步骤1.1中的配置(即初始化LTE协议要求支持的算法描述符的结果)将QMAN队列中的包发到SEC协处理器中;如indata队列已空则等待。
QMAN(硬件队列管理器)包含了很多的QMAN队列,数据通过这些队列真正进入到SEC中。实施例中,当indata队列中有数据到来时,内核任务被唤醒。内核任务首先获取indata缓存,得到cipher五元组信息,修改对应的算法描述符,根据算法类型把数据入队到对应QMAN硬件队列中。然后在indata队列读指针加一。依次轮询,indata队列中的数据被全部处理完毕。
具体实施时,本领域技术人员可采用软件技术实现内核任务,例如该内核任务的处理流程可设计如图5所示:
步骤501,初始某indata队列为SEC_fb(SEC帧描述块)的工作队列,即当前SEC_fb工作队列;
步骤502,判断SEC_fb(SEC帧描述块)是否空,是则进入步骤506,否则进入步骤503;
步骤503,取indata队列头所对应的帧,修改descriptor(SEC算法描述符);
步骤504,调用qman_enqueue(QMAN的入队接口函数)入对应的QMAN队列;
步骤505,修改indata头指针向前移动1,当前SEC_fb工作队列指向下一indata队列,返回执行步骤501;
步骤506,判断是否扫描完所有SEC_fb队列,是则进入步骤507,否则设当前SEC_fb工作队列为下一indata队列,返回执行步骤502;
步骤507,判断是否所有SEC_fb队列为空,是则进入步骤508,否则返回执行步骤501;
步骤508,Schedule_cpu(放弃CPU使用权),返回执行步骤501。
内核任务收包时操作的都是indata队列,因此此处sec_fb工作队列是从所有SEC_fb队列中寻找可用的indata队列。
步骤2.3,数据包被SEC协处理器处理完毕后,触发QMAN的DQRR中断,中断回调函数Dqrr callback()负责收包,将报文描述符中的信息填写到双无锁队列中的outdata队列中,递增环形缓冲区的写指针,唤醒用户态接收消息任务。DQRR中断即数据出队中断。
实施例中,数据包被SEC协处理器处理完毕后,触发QMAN的DQRR中断,中断回调函数进行收包,将报文数据填写到双无锁队列中的outdata队列中,将outdata队列写指针加一,唤醒用户态接收消息任务。如果此时队列为满,无法入队,将等待直到队列可用。
步骤2.4,用户态接收消息任务被唤醒后,直接将报文从outdata队列中取出交给其它业务模块处理,并将读指针加一,直到outdata队列再次为空。Poll为linux的系统调用,即轮询。
实施例中,用户态接收消息任务如果发现双无锁队列中的outdata队列为空时,会调用poll系统调用等待内核任务唤醒。因此当步骤2.3发生后,用户态接收消息任务L2_sec_rec被唤醒,直接将报文数据从outdata队列中取出,并发送给上层应用程序,并将outdata队列读指针加一。当outdata中的数据全部被取出时,收包程序调用poll系统调用后,程序让出CPU开始睡眠,等待内核驱动的下一次唤醒。
具体实施时,本领域技术人员可采用软件技术实现用户态接收消息任务,例如用户态cipher收包任务的执行过程可如图6所示:
步骤601,获取当前SEC_fb工作队列;
步骤602,判断当前SEC_fb工作队列是否空,是则调用poll,等待内核驱动唤醒,唤醒后进入步骤603,否则直接进入步骤603;
步骤603,从当前SEC_fb工作队列中的队列头拷贝出数据,发送给上层应用程序,并修改头指针向前移动1,返回执行步骤602。
用户态接收消息的任务操作的都是outdata队列,因此此处sec_fb工作队列是outdata队列。
本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。

无线通信基站空口数据CIPHER加速方法.pdf_第1页
第1页 / 共13页
无线通信基站空口数据CIPHER加速方法.pdf_第2页
第2页 / 共13页
无线通信基站空口数据CIPHER加速方法.pdf_第3页
第3页 / 共13页
点击查看更多>>
资源描述

《无线通信基站空口数据CIPHER加速方法.pdf》由会员分享,可在线阅读,更多相关《无线通信基站空口数据CIPHER加速方法.pdf(13页珍藏版)》请在专利查询网上搜索。

1、10申请公布号CN104102494A43申请公布日20141015CN104102494A21申请号201410371834322申请日20140731G06F9/4420060171申请人武汉邮电科学研究院地址430074湖北省武汉市洪山区邮科院路88号72发明人杨小帅蔡鑫张汇74专利代理机构武汉科皓知识产权代理事务所特殊普通合伙42222代理人严彦54发明名称无线通信基站空口数据CIPHER加速方法57摘要一种无线通信基站空口数据CIPHER加速方法,初始化QMAN和SEC协处理器,分配内核内存用于保存用户态任务和内核线程需要交互的数据,初始化双无锁队列INDATA队列与OUTDATA队。

2、列,创建内核任务、用户态接收消息任务和用户态发送消息任务;用户态发送消息任务将需要进行CIPHER处理的数据包放到双无锁队列的INDATA队列中,内核任务从INDATA队列中获取数据包,入队到QMAN队列,然后QMAN发到SEC协处理器中,处理完毕后填写到双无锁队列中的OUTDATA队列中,唤醒用户态接收消息任务;用户态接收消息任务被唤醒后,直接将报文从OUTDATA队列中取出交给其它业务模块处理。51INTCL权利要求书1页说明书6页附图5页19中华人民共和国国家知识产权局12发明专利申请权利要求书1页说明书6页附图5页10申请公布号CN104102494ACN104102494A1/1页2。

3、1一种无线通信基站空口数据CIPHER加速方法,其特征在于包括初始化过程和数据传输过程;初始化过程包括以下子步骤,步骤11,初始化QMAN和SEC协处理器,并初始化相应算法描述符;所述QMAN为硬件队列管理器;步骤12,在SEC协处理器初始化后,分配一块内存用于保存用户态任务和内核线程需要交互的数据,然后初始化双无锁队列INDATA队列与OUTDATA队列,INDATA队列为输入数据队列,OUTDATA队列为输出数据队列;INDATA队列与OUTDATA队列相同大小,两队列是一一对应,INDATA中存放接收数据,OUTDATA对应的数据缓存区中存放相应数据经过SEC协处理器处理过后的结果;步骤。

4、13,创建内核任务,该内核任务用来处理与协议栈的数据交互,包括轮询INDATA队列,将INDATA队列中的数据写入SEC协处理器;步骤14,创建用于用户态中空口数据CIPHER处理的用户态任务,所述用户态任务包括用户态接收消息任务和用户态发送消息任务;将步骤12中分配的内存映射到用户空间;步骤15,创建用户态接收消息任务,该任务不断轮询OUTDATA队列,获取SEC协处理器处理过后的消息;数据传输过程包括以下子步骤,步骤21,用户态发送消息任务将需要进行CIPHER处理的数据包放到双无锁队列的INDATA队列中,每写入一帧数据就将INDATA队列写指针加1;如果INDATA队列已满,根据消息优。

5、先级丢弃帧或等待INDATA队列非满;步骤22,步骤13建立的内核任务从INDATA队列中获取数据包,入队到QMAN队列,然后QMAN根据步骤11初始化算法描述符的结果将QMAN队列中的数据包发到SEC协处理器中;如INDATA队列已空则等待;步骤23,数据包被SEC协处理器处理完毕后,触发QMAN的DQRR中断,中断回调函数进行收包,将报文描述符中的信息填写到双无锁队列中的OUTDATA队列中,递增OUTDATA队列的写指针,唤醒用户态接收消息任务;步骤24,用户态接收消息任务被唤醒后,直接将报文从OUTDATA队列中取出交给其它业务模块处理,并将读指针加一,直到OUTDATA队列再次为空,。

6、继续等待被唤醒。2根据权利要求1所述无线通信基站空口数据CIPHER加速方法,其特征在于步骤12中,将分配用于保存用户态任务和内核线程需要交互的数据的内存块切分为多个大小相等的格子,每个格子的数据结构相同。3根据权利要求1或2所述无线通信基站空口数据CIPHER加速方法,其特征在于所述无线通信基站为LTE基站,步骤11中初始化的相应算法描述符为LTE协议要求支持的算法描述符。权利要求书CN104102494A1/6页3无线通信基站空口数据CIPHER加速方法技术领域0001本发明涉及无线通信技术领域,尤其是涉及一种无线通信基站空口数据CIPHER(加密和完整性校验)加速方法。背景技术0002无。

7、线通信系统中,最有代表性的是LTE系统。3GPP长期演进LTE项目是2006年以来3GPP启动的最大的新技术研发项目,这种以OFDM/FDMA为核心的技术可以被看作“准4G”技术。随着无线通信技术的进步,越来越重视空口数据安全性。为此,LTE专门制定了PDCPCIPHER方面的协议。CIPHER处理需要大量的算法运算,如果纯粹用软件来实现,那么对CPU的负担会很大,而且实时性上也很难保证。所以,目前很多CPU都集成了CIPHER方面的硬件协处理器。但是,软件如何与硬件协处理器高效的协调工作也是一个比较有挑战性的工作。发明内容0003本发明提出了一种无线通信基站空口数据CIPHER加速方法,其目。

8、的是在无线通信基站空口数据CIPHER处理过程中,提高数据处理吞吐量,满足实时性要求,降低CPU的使用率。0004本发明的技术方案提供一种无线通信基站空口数据CIPHER加速方法,包括初始化过程和数据传输过程;初始化过程包括以下子步骤,步骤11,初始化QMAN和SEC协处理器,并初始化相应算法描述符;所述QMAN为硬件队列管理器;步骤12,在SEC协处理器初始化后,分配一块内存用于保存用户态任务和内核线程需要交互的数据,然后初始化双无锁队列INDATA队列与OUTDATA队列,INDATA队列为输入数据队列,OUTDATA队列为输出数据队列;INDATA队列与OUTDATA队列相同大小,两队列。

9、是一一对应,INDATA中存放接收数据,OUTDATA对应的数据缓存区中存放相应数据经过SEC协处理器处理过后的结果;步骤13,创建内核任务,该内核任务用来处理与协议栈的数据交互,包括轮询INDATA队列,将INDATA队列中的数据写入SEC协处理器;步骤14,创建用于用户态中空口数据CIPHER处理的用户态任务,所述用户态任务包括用户态接收消息任务和用户态发送消息任务;将步骤12中分配的内存映射到用户空间;步骤15,创建用户态接收消息任务,该任务不断轮询OUTDATA队列,获取SEC协处理器处理过后的消息;数据传输过程包括以下子步骤,步骤21,用户态发送消息任务将需要进行CIPHER处理的数。

10、据包放到双无锁队列的说明书CN104102494A2/6页4INDATA队列中,每写入一帧数据就将INDATA队列写指针加1;如果INDATA队列已满,根据消息优先级丢弃帧或等待INDATA队列非满;步骤22,步骤13建立的内核任务从INDATA队列中获取数据包,入队到QMAN队列,然后QMAN根据步骤11初始化算法描述符的结果将QMAN队列中的数据包发到SEC协处理器中;如INDATA队列已空则等待;步骤23,数据包被SEC协处理器处理完毕后,触发QMAN的DQRR中断,中断回调函数进行收包,将报文描述符中的信息填写到双无锁队列中的OUTDATA队列中,递增OUTDATA队列的写指针,唤醒用。

11、户态接收消息任务;步骤24,用户态接收消息任务被唤醒后,直接将报文从OUTDATA队列中取出交给其它业务模块处理,并将读指针加一,直到OUTDATA队列再次为空,继续等待被唤醒。0005而且,步骤12中,将分配用于保存用户态任务和内核线程需要交互的数据的内存块切分为多个大小相等的格子,每个格子的数据结构相同。0006而且,所述无线通信基站为LTE基站,步骤11中初始化的相应算法描述符为LTE协议要求支持的算法描述符。0007本发明对比传统LTE用户面数据处理技术有以下创新点1、利用硬件SEC协处理器来完成数据包的CIPHER处理比使用传统OCF(OPENCIPHERFRAMEWORK)框架中的。

12、软件算法快很多。00082、利用无锁队列和异步通知技术,完成单生产者和单消费者的同步,避免频繁的系统调用。00093、利用内核用户空间内存映射技术,避免内存拷贝。附图说明0010图1为本发明实施例中SECFRAME结构图。0011图2为本发明实施例中双无锁队列的操作原理示意图。0012图3为本发明实施例中内核CIPHER模块驱动初始化流程图。0013图4为本发明实施例中用户态CIPHER发包程序处理流程图。0014图5为本发明实施例中内核CIPHER任务处理流程图。0015图6为本发明中用户态CIPHER收包程序处理流程图。0016具体实施方式本发明主要针对LTE空口数据CIPHER处理的优化。

13、,适用但并不限于LTE基站,本方案同样适用于其它需要在嵌入式LINUX系统中实现高效数据CIPHER处理的无线通信基站系统。该方案能满足无线通信基站建设中高速数据传输的需求,有效减少系统资源的占用,本设计充分利用FREESCALEP4080SEC协处理器的硬件加速性能,并且利用内核空间用户空间内存映射技术避免内存拷贝,利用无锁化队列和异步通知机制减少内核态和用户态的上下文切换,从而显著的提高数据CIPHER处理的性能。0017以下结合附图和实施例详细说明本发明技术方案。0018实施例基于LINUX系统实现,包括初始化过程和数据传输过程。0019实施例的初始化过程包括以下子步骤,步骤11,初始化。

14、QMAN(硬件队列管理器)和SEC协处理器,并初始化相应算法描述符。说明书CN104102494A3/6页5SEC表示安全引擎协处理器,可采用SEC驱动程序进行初始化。0020此步骤的目的是初始化QMAN和SEC协处理器。LTE协议要求CIPHER支持四种算法,所以在初始化工程中,需要在QMAN中创建四条硬件通道,并且初始化这四种算法的SEC描述符。0021步骤12,在SEC协处理器初始化后,分配一块内存,将内存块切分为多个大小相等,约2K字节的格子(根据L2协议栈软件协商结果),然后初始化双无锁队列的INDATA队列(输入数据队列)与OUTDATA队列(输出数据队列);INDATA队列与OU。

15、TDATA队列相同大小,两队列是一一对应,INDATA中存放接收数据,OUTDATA对应的ENTRY(数据缓存区)中存放该数据经过SEC协处理器硬件处理过后的结果。0022实施例在硬件初始化后,分配一段物理地址连续的内核内存,该内存用来保存用户态任务和内核线程需要交互的数据。驱动软件将这块内存划分为多个大小相等的,长度为4K的格子,每个格子的数据结构相同,如图1所示。然后,再申请一段物理地址连续的内存,用来构造用户态程序和内核线程之间的双无锁队列,该双无锁队列的结构如图2所示。最后,将划分好的内存格子的地址,填入到双无锁队列中。0023参见图1,每个格子的数据结构SECFRAME包括有OUT_。

16、DATA、IN_DATA、OUT_LEN、IN_LEN、P_SRCMSG、FLAG、PRIVATE。0024OUT_DATA输出数据IN_DATA输入数据OUT_LENOUT_DATA中的数据长度;IN_LENIN_DATA中的数据长度;P_SRCMSG数据的消息头指针;FLAG数据标志;PRIVATE数据的私有结构。0025参见图2,该图显示了两条无锁队列,即INDATA和OUTDATA。L2_SEC_RECV和L2_SEC_SEND分别是用户态中空口数据的CIPHER处理的收发任务,L2_SEC_SEND通过B_WRITE接口向INDATA队列中插入待处理的数据,L2_SEC_RECV通过。

17、A_READ接口从OUTDATA中获取处理完后的空口数据。SEC_SENDKERNELTHEAD为一个内核任务,负责调用B_READ接口从队列中获取待处理的空口数据,然后将该数据发送到SEC协处理器中。DQRRCALLBACK是处理SEC协处理器的中断回调函数,负责调用A_WRITE接口,将处理完后的处理插入到OUTDATA队列中。0026具体实施时,一个基站可能为多个小区服务,每个小区相应设置一个双无锁队列(即一对INDATA队列和OUTDATA队列),双无锁队列记为SEC_FB队列,SEC_FB表示SEC帧描述块。例如某基站为三个小区服务时,共有3个INDATA队列和3个OUTDATA队列。

18、。0027步骤13,创建内核任务,用来处理与协议栈的数据交互,该任务轮询INDATA队列,将该队列中的数据写入SEC协处理器。0028实施例中,在驱动初始化的最后阶段,将会创建一个内核任务,该任务负责将双无锁队列中的INDATA队列中的数据缓存指针取出来,根据CIPHER请求的五元组信息(由空口CIPHER协议规定),将指针指向的数据入队到步骤11中创建的QMAN硬件通道中。这个内核驱动初始化流程如图3所示说明书CN104102494A4/6页6步骤301,IOREMAP基址寄存器,即对基址寄存器执行IOREMAP操作,IOREMAP是内核提供的一个接口函数,用来将寄存器的物理地址映射为LIN。

19、UX可见的虚拟地址;步骤302,动态分配FO队列内存,此次队列即INDATA和OUTDATA这两条环形队列,失败则结束,成功则进入步骤303;步骤303,分配缓存,并配置相关地址信息,例如内核中的文件描述符信息FD、链表头结构等;步骤304,设置硬件寄存器,配置好SEC回调函数,失败则结束,成功则进入步骤305;步骤305,创建发送任务,失败则结束,成功则进入步骤306;步骤306,注册驱动设备,结束流程。0029步骤14,创建用户态任务(即用户态中空口数据的CIPHER处理的收发任务,包括用户态接收消息任务L2_SEC_RECV和用户态发送消息任务L2_SEC_SEND),将步骤12中分配的。

20、内存,映射到用户空间。0030用户态任务初始化中,将步骤12中分配的内存映射到用户空间,即从内核空间的一段映射到用户空间的一段,从而能避免网络数据从内核态到用户态的拷贝。0031创建的用户态接收消息任务L2_SEC_RECV,该任务不断轮询OUTDATA队列,获取SEC协处理器处理过后的消息。用户态接收消息任务如果发现双无锁队列中的OUTDATA队列为空时,会调用POLL系统调用等待内核任务唤醒。用户态发送消息任务L2_SEC_SEND则主动进行,不需唤醒。0032实施例的数据传输过程包括以下子步骤,步骤21,用户态发送消息任务将需要进行CIPHER处理的数据包放到双无锁队列的INDATA队列。

21、中,每写入一帧数据就将INDATA队列写指针加1;如果队列已满,根据消息优先级丢弃帧或等待队列非满。0033具体实施时,本领域技术人员可采用软件技术实现用户态发送消息任务。如图4所示,用户态发送消息任务L2_SEC_SEND处理流程可设计如下步骤401,对SECREQ消息(SEC服务请求消息),解析消息;步骤402,当消息类型为SEC_RESET(SEC功能复位请求)消息,设置相应的过滤表相应位,流程结束。当为非SEC_RESET消息,进入步骤403;步骤403,判断SEC_FB(SEC帧描述块)是否满,是则进入步骤404,否则进入步骤405;步骤404,判断消息优先级是否为高,是则返回执行步。

22、骤403,否则释放消息,返回SEC_FULL错误(即双缓冲队列已满),结束流程;步骤405,计算算法五元组,将PAYLOAD及算法五元组写入对应的INDATA队列,并将队尾指针向前移动1,结束流程。0034用户态CIPHER发包任务收到上层软件,如协议栈软件,发过来的CIPHER处理请求后,如果此时INDATA队列为满,这条请求将被缓存起来,当下次请求到来时再入队,当缓存的数目超过一定门限时,将会丢包。否则,将会计算这次请求的CIPHER五元组,将该五元组和数据段写入INDATE队列中,当发现INDATE队列中未处理的数据超过16个时,就通过系统调用并通知内核线程从INDATE队列中取包,尽量。

23、减少系统调用的使用。然后,将INDATA队列的写指针加一。0035步骤22,步骤13建立的内核任务从INDATA队列中获取数据包,入队到QMAN队说明书CN104102494A5/6页7列,然后QMAN(硬件队列管理器)根据步骤11中的配置(即初始化LTE协议要求支持的算法描述符的结果)将QMAN队列中的包发到SEC协处理器中;如INDATA队列已空则等待。0036QMAN(硬件队列管理器)包含了很多的QMAN队列,数据通过这些队列真正进入到SEC中。实施例中,当INDATA队列中有数据到来时,内核任务被唤醒。内核任务首先获取INDATA缓存,得到CIPHER五元组信息,修改对应的算法描述符,。

24、根据算法类型把数据入队到对应QMAN硬件队列中。然后在INDATA队列读指针加一。依次轮询,INDATA队列中的数据被全部处理完毕。0037具体实施时,本领域技术人员可采用软件技术实现内核任务,例如该内核任务的处理流程可设计如图5所示步骤501,初始某INDATA队列为SEC_FB(SEC帧描述块)的工作队列,即当前SEC_FB工作队列;步骤502,判断SEC_FB(SEC帧描述块)是否空,是则进入步骤506,否则进入步骤503;步骤503,取INDATA队列头所对应的帧,修改DESCRIPTOR(SEC算法描述符);步骤504,调用QMAN_ENQUEUE(QMAN的入队接口函数)入对应的Q。

25、MAN队列;步骤505,修改INDATA头指针向前移动1,当前SEC_FB工作队列指向下一INDATA队列,返回执行步骤501;步骤506,判断是否扫描完所有SEC_FB队列,是则进入步骤507,否则设当前SEC_FB工作队列为下一INDATA队列,返回执行步骤502;步骤507,判断是否所有SEC_FB队列为空,是则进入步骤508,否则返回执行步骤501;步骤508,SCHEDULE_CPU(放弃CPU使用权),返回执行步骤501。0038内核任务收包时操作的都是INDATA队列,因此此处SEC_FB工作队列是从所有SEC_FB队列中寻找可用的INDATA队列。0039步骤23,数据包被SE。

26、C协处理器处理完毕后,触发QMAN的DQRR中断,中断回调函数DQRRCALLBACK负责收包,将报文描述符中的信息填写到双无锁队列中的OUTDATA队列中,递增环形缓冲区的写指针,唤醒用户态接收消息任务。DQRR中断即数据出队中断。0040实施例中,数据包被SEC协处理器处理完毕后,触发QMAN的DQRR中断,中断回调函数进行收包,将报文数据填写到双无锁队列中的OUTDATA队列中,将OUTDATA队列写指针加一,唤醒用户态接收消息任务。如果此时队列为满,无法入队,将等待直到队列可用。0041步骤24,用户态接收消息任务被唤醒后,直接将报文从OUTDATA队列中取出交给其它业务模块处理,并将。

27、读指针加一,直到OUTDATA队列再次为空。POLL为LINUX的系统调用,即轮询。0042实施例中,用户态接收消息任务如果发现双无锁队列中的OUTDATA队列为空时,会调用POLL系统调用等待内核任务唤醒。因此当步骤23发生后,用户态接收消息任务L2_SEC_REC被唤醒,直接将报文数据从OUTDATA队列中取出,并发送给上层应用程序,并将OUTDATA队列读指针加一。当OUTDATA中的数据全部被取出时,收包程序调用POLL系统调用后,程序让出CPU开始睡眠,等待内核驱动的下一次唤醒。0043具体实施时,本领域技术人员可采用软件技术实现用户态接收消息任务,例如用户态CIPHER收包任务的执。

28、行过程可如图6所示步骤601,获取当前SEC_FB工作队列;说明书CN104102494A6/6页8步骤602,判断当前SEC_FB工作队列是否空,是则调用POLL,等待内核驱动唤醒,唤醒后进入步骤603,否则直接进入步骤603;步骤603,从当前SEC_FB工作队列中的队列头拷贝出数据,发送给上层应用程序,并修改头指针向前移动1,返回执行步骤602。0044用户态接收消息的任务操作的都是OUTDATA队列,因此此处SEC_FB工作队列是OUTDATA队列。0045本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。说明书CN104102494A1/5页9图1图2说明书附图CN104102494A2/5页10图3说明书附图CN104102494A103/5页11图4说明书附图CN104102494A114/5页12图5说明书附图CN104102494A125/5页13图6说明书附图CN104102494A13。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1