国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種基于Linux系統(tǒng)的LTE基站用戶面高效UDP數(shù)據(jù)發(fā)送優(yōu)化方法

      文檔序號(hào):7803436閱讀:522來源:國知局
      一種基于Linux系統(tǒng)的LTE基站用戶面高效UDP數(shù)據(jù)發(fā)送優(yōu)化方法
      【專利摘要】本發(fā)明提出了一種基于Linux系統(tǒng)的LTE基站用戶面UDP數(shù)據(jù)發(fā)送優(yōu)化方法,其目的是在基站用戶面上行數(shù)據(jù)處理過程中,減少系統(tǒng)調(diào)用,硬件資源調(diào)度以及拷貝。本發(fā)明利用硬件資源批量申請(qǐng)方式減少硬件資源調(diào)度,利用內(nèi)核空間-用戶空間內(nèi)存映射技術(shù)避免內(nèi)存拷貝、socket中間層調(diào)用,IP協(xié)議棧處理,利用環(huán)形緩沖隊(duì)列技術(shù)減少系統(tǒng)調(diào)用,從而顯著的提高基站用戶面上行數(shù)據(jù)處理的性能。
      【專利說明】—種基于Linux系統(tǒng)的LTE基站用戶面高效UDP數(shù)據(jù)發(fā)送優(yōu)化方法
      【技術(shù)領(lǐng)域】
      [0001]本發(fā)明涉及無線通信【技術(shù)領(lǐng)域】,尤其是涉及一種基于Linux系統(tǒng)的LTE基站用戶面UDP數(shù)據(jù)發(fā)送優(yōu)化方法。
      【背景技術(shù)】
      [0002]隨著無線通信技術(shù)的進(jìn)步,無線網(wǎng)絡(luò)設(shè)備的不斷升級(jí)改造,對(duì)于LTE(3GPP長(zhǎng)期演進(jìn)技術(shù))基站用戶面數(shù)據(jù)處理要求越來越高。LTE基站用戶面上行數(shù)據(jù)主要是承載于UDP (用戶數(shù)據(jù)報(bào)協(xié)議)之上的GTPU(隧道協(xié)議)業(yè)務(wù),對(duì)于GTPU下行報(bào)文,傳統(tǒng)的處理方式是利用UDP socket發(fā)包;用戶構(gòu)造好GTPU報(bào)文后通過udp socket系統(tǒng)調(diào)用到Linux內(nèi)核,Linux內(nèi)核再經(jīng)過網(wǎng)絡(luò)協(xié)議棧的層層處理,最后轉(zhuǎn)給硬件層將報(bào)文發(fā)出去。從UDP報(bào)文的轉(zhuǎn)發(fā)流程來看,涉及到GTPU報(bào)文的組裝,用戶態(tài)到內(nèi)核態(tài)的系統(tǒng)調(diào)用和內(nèi)存拷貝,socket中間層、IP協(xié)議棧的處理,網(wǎng)卡硬件層的處理。
      [0003]傳統(tǒng)方法的弊端包括:
      拷貝過多:每個(gè)UDP報(bào)文,從用戶態(tài)socket到Iinux內(nèi)核,需要從用戶空間拷貝到內(nèi)核空間。
      [0004]系統(tǒng)調(diào)用過多:每發(fā)一個(gè)UDP包,都要經(jīng)過一次socket send,都有一次系統(tǒng)調(diào)用,即內(nèi)核態(tài)和用戶態(tài)上下文切換的過程。
      [0005]硬件資源申請(qǐng)過多:linux IP協(xié)議棧每處理完一個(gè)報(bào)文后都會(huì)申請(qǐng)一次硬件資源去發(fā)送m)P報(bào)文。

      【發(fā)明內(nèi)容】

      [0006]本發(fā)明針對(duì)【背景技術(shù)】存在的問題,提出了一種基于Linux系統(tǒng)的LTE基站用戶面UDP數(shù)據(jù)發(fā)送優(yōu)化方法,其目的是在LTE基站用戶面上行UDP數(shù)據(jù)處理過程中,減少系統(tǒng)調(diào)用、拷貝及頻繁申請(qǐng)硬件資源的問題。
      [0007]本發(fā)明的技術(shù)方案為一種基于Linux系統(tǒng)的LTE基站用戶面UDP數(shù)據(jù)發(fā)送優(yōu)化方法,利用批量申請(qǐng)硬件資源技術(shù)減少硬件資源的頻繁申請(qǐng),利用內(nèi)核空間-用戶空間內(nèi)存映射技術(shù)避免內(nèi)存拷貝,利用環(huán)形緩沖技術(shù)減少內(nèi)核態(tài)和用戶態(tài)的上下文切換,從而顯著的提高LTE用戶面UDP數(shù)據(jù)發(fā)送的性能;包括初始化過程和數(shù)據(jù)發(fā)送過程兩部分內(nèi)容,具體步驟如下:
      初始化過程包括以下子步驟,
      步驟1.1, Iinux內(nèi)核初始化時(shí),預(yù)留一塊物理上連續(xù)的內(nèi)存,將內(nèi)存塊切分為1024大小相等,2112字節(jié)的格子(滿足以太網(wǎng)標(biāo)準(zhǔn)MTU (最大傳輸單元)要求,并且64字節(jié)的奇數(shù)倍以保證高效的利用CPU的L2 cache),將每個(gè)格子的物理地址和大小通知給硬件的BMAN單元(緩沖區(qū)管理單元)。
      [0008]步驟1.2,在用戶態(tài)發(fā)包程序和Iinux內(nèi)核之間建立一個(gè)環(huán)形緩沖中間層,環(huán)形緩沖層初始化時(shí),預(yù)留另一塊物理上連續(xù)的內(nèi)存,將內(nèi)存塊切分為256大小相等的格子,用來存儲(chǔ)UDP數(shù)據(jù)包的地址偏移和長(zhǎng)度,預(yù)留內(nèi)存的頭結(jié)構(gòu)中再保存控制環(huán)形緩沖層的讀寫指針,完成用戶態(tài)發(fā)包程序(生產(chǎn)者)和內(nèi)核(消費(fèi)者)之間的同步,環(huán)形緩沖區(qū)的大小定義為256塊,2的冪有利于提高讀寫指針操作的效率。
      [0009]步驟1.3,向Iinux內(nèi)核DPAA模塊批量申請(qǐng)256個(gè)BMAN單元,將已經(jīng)申請(qǐng)的BMAN資源用于存儲(chǔ)數(shù)據(jù)包的偏移存儲(chǔ)到環(huán)形緩沖區(qū)的256個(gè)節(jié)點(diǎn)上,能通過環(huán)形緩沖層節(jié)點(diǎn)找到存放數(shù)據(jù)包的BMAN單元所在的內(nèi)存偏移地址。
      [0010]步驟1.4,用戶態(tài)發(fā)包程序初始化時(shí),將步驟1.1和步驟1.2中分配的內(nèi)核內(nèi)存,映射到用戶空間。
      [0011]步驟1.5,創(chuàng)建內(nèi)核態(tài)的UDP發(fā)送線程,并初始化為睡眠狀態(tài);
      數(shù)據(jù)傳輸過程包括以下子步驟:
      步驟2.1,用戶態(tài)程序收到一個(gè)UDP待發(fā)數(shù)據(jù)時(shí)通過映射到用戶空間的環(huán)形緩沖的寫指針找到可寫的環(huán)形緩沖節(jié)點(diǎn),將UDP payload信息、IP頭信息和MAC頭信息按照IP數(shù)據(jù)包的格式填充到對(duì)應(yīng)的BMAN節(jié)點(diǎn)空間,并將寫指針指向下一個(gè)緩沖節(jié)點(diǎn)。
      [0012]步驟2.2,用戶態(tài)程序填充完IP數(shù)據(jù)包后,根據(jù)內(nèi)核的UDP發(fā)送線程狀態(tài)來決定是否調(diào)用ioctl去喚醒內(nèi)核的UDP發(fā)送線程,如果發(fā)送線程已經(jīng)處于running狀態(tài),就無需系統(tǒng)調(diào)用去喚醒發(fā)送線程。
      [0013]步驟2.3,UDP發(fā)送線程被喚醒后,設(shè)置發(fā)送線程的當(dāng)前狀態(tài)為running,檢查環(huán)形緩沖區(qū)內(nèi)是否有數(shù)據(jù)包緩存,如果存在數(shù)據(jù)包被緩存,就調(diào)用硬件層接口將數(shù)據(jù)包發(fā)送出去。然后設(shè)置線程當(dāng)前狀態(tài)為sle印,并馬上進(jìn)入休眠狀態(tài)。
      [0014]步驟2.4,硬件層接口(即:與硬件芯片配套提供的如何使用硬件的接口)收到此數(shù)據(jù)包后,由于數(shù)據(jù)包已經(jīng)存儲(chǔ)到BMAN單元所對(duì)應(yīng)的buffer中,無需拷貝,直接放到QMAN中發(fā)送出去,發(fā)送完成后,再次向內(nèi)核DPAA模塊批量申請(qǐng)8個(gè)BMAN buffer,填充到剛剛發(fā)送完成的環(huán)形緩沖節(jié)點(diǎn)中。
      [0015]本發(fā)明對(duì)比傳統(tǒng)的UDP數(shù)據(jù)發(fā)送技術(shù)有以下創(chuàng)新點(diǎn):
      1.硬件資源批量申請(qǐng),發(fā)送UDP數(shù)據(jù)包完成后,一次性申請(qǐng)8個(gè)BMAN buf資源,避免了每次發(fā)包都申請(qǐng)I個(gè)BMAN資源,申請(qǐng)BMAN資源的總時(shí)間消耗降為原來的1/8。
      [0016]2.利用喚醒緩沖技術(shù),完成單生產(chǎn)者和單消費(fèi)者的同步,避免頻繁的系統(tǒng)調(diào)用。通過內(nèi)核UDP發(fā)送線程這個(gè)消費(fèi)者的工作狀態(tài)來判斷用戶發(fā)送程序這個(gè)生產(chǎn)者是否需要系統(tǒng)調(diào)用來喚醒消費(fèi)者。
      [0017]3.利用內(nèi)核-用戶空間內(nèi)存映射技術(shù),將BMAN單元存放數(shù)據(jù)包的內(nèi)存映射到用戶空間,避免內(nèi)存拷貝。
      [0018]4.避免內(nèi)核socket中間層、IP協(xié)議棧的處理。
      【專利附圖】

      【附圖說明】
      [0019]圖1為本發(fā)明實(shí)施例中BMAN緩沖區(qū)的結(jié)構(gòu)圖;
      圖2為本發(fā)明中環(huán)形緩沖區(qū)的操作原理示意圖;
      圖3為本發(fā)明中BMAN緩沖區(qū)與環(huán)形緩沖區(qū)的交互圖;
      圖4為本發(fā)明中UDP數(shù)據(jù)包發(fā)送流程圖。【具體實(shí)施方式】
      [0020]本發(fā)明主要針對(duì)LTE基站用戶面UDP數(shù)據(jù)處理的優(yōu)化,適用但并不限于LTE基站,本方案同樣適用于其它需要在嵌入式Linux系統(tǒng)中實(shí)現(xiàn)高效UDP數(shù)據(jù)包發(fā)送的系統(tǒng)。該方案能滿足無線通信基站建設(shè)中高速數(shù)據(jù)傳輸?shù)男枨螅行p少系統(tǒng)資源的占用,本設(shè)計(jì)充分利用內(nèi)存映射技術(shù)、數(shù)據(jù)發(fā)送線程化技術(shù)和無鎖的喚醒緩沖技術(shù)等一系列前沿技術(shù),能有效減少硬件資源調(diào)度、減少進(jìn)程上下文切換以及完全避免了數(shù)據(jù)拷貝。
      [0021]以下結(jié)合附圖和實(shí)施例詳細(xì)說明本發(fā)明技術(shù)方案。
      [0022]初始化過程如下:
      步驟1.1,內(nèi)核初始化時(shí),預(yù)留一塊物理上連續(xù)的內(nèi)存作為BMAN單元的包緩存空間,后面發(fā)包調(diào)度BMAN單元時(shí)就會(huì)使用前面已經(jīng)預(yù)留的內(nèi)存作為BMAN單元發(fā)包所需要用的空間。如圖1所示,將內(nèi)存塊切分為1024個(gè)大小相等,每個(gè)大小為2112字節(jié)的單元格,2112字節(jié)為64字節(jié)的奇數(shù)倍,這個(gè)大小的選擇可以容納1500字節(jié)的標(biāo)準(zhǔn)MTU,并允許硬件添加一些附件信息,且能均勻利用POwerPC4080的兩個(gè)三級(jí)緩存,初始化完成后,將每個(gè)格子的物理地址和大小通知給DPAA模塊的BMAN單元。,在內(nèi)核的DTS文件中,將LTE基站與核心網(wǎng)相連的FMAN對(duì)應(yīng)端口綁定到已建立的BMAN空間,后面數(shù)據(jù)發(fā)送時(shí)就可以通過BMAN空間直接向FMAN傳送數(shù)據(jù)。
      [0023]步驟1.2,內(nèi)核初始化完成,在用戶態(tài)發(fā)包程序和Iinux內(nèi)核之間建立一個(gè)環(huán)形緩沖中間層,環(huán)形緩沖層初始化時(shí),預(yù)留另一塊物理上連續(xù)的內(nèi)存,將內(nèi)存塊切分為256大小相等的單元格,用來存儲(chǔ)UDP數(shù)據(jù)包的地址偏移和長(zhǎng)度,預(yù)留內(nèi)存的頭結(jié)構(gòu)中再保存控制環(huán)形緩沖層的讀寫指針,完成用戶態(tài)發(fā)包程序(生產(chǎn)者)和內(nèi)核(消費(fèi)者)之間的同步,環(huán)形緩沖區(qū)的同步操作示意圖見圖2,利用環(huán)形緩沖層,在用戶態(tài)只操作寫指針,內(nèi)核態(tài)只操作讀指針,將不再需要傳統(tǒng)的互斥鎖結(jié)構(gòu),進(jìn)一步提高了效率。環(huán)形緩沖層還需要提供內(nèi)存映射函數(shù)的實(shí)現(xiàn),做為橋梁完成BMAN單元所使用的空間內(nèi)存與用戶空間虛擬地址空間之間的映射,作為用戶態(tài)發(fā)包程序和硬件之間的中間層,這樣用戶空間就能夠直接操作內(nèi)核空間的環(huán)形緩沖區(qū)地址和存放數(shù)據(jù)包的BMAN buffer地址。省去了 Iinux內(nèi)核IP協(xié)議棧的處理流程。
      [0024]步驟1.3,驅(qū)動(dòng)模塊初始化時(shí),通過io操作,向Iinux內(nèi)核DPAA模塊批量申請(qǐng)256個(gè)BMAN單元,將已經(jīng)申請(qǐng)的BMAN單元用于存儲(chǔ)數(shù)據(jù)包內(nèi)存的偏移量存儲(chǔ)到環(huán)形緩沖區(qū)的256個(gè)節(jié)點(diǎn)上,能通過遍歷環(huán)形緩沖層節(jié)點(diǎn)找到BMAN單元存放數(shù)據(jù)包的內(nèi)存偏移地址,進(jìn)而可以存儲(chǔ)數(shù)據(jù)包到BMAN單元所使用的內(nèi)存中。
      [0025]步驟1.4,用戶態(tài)發(fā)包程序初始化時(shí),將內(nèi)核空間申請(qǐng)的BMAN緩沖區(qū)和環(huán)形緩沖區(qū)所在的連續(xù)物理地址空間映射到用戶空間,即從內(nèi)核空間的一段地址映射到用戶空間的一段地址,用戶態(tài)操作這一段虛擬地址,實(shí)際上就是操作的BMAN緩沖區(qū),從而能避免網(wǎng)絡(luò)數(shù)據(jù)從用戶態(tài)到內(nèi)核態(tài)的拷貝。
      [0026]步驟1.5,創(chuàng)建內(nèi)核態(tài)的UDP發(fā)送線程,并初始化為睡眠狀態(tài);等待用戶態(tài)填充數(shù)據(jù)喚醒內(nèi)核態(tài)的UDP發(fā)送線程進(jìn)行數(shù)據(jù)發(fā)送。
      [0027]使用過程:
      步驟2.1,LTE基站收到空口來的用戶數(shù)據(jù)后,經(jīng)過LTE L2模塊將TOCP數(shù)據(jù)處理封裝成UDP數(shù)據(jù),用戶態(tài)發(fā)包程序收到一個(gè)UDP待發(fā)數(shù)據(jù)時(shí),通過映射到用戶空間的環(huán)形緩沖的寫指針找到可寫的環(huán)形緩沖節(jié)點(diǎn),,如圖4所示,如果有空閑節(jié)點(diǎn),就填充到寫指針指向的緩沖區(qū)節(jié)點(diǎn),節(jié)點(diǎn)中存放BMAN的地址偏移,可以找到對(duì)應(yīng)的BMAN地址以及BMAN內(nèi)部存放數(shù)據(jù)包的基址,填充的數(shù)據(jù)包要是一個(gè)完成的IP數(shù)據(jù)包,將M)P payload信息、IP頭信息和MAC頭信息按照IP數(shù)據(jù)包的格式填充到對(duì)應(yīng)的BMAN節(jié)點(diǎn)空間,其中mac地址、ip地址都需要在初始化時(shí)就配置好,填充時(shí)直接使用。填充完畢后將寫指針指向下一個(gè)緩沖節(jié)點(diǎn)等待下一個(gè)數(shù)據(jù)包到達(dá)。如果沒有空閑節(jié)點(diǎn),即環(huán)形緩沖寫滿時(shí),比如用戶態(tài)程序瞬時(shí)發(fā)送了很多UDP數(shù)據(jù)包,而此時(shí)內(nèi)核的UDP線程還來不及被喚醒,環(huán)形緩沖層就有可能被瞬時(shí)填滿,無法繼續(xù)填充數(shù)據(jù)包。本發(fā)明采用內(nèi)核通知機(jī)制和信號(hào)量同步,增加一個(gè)用戶態(tài)等待標(biāo)志位,緩沖區(qū)填滿時(shí)用戶態(tài)程序阻塞,設(shè)置標(biāo)志位為阻塞,等待UDP線程發(fā)送阻塞結(jié)束的信號(hào)。而UDP線程被喚醒后發(fā)送完所有數(shù)據(jù)包,發(fā)現(xiàn)用戶態(tài)程序在阻塞狀態(tài),就給出一個(gè)解阻塞的信號(hào),用戶態(tài)發(fā)包程序收到后就可以繼續(xù)往環(huán)形緩沖層填充新報(bào)文。
      [0028]步驟2.2,填充完整個(gè)數(shù)據(jù)包后,判斷內(nèi)核UDP發(fā)送線程是否處于running狀態(tài),如果已經(jīng)處于running狀態(tài)就無需繼續(xù)處理,直接返回,能夠節(jié)省一次系統(tǒng)調(diào)用。如果發(fā)送線程處于sleep狀態(tài)就需要通過系統(tǒng)調(diào)用喚醒此線程。由環(huán)形緩沖區(qū)被多個(gè)任務(wù)操作,存在喚醒丟失的問題,比如當(dāng)send thread將睡未睡之際,CPU切換到用戶態(tài)程序,執(zhí)行喚醒線程動(dòng)作,發(fā)現(xiàn)UDP線程處于running狀態(tài),不做喚醒動(dòng)作而直接返回,CPU此時(shí)在輪詢到UDP線程運(yùn)行時(shí)未進(jìn)行任何報(bào)文發(fā)送就直接休眠,此次喚醒操作就丟失。本解決方案針對(duì)此問題,增加UDP線程運(yùn)行的標(biāo)志位,用戶態(tài)發(fā)包程序每次填充UDP報(bào)文后,判斷緩沖里面有數(shù)據(jù)并且是處于sleep狀態(tài),就系統(tǒng)調(diào)用喚醒線程,即使喚醒丟失一次,下次發(fā)包還能夠繼續(xù)喚醒線程。
      [0029]步驟2.3, UDP發(fā)送線程被喚醒后,設(shè)置發(fā)送線程的當(dāng)前狀態(tài)為running,根據(jù)讀寫指針判斷環(huán)形緩沖區(qū)中是否存放有數(shù)據(jù),如果存在數(shù)據(jù)包被緩存,就調(diào)用硬件層接口(是芯片配套提供的接口,專用用來發(fā)送數(shù)據(jù)包)將數(shù)據(jù)包發(fā)送出去。線程會(huì)在此次運(yùn)行過程中發(fā)送完所有數(shù)據(jù)包,進(jìn)入再次休眠等待下次被喚醒。
      [0030]步驟2.4,由于存放數(shù)據(jù)包的內(nèi)存即是硬件層中BMAN的內(nèi)存,所以硬件層接口收到此數(shù)據(jù)包后,、可以直接調(diào)用硬件層接口發(fā)包而省略從skb拷貝到BMAN單元所用內(nèi)存的動(dòng)作。當(dāng)前數(shù)據(jù)包發(fā)送完成后,此數(shù)據(jù)包所使用的BMAN Buf會(huì)被硬件自動(dòng)釋放,因此需要在連續(xù)8個(gè)數(shù)據(jù)發(fā)送后再次向DPAA模塊批量申請(qǐng)8個(gè)BMAN buf,填充到剛剛發(fā)送完成的喚醒緩沖節(jié)點(diǎn)中。
      [0031]本文中所描述的具體實(shí)施例僅僅是對(duì)本發(fā)明精神作舉例說明。本發(fā)明所屬【技術(shù)領(lǐng)域】的技術(shù)人員可以對(duì)所描述的具體實(shí)施例做各種各樣的修改或補(bǔ)充或采用類似的方式替代,但并不會(huì)偏離本發(fā)明的精神或者超越所附權(quán)利要求書所定義的范圍。
      【權(quán)利要求】
      1.一種基于Linux系統(tǒng)的LTE基站用戶面UDP數(shù)據(jù)發(fā)送優(yōu)化方法,其特征在于:通過利用網(wǎng)卡硬件資源批量申請(qǐng)方式減少網(wǎng)卡硬件資源調(diào)度,利用內(nèi)核空間-用戶空間內(nèi)存映射技術(shù)避免內(nèi)存拷貝、socket中間層處理、IP協(xié)議棧處理,利用環(huán)形緩沖隊(duì)列技術(shù)減少系統(tǒng)調(diào)用,從而提高基站用戶面UDP數(shù)據(jù)發(fā)送的性能;包括初始化過程和數(shù)據(jù)發(fā)送過程兩部分內(nèi)容,具體步驟如下: 初始化過程包括以下子步驟, 步驟1.1,Iinux內(nèi)核初始化時(shí),預(yù)留一塊物理上連續(xù)的內(nèi)存,將內(nèi)存塊切分為1024個(gè)大小相等,2112字節(jié)的格子,以滿足以太網(wǎng)標(biāo)準(zhǔn)MTU要求,將每個(gè)格子的物理地址和大小通知給DPAA模塊的緩沖區(qū)管理BMAN單元; 步驟1.2,在用戶態(tài)發(fā)包程序和Iinux內(nèi)核之間建立一個(gè)環(huán)形緩沖中間層,在環(huán)形緩沖層初始化時(shí),預(yù)留一塊物理上連續(xù)的內(nèi)存,將內(nèi)存塊切分為256個(gè)大小相等的格子,用來存儲(chǔ)UDP數(shù)據(jù)包的地址偏移和長(zhǎng)度,預(yù)留內(nèi)存的頭結(jié)構(gòu)中再保存控制環(huán)形緩沖層的讀寫指針,完成用戶態(tài)發(fā)包程序和內(nèi)核之間的同步,環(huán)形緩沖區(qū)的大小定義為256塊; 步驟1.3,向Iinux內(nèi)核DPAA模塊批量申請(qǐng)256個(gè)BMAN單元,將已經(jīng)申請(qǐng)的BMAN資源用于存儲(chǔ)數(shù)據(jù)包的偏移存儲(chǔ)到環(huán)形緩沖區(qū)的256個(gè)節(jié)點(diǎn)上,能通過環(huán)形緩沖區(qū)節(jié)點(diǎn)找到BMAN硬件資源存放數(shù)據(jù)包的偏移地址; 步驟1.4,用戶態(tài)發(fā)包程序初始化時(shí),將步驟1.1和步驟1.2中分配的內(nèi)核內(nèi)存,映射到用戶空間; 步驟1.5,創(chuàng)建內(nèi)核態(tài) 的UDP發(fā)送線程,并初始化為睡眠狀態(tài); 數(shù)據(jù)發(fā)送過程包括以下子步驟, 步驟2.1,用戶態(tài)發(fā)包程序收到一個(gè)UDP待發(fā)數(shù)據(jù)時(shí)通過映射到用戶空間的環(huán)形緩沖層的寫指針找到可寫的環(huán)形緩沖節(jié)點(diǎn),將UDP payload信息、IP頭信息和MAC頭信息按照IP數(shù)據(jù)包的格式填充到對(duì)應(yīng)的BMAN節(jié)點(diǎn)空間,并將寫指針指向下一個(gè)緩沖節(jié)點(diǎn); 步驟2.2,用戶態(tài)程序填充完IP數(shù)據(jù)包后,根據(jù)內(nèi)核的UDP發(fā)送線程狀態(tài)來決定是否調(diào)用ioctl去喚醒內(nèi)核的UDP發(fā)送線程,如果發(fā)送線程已經(jīng)處于running狀態(tài),就無需系統(tǒng)調(diào)用去喚醒發(fā)送線程; 步驟2.3, UDP發(fā)送線程被喚醒后,設(shè)置發(fā)送線程的當(dāng)前狀態(tài)為running,檢查環(huán)形緩沖區(qū)內(nèi)是否有數(shù)據(jù)包緩存,如果存在數(shù)據(jù)包被緩存,就調(diào)用硬件層接口將數(shù)據(jù)包發(fā)送出去;然后設(shè)置線程當(dāng)前狀態(tài)為sle印,并馬上進(jìn)入休眠狀態(tài); 步驟2.4,硬件層接口收到此數(shù)據(jù)包后,由于數(shù)據(jù)包已經(jīng)存儲(chǔ)到BMAN硬件資源所對(duì)應(yīng)的buffer中,無需拷貝,直接放到QMAN中發(fā)送出去,發(fā)送完成后,再次向內(nèi)核DPAA模塊批量申請(qǐng)8個(gè)BMAN buf,填充到剛剛發(fā)送完成的喚醒緩沖節(jié)點(diǎn)中。
      2.根據(jù)權(quán)利要求1所述的基于Linux系統(tǒng)的LTE基站用戶面UDP數(shù)據(jù)發(fā)送優(yōu)化方法,其特征在于:在用戶態(tài)發(fā)包處理程序中,通過組裝MAC、VLAN、IP和UDP頭部信息,將UDP報(bào)文中的數(shù)據(jù)部分,組裝成完成的IP數(shù)據(jù)包,直接填充到硬件層BMAN中,省去了內(nèi)核socket中間層和IP協(xié)議棧的處理。
      3.根據(jù)權(quán)利要求1所述的基于Linux系統(tǒng)的LTE基站用戶面UDP數(shù)據(jù)發(fā)送優(yōu)化方法,其特征在于:在環(huán)形緩沖區(qū)的每個(gè)單元格中對(duì)單元格的讀寫分別由用戶態(tài)發(fā)包程序和內(nèi)核UDP線程來操作,無需加鎖即實(shí)現(xiàn)數(shù)據(jù)緩沖。
      4.根據(jù)權(quán)利要求1所述的基于Linux系統(tǒng)的LTE基站用戶面UDP數(shù)據(jù)發(fā)送優(yōu)化方法,其特征在于:所述步驟1.3中,為避免拷貝,預(yù)先對(duì)網(wǎng)卡存放數(shù)據(jù)的內(nèi)存批量申請(qǐng),在用戶態(tài)填充完整的數(shù)據(jù)包 到此內(nèi)存,無需再次拷貝就可以使用硬件層接口發(fā)送數(shù)據(jù)包。
      【文檔編號(hào)】H04W28/06GK103945456SQ201410197509
      【公開日】2014年7月23日 申請(qǐng)日期:2014年5月12日 優(yōu)先權(quán)日:2014年5月12日
      【發(fā)明者】陳輝, 蔡鑫 申請(qǐng)人:武漢郵電科學(xué)研究院
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1