LTE層2處理的特點
層2在LTE中位于層1(物理層)和層3(RRC, RRM, S1-AP等協(xié)議)之間,它的作用是屏蔽層1的細節(jié),向?qū)?提供可用的服務接入點(SAP)。LTE中的層2在下行方向上依次通過PDCP, RLC和MAC 3個子層(如圖1)。每個子層處理之前的數(shù)據(jù)叫做服務數(shù)據(jù)單元(SDU),處理之后的數(shù)據(jù)叫做協(xié)議數(shù)據(jù)單元(PDU) ,PDU是對SDU的數(shù)據(jù)加以一些特殊的處理,同時添加一個本子層特定的協(xié)議頭所形成的。上行方向處理與下行類似,只是3 個子層通過的順序相反。PDCP層主要完成數(shù)據(jù)包頭的壓縮與解壓縮(ROHC),數(shù)據(jù)內(nèi)容的加密與解密,以及向上層PDU的順序遞交。RLC層根據(jù)MAC層的調(diào)度結果對PDCP的PDU進行拆分和重組,同時實現(xiàn)ARQ的功能。MAC層主要實現(xiàn)與調(diào)度和HARQ相關的功能,包括邏輯信道向傳輸信道的映射,對RLCPDU的復用與解復用,HARQ糾錯與重傳等。
從實現(xiàn)的角度看,一般將MAC層中的調(diào)度和優(yōu)先級管理作為一個單獨的模塊,稱為調(diào)度器(Scheduler)。調(diào)度器要根據(jù)空口的狀態(tài)和網(wǎng)絡當前要發(fā)送的數(shù)據(jù)量以及優(yōu)先級,對空口資源進行實時的分配,是一個計算密集型的模塊。將PDCP,RLC和MAC層中的復用組包功能定義為另一個模塊,稱為用戶面,這部分主要根據(jù)協(xié)議的規(guī)定完成加頭,去頭,合并,拆分,加密,解密等處理,是一個數(shù)據(jù)吞吐密集型的模塊。因為LTE采用全IP的網(wǎng)絡架構,所有用戶面處理的包都是TCP/IP的包,本文所介紹的Pktlib就是針對這種包類型,結合TI公司Keystone SoC中的硬件隊列管理器(QMSS)所開發(fā)的一個軟件包,它能提高層2用戶面的處理效率,實現(xiàn)基于硬件隊列的內(nèi)存管理和真正的數(shù)據(jù)零拷貝,同時接口簡單,便于用戶移植。
圖1:LTE層2下行結構
2. QMSS和Pktlib
QMSS是Keystone上集成的硬件隊列管理器。每一個硬件隊列都由一組特定的寄存器控制,用戶通過讀寫寄存器完成包的入隊和出隊。隊列中的包要滿足QMSS特定的格式要求。一個包由包描述符(PD)和對應的緩存組成,包的所有屬性信息都保存在PD中,包中的緩存可以分片,不同的分片之間地址可以不連續(xù),每一個分片的屬性保存在對應的緩存描述符(BD)中。滿足這種格式的包可以壓入硬件隊列,同一個隊列中包的前后鏈接關系由硬件維護。圖2畫出了硬件隊列和其中的包的結構。在Keystone上,這種格式的包可以直接壓入硬件加速器和外設(如以太網(wǎng)和SRIO)的發(fā)送隊列(這些發(fā)送隊列也屬于QMSS所管理的硬件隊列),進行硬件加速處理或數(shù)據(jù)發(fā)送。
圖2:硬件隊列和包格式圖
Pktlib是TI基于QMSS封裝的一個軟件開發(fā)包,它采用QMSS的包作為基本的內(nèi)存管理單元,將硬件隊列虛擬為內(nèi)存申請的堆,通過包的指針操作替代了內(nèi)存的拷貝,拼接和分割。Pktlib的主要函數(shù)接口和功能如下表。
表1: Pktlib主要函數(shù)和功能
3. 基于Pktlib的層2內(nèi)存管理
層2是一個基于包處理的模塊,在處理中需要臨時申請大量的內(nèi)存,內(nèi)存管理的效率是影響層2處理性能的關鍵因素。傳統(tǒng)的層2處理一般直接采用操作系統(tǒng)的內(nèi)存管理模塊,完全通過軟件來管理內(nèi)存,這種處理方法在軟件處理和加速器處理接口的地方必須做一次數(shù)據(jù)拷貝,把加速器處理完的數(shù)據(jù)從加速器的緩存區(qū)中拷貝到軟件的緩存中。這種拷貝在大量的包處理中極大地影響了效率。同時傳統(tǒng)的內(nèi)存管理方法因為無法通過軟件直接保證多核互斥,在多核共享內(nèi)存的管理上效率很低。
基于Pktlib的內(nèi)存管理能解決傳統(tǒng)內(nèi)存管理的問題。以LTE下行處理為例,在Keystone上PDCP層的空口安全保護在安全加速器(SA)中完成,其后需要用軟件完成RLC和MAC層的處理,然后將處理完的包交給物理層進行編碼。層2和物理層的接口根據(jù)芯片功能劃分有兩種選擇:物理層可以在其他芯片上完成(這時需要將層2處理完的數(shù)據(jù)打包通過以太網(wǎng)或SRIO 發(fā)送出去),也可以在本芯片上完成(這時可以將層2處理完的數(shù)據(jù)直接發(fā)送給物理層的加速器BCP)。層2軟件和SA,BCP,SRIO,EMAC這些加速器或外設的接口都符合QMSS的包格式,并可以通過硬件隊列來完成數(shù)據(jù)的傳輸。
圖3畫出了一個基于Pktlib的層2下行的內(nèi)存管理架構。它的基本思想是在創(chuàng)建堆的時候?qū)⑼ㄟ^操作系統(tǒng)申請的固定長度的內(nèi)存塊直接掛接到PD上,然后壓入專用的硬件隊列(圖2的Mem FreeQ),這個硬件隊列就相當于一個堆。應用在初始化完Pktlib的Mem FreeQ以后,通過調(diào)用Pktlib_allocPacket函數(shù)從堆上申請(出隊)內(nèi)存包并將它壓入SA的接收空閑隊列(Rx FreeQ)。當SA處理完一個PDCP包的空口加密工作后會把數(shù)據(jù)通過接收側(cè)包DMA(Rx Pkt DMA)寫入Rx FreeQ中包指向的內(nèi)存,然后將包從Rx FreeQ出隊,壓入接收隊列(RxQ)。RLC和MAC層軟件接收到調(diào)度器的調(diào)度請求后,從SA的RxQ出隊對應的包并進行RLC和MAC的組包工作。在這個處理過程中,因為涉及到包的分割,合并,添加包頭的工作,RLC和MAC模塊會動態(tài)地申請新的內(nèi)存,這時同樣通過調(diào)用Pktlib_allocPacket函數(shù)從Mem FreeQ中申請包。
RLC和MAC層處理完成后,軟件可以將處理完的包直接壓入和物理層接口的發(fā)送隊列(TxQ)中,后面可以是通過加速器直接做物理層編碼,也可以是通過接口發(fā)送數(shù)據(jù)。發(fā)送側(cè)包DMA(Tx Pkt DMA)讀入包之后,可以自動將包返回一個隊列(Tx ReturnQ)。Tx ReturnQ 的選擇有兩種情況需要分開考慮。對于可以立即釋放的包(這個包中PD/BD所指向的緩存沒有被其他的PD/BD指向),可以通過QMSS直接回收到Mem FreeQ. 還有一類包不能立即釋放,這個包中內(nèi)存同時還被另一個PD指向(這在包的拷貝,分割中經(jīng)常出現(xiàn))。對第二種類型的包,我們需要先讓QMSS把包回收到一個臨時的回收隊列(Tx ReturnQ)中,然后調(diào)用Pktlib_freePacket接口,Pktlib會根據(jù)這個包的屬性以及是否進行過拷貝,切割這些信息,決定是馬上將包回收到Mem FreeQ,還是等到所有指向同一個緩存的PD都使用完這個緩存后,再將包回收到Mem FreeQ。從上面的描述我們可以看到,層2下行軟件和處理流程前后的兩個加速器/外設接口發(fā)生了數(shù)據(jù)交互,但是中間沒有任何的數(shù)據(jù)拷貝,處理效率大大優(yōu)于傳統(tǒng)的方案。
Keystone中的硬件隊列可以自動完成多核訪問的互斥,由此帶來的好處是多核可以同時使用一個Pktlib創(chuàng)建好的堆,同時不需要加入效率較低的互斥鎖保護。對于多核同時進行層2處理的方案,這一點也能在一定程度上節(jié)省軟件的開銷。
圖3:基于Pktlib的層2下行內(nèi)存管理
4 基于Pktlib的層2零拷貝數(shù)據(jù)處理
層2處理中經(jīng)過PDCP層處理的包保存在硬件隊列中,RLC和MAC模塊需要根據(jù)調(diào)度器提供的調(diào)度結果對PDCP處理的包進行重新封裝,在這個過程中需要添加RLC協(xié)議頭,MAC協(xié)議頭,還需要對PDCP包進行切割,重組(因為調(diào)度結果是根據(jù)當前空口狀態(tài)產(chǎn)生的,跟PDCP的包長不可能匹配)。傳統(tǒng)的做法是采用內(nèi)存拷貝,軟件開銷比較大。采用Pktlib可以通過相應的函數(shù)實現(xiàn)零拷貝,提高層2處理效率。
包的合并
層2處理中有很多包的合并操作,常見的場景有:
(1) 在處理PDCP,RLC,MAC 層協(xié)議的時候添加對應的協(xié)議頭。
(2) RLC收到調(diào)度結果后需要將兩個或多個PDCP的PDU打包為一個RLC的PDU
(3) MAC復用需要將多個RLC的PDU打包為一個MAC的PDU如圖4 所示,通過調(diào)用Pktlib_packetMerge函數(shù)可以將輸入的兩個QMSS格式的包合并為一個新的包。這一操作實際上是將包1的Next指針置為包2的P地值,在合并的過程中沒有任何的內(nèi)存拷貝。
圖4:包的合并
包的拷貝
層2處理中包的拷貝主要發(fā)生的RLC包進入重傳緩沖區(qū),RLC協(xié)議在AM模式下對處理完成的包在提交給MAC進行處理的同時,還必須拷貝一份放入重傳緩沖區(qū)。如果接收端發(fā)出了重傳請求,下一次RLC會從重傳緩沖區(qū)取出數(shù)據(jù)重發(fā)。只有在收到接收端的確認后,RLC才能釋放重傳緩存區(qū)中的包。
如圖5所示,Pktlib在做包的拷貝時不是通過內(nèi)存拷貝來實現(xiàn)的,而是通過將傳入的一組空的PD按照原始包的結構重新鏈接一次??截惡?,包1和包2的PD/BD不同,但是PD/BD所指向的內(nèi)存是同一塊。這種包的拷貝(其實包的切割也會出現(xiàn)相同的問題)要求在包的釋放時只有在確認同一塊內(nèi)存所關聯(lián)的所有包都被使用完了之后,才能進行內(nèi)存的釋放。在Pktlib_freePacket函數(shù)中會查找當前包下所有PD/BD所指向內(nèi)存所關聯(lián)的所有PD/BD的當前情況,如果還有PD/BD在使用這塊內(nèi)存就不立即釋放,只有在所有PD/BD都不使用這塊內(nèi)存了,才會將它釋放。
圖5: 包的拷貝
包的分割
層2處理中包的分割操作,主要有下面兩個場景:
(1) RLC收到調(diào)度結果后需要將一個PDCP的PDU分割為兩個或多個RLC的PDU
(2) MAC復用需要一個RLC 的PDU分割為兩個或多個MAC的PDU如圖6所示,Pktlib在做包的分割時是通過傳入一個空的PD,然后用這個PD指向切割的字節(jié)位置構造出新的包。從圖中可以看到切割后包1緩存2和包2緩存1在同一個內(nèi)存塊上,只有當這兩個包都不在使用這塊內(nèi)存之后,這個內(nèi)存塊才能得到釋放。
圖6: 包的分割
Pktlib的性能
使用Pktlib的API能夠完全替換傳統(tǒng)的基于OS的內(nèi)存管理,并且能實現(xiàn)零拷貝的包合并,復制和分割,在內(nèi)存處理的效率上大大優(yōu)于傳統(tǒng)方案。下表列出了在TI公司TMS320C6614 芯片上測試得到的函數(shù)性能。
表2: Pktlib主要函數(shù)的性能
總結
TI在Keystone上提供的Pktlib能夠?qū)崿F(xiàn)硬件和軟件內(nèi)存管理的統(tǒng)一,實現(xiàn)基于包的數(shù)據(jù)合并,拷貝,分割,以及軟件與硬件加速器之間完全的零拷貝數(shù)據(jù)傳遞。這些特點正好適應了LTE層2中大批量包數(shù)據(jù)處理的要求。結合Pktlib進行LTE基站層2軟件的開發(fā),能極大地提高包的處理效率,在硬件規(guī)格不變的情況下提供更高的系統(tǒng)吞吐率。本方案為基于Keystone SoC的LTE基站開發(fā)提供了一個有益的參考。
責任編輯:gt
-
寄存器
+關注
關注
31文章
5355瀏覽量
120531 -
soc
+關注
關注
38文章
4173瀏覽量
218404 -
基站
+關注
關注
17文章
1396瀏覽量
66813
發(fā)布評論請先 登錄
相關推薦
評論