微波EDA网,见证研发工程师的成长!
首页 > 通信和网络 > 通信网络技术文库 > 提升LTE基站处理效率

提升LTE基站处理效率

时间:06-20 来源:互联网 点击:
4 基于Pktlib的层2零拷贝数据处理

层2处理中经过PDCP层处理的包保存在硬件队列中,RLC和MAC模块需要根据调度器提供的调度结果对PDCP处理的包进行重新封装,在这个过程中需要添加RLC协议头,MAC协议头,还需要对PDCP包进行切割,重组(因为调度结果是根据当前空口状态产生的,跟PDCP的包长不可能匹配)。传统的做法是采用内存拷贝,软件开销比较大。采用Pktlib可以通过相应的函数实现零拷贝,提高层2处理效率。

包的合并

层2处理中有很多包的合并操作,常见的场景有:

(1) 在处理PDCP,RLC,MAC 层协议的时候添加对应的协议头。

(2) RLC收到调度结果后需要将两个或多个PDCP的PDU打包为一个RLC的PDU

(3) MAC复用需要将多个RLC的PDU打包为一个MAC的PDU如图4 所示,通过调用Pktlib_packetMerge函数可以将输入的两个QMSS格式的包合并为一个新的包。这一操作实际上是将包1的Next指针置为包2的P地值,在合并的过程中没有任何的内存拷贝。


图4:包的合并

包的拷贝

层2处理中包的拷贝主要发生的RLC包进入重传缓冲区,RLC协议在AM模式下对处理完成的包在提交给MAC进行处理的同时,还必须拷贝一份放入重传缓冲区。如果接收端发出了重传请求,下一次RLC会从重传缓冲区取出数据重发。只有在收到接收端的确认后,RLC才能释放重传缓存区中的包。

如图5所示,Pktlib在做包的拷贝时不是通过内存拷贝来实现的,而是通过将传入的一组空的PD按照原始包的结构重新链接一次。拷贝后,包1和包2的PD/BD不同,但是PD/BD所指向的内存是同一块。这种包的拷贝(其实包的切割也会出现相同的问题)要求在包的释放时只有在确认同一块内存所关联的所有包都被使用完了之后,才能进行内存的释放。在Pktlib_freePacket函数中会查找当前包下所有PD/BD所指向内存所关联的所有PD/BD的当前情况,如果还有PD/BD在使用这块内存就不立即释放,只有在所有PD/BD都不使用这块内存了,才会将它释放。


图5: 包的拷贝

包的分割

层2处理中包的分割操作,主要有下面两个场景:

(1) RLC收到调度结果后需要将一个PDCP的PDU分割为两个或多个RLC的PDU

(2) MAC复用需要一个RLC 的PDU分割为两个或多个MAC的PDU如图6所示,Pktlib在做包的分割时是通过传入一个空的PD,然后用这个PD指向切割的字节位置构造出新的包。从图中可以看到切割后包1缓存2和包2缓存1在同一个内存块上,只有当这两个包都不在使用这块内存之后,这个内存块才能得到释放。


图6: 包的分割

Pktlib的性能

使用Pktlib的API能够完全替换传统的基于OS的内存管理,并且能实现零拷贝的包合并,复制和分割,在内存处理的效率上大大优于传统方案。下表列出了在TI公司TMS320C6614 芯片上测试得到的函数性能。

表2: Pktlib主要函数的性能


总结

TI在Keystone上提供的Pktlib能够实现硬件和软件内存管理的统一,实现基于包的数据合并,拷贝,分割,以及软件与硬件加速器之间完全的零拷贝数据传递。这些特点正好适应了LTE层2中大批量包数据处理的要求。结合Pktlib进行LTE基站层2软件的开发,能极大地提高包的处理效率,在硬件规格不变的情况下提供更高的系统吞吐率。本方案为基于Keystone SoC的LTE基站开发提供了一个有益的参考。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top