姜元山,王運(yùn)付,李 佳(.中訊郵電咨詢?cè)O(shè)計(jì)院有限公司,北京 00048;.中訊郵電咨詢?cè)O(shè)計(jì)院有限公司鄭州分公司,河
如今移動(dòng)互聯(lián)網(wǎng)承載來(lái)自不同行業(yè)越來(lái)越多的數(shù)據(jù),各種不同類型的終端接入到無(wú)線網(wǎng)絡(luò)中。隨著5G 的持續(xù)演進(jìn),網(wǎng)絡(luò)的傳輸速率越來(lái)越高,網(wǎng)絡(luò)側(cè)設(shè)備可以靠提升CPU 處理能力,增加CPU 核等手段滿足網(wǎng)絡(luò)演進(jìn)需求,但是個(gè)人手持終端、家庭工業(yè)互聯(lián)網(wǎng)行業(yè)終端要求低成本、低功耗,傳統(tǒng)方式下CPU 無(wú)法滿足1 Gbit/s、10 Gbit/s級(jí)別的數(shù)據(jù)處理需求。
為了解決5G CPE 終端性能與成本功耗沖突問(wèn)題,本文提出了包加速技術(shù),通過(guò)對(duì)Linux 進(jìn)行傳輸優(yōu)化,數(shù)據(jù)包直接通過(guò)網(wǎng)絡(luò)設(shè)備進(jìn)行轉(zhuǎn)發(fā),減少轉(zhuǎn)發(fā)路徑的同時(shí)不影響正常的NAT、路由功能,在相同CPU處理能力下提升傳輸性能。
CPE 全稱Customer Premise Equipment,即“客戶終端設(shè)備”。它的作用是將移動(dòng)通信信號(hào)(4G、5G 等)或有線寬帶信號(hào)轉(zhuǎn)換成本地局域網(wǎng)信號(hào),供用戶設(shè)備使用。
5G CPE 屬于5G 終端設(shè)備,如圖1 所示,它接收運(yùn)營(yíng)商基站發(fā)出的5G 信號(hào),然后轉(zhuǎn)換成Wi-Fi信號(hào)或有線信號(hào),讓更多本地設(shè)備(手機(jī)、平板、電腦、工業(yè)設(shè)備)上網(wǎng)。目前的5G CPE 產(chǎn)品,支持SA/NSA 組網(wǎng),兼容4G/5G 信號(hào)。5G CPE 應(yīng)用通常以2 種方式出現(xiàn):面向家庭的toC 場(chǎng)景和面向企業(yè)的toB 市場(chǎng)。除了提供網(wǎng)絡(luò)連接功能外,5G CPE 還可以與邊緣計(jì)算結(jié)合,成為一個(gè)下沉的邊緣計(jì)算節(jié)點(diǎn),為相關(guān)設(shè)備提供算力支持。
圖1 5G CPE在5G網(wǎng)絡(luò)中的位置
5G CPE 由5G Modem 和5G Router 2 部分組成,如圖2 所示,5G Modem 負(fù)責(zé)5G UE 協(xié)議棧、基帶、射頻處理,將5G 信號(hào)轉(zhuǎn)化為網(wǎng)口信號(hào)。5G Router 負(fù)責(zé)路由功能,將5G Modem 的網(wǎng)口數(shù)據(jù)轉(zhuǎn)化為局域網(wǎng)內(nèi)Wi-Fi或者網(wǎng)口數(shù)據(jù)。本文主要針對(duì)5G CPE Router 中的Linux TCP/IP 以及網(wǎng)卡驅(qū)動(dòng)進(jìn)行優(yōu)化研究,實(shí)現(xiàn)5G CPE傳輸性能的提升。
圖2 5G CPE實(shí)現(xiàn)示意圖
傳統(tǒng)方式下Linux 對(duì)TCP/IP 數(shù)據(jù)包收發(fā)的流程如圖3所示。
圖3 Linux下的IP收發(fā)包示意圖
Linux 的IP 數(shù)據(jù)發(fā)送流程為用戶進(jìn)程通過(guò)系統(tǒng)調(diào)用進(jìn)入內(nèi)核,調(diào)用發(fā)送函數(shù),通過(guò)內(nèi)存拷貝將數(shù)據(jù)從用戶空間拷貝到內(nèi)核空間,完成發(fā)送函數(shù)處理后,將數(shù)據(jù)封裝為標(biāo)準(zhǔn)SKB_BUFF,隨后進(jìn)入到IP 協(xié)議棧處理,最后到達(dá)網(wǎng)卡驅(qū)動(dòng)。網(wǎng)卡驅(qū)動(dòng)通過(guò)一次拷貝或者通過(guò)DMA將數(shù)據(jù)添加到網(wǎng)卡的發(fā)送隊(duì)列,隨后網(wǎng)卡將數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)。
Linux 的IP 數(shù)據(jù)接收流程為網(wǎng)絡(luò)的數(shù)據(jù)包到達(dá)網(wǎng)卡后,網(wǎng)卡將數(shù)據(jù)放到DMA 中,然后產(chǎn)生一個(gè)硬中斷通知數(shù)據(jù)包到達(dá),中斷處理程序調(diào)用網(wǎng)卡驅(qū)動(dòng)中的接收函數(shù)將網(wǎng)卡中的數(shù)據(jù)包通過(guò)拷貝或者DMA 操作到SKB_BUFF,隨后CPU 進(jìn)入軟中斷處理。在軟中斷的處理過(guò)程中,數(shù)據(jù)包進(jìn)入IP 協(xié)議棧處理后,再進(jìn)入接收隊(duì)列,應(yīng)用程序通過(guò)系統(tǒng)調(diào)用進(jìn)入到內(nèi)核的接收函數(shù),并將數(shù)據(jù)從內(nèi)核空間拷貝到用戶空間,完成了數(shù)據(jù)接收流程。
當(dāng)前基于5G CPE 產(chǎn)品進(jìn)行性能優(yōu)化時(shí)發(fā)現(xiàn)網(wǎng)卡接收數(shù)據(jù)時(shí)CPU 占用率高,其中主要為softirq 進(jìn)程占用。使用perf 性能工具分析,CPU 占用高的函數(shù)主要為L(zhǎng)inux 網(wǎng)絡(luò)協(xié)議棧函數(shù)流程,該路徑消耗CPU 過(guò)高。因此如何降低軟中斷的CPU 占用率成為性能提升的關(guān)鍵。
為了解決5G CPE傳輸?shù)男阅芷款i問(wèn)題,本文提出了包加速技術(shù),即對(duì)Linux 中的TCP/IP 報(bào)文進(jìn)行快速轉(zhuǎn)發(fā),達(dá)到性能提升目的。如圖4所示,網(wǎng)卡接收到數(shù)據(jù)包,如果sa_conn_tuple 五元組未命中,數(shù)據(jù)轉(zhuǎn)交給IP Routing 路徑,按照Linux 標(biāo)準(zhǔn)IP 包處理流程處理,此 時(shí)IP_Forward 在FORWARD hook 將flow entry 加 入到forward entry表中。如果命中sa_conn_tuple五元組,獲取forward entry項(xiàng)里的路由項(xiàng),解析出發(fā)送網(wǎng)卡的信息,直接轉(zhuǎn)發(fā)到對(duì)端網(wǎng)卡。
圖4 包加速原理圖
其中forward entry和sa_conn_tuple的定義如下。
a)forward entry 用于記錄路由表信息,發(fā)送網(wǎng)卡信息。由于缺少IP、ARP 等支持,必須包含MAC 和發(fā)送網(wǎng)卡設(shè)備信息,另外用Tuple 來(lái)辨識(shí)數(shù)據(jù)流,用Age來(lái)記錄最后一次entry hit的jiffies。
b)sa_conn_tuple用五元組來(lái)匹配發(fā)送數(shù)據(jù)包。
如圖5 所示,網(wǎng)卡接收到數(shù)據(jù)包進(jìn)入到TCP/IP 協(xié)議棧,如果匹配forward entry 成功,則直接轉(zhuǎn)發(fā)到對(duì)端網(wǎng)卡,如果不成功,按原來(lái)流程發(fā)送,并將sa_conn_tuple記錄到forward entry中。
圖5 包加速處理流程
具體技術(shù)實(shí)現(xiàn)點(diǎn)如表1所示。
表1 包加速關(guān)鍵技術(shù)實(shí)現(xiàn)表
使用5G CPE在5G NSA網(wǎng)絡(luò)下使用TCP報(bào)文進(jìn)行測(cè)試,在5G CPE 傳輸數(shù)據(jù)未消耗完CPU 資源的場(chǎng)景下,采用包加速技術(shù)可以降低CPU損耗。5G CPE傳輸數(shù)據(jù)流量超過(guò)CPU 負(fù)載能力時(shí),采用包加速可以提升5G CPE 傳輸性能。具體測(cè)試結(jié)果如表2 所示,本文所采用的5G CPE TCP未優(yōu)化前可以達(dá)到上行600 Mbit/s、下行1 080 Mbit/s,采用加速技術(shù)后,下行提升到1 580 Mbit/s,上行由于網(wǎng)絡(luò)限制,跑滿600 Mbit/s 時(shí)CPU 占用率比未加速時(shí)降低39%。
表2 包加速測(cè)試數(shù)據(jù)表
網(wǎng)絡(luò)設(shè)備所有網(wǎng)絡(luò)處理都在操作系統(tǒng)內(nèi)核運(yùn)行,既有大量的中斷,又要參與內(nèi)核調(diào)度,所以協(xié)議棧效率低,消耗了大量的CPU 資源,本文提出的運(yùn)行在5G CPE 設(shè)備上的TCP/IP 包加速技術(shù),縮短了網(wǎng)絡(luò)數(shù)據(jù)包在Linux 中的處理路徑,對(duì)數(shù)據(jù)包進(jìn)行協(xié)議加速處理,提高了網(wǎng)絡(luò)處理效率,最后試驗(yàn)結(jié)果證明,采用包加速技術(shù)后設(shè)備的傳輸性能提高,CPU資源消耗降低。
目前包加速只能用在Linux 平臺(tái),支持IPv4、IPv6的上傳下載加速,支持網(wǎng)絡(luò)內(nèi)部轉(zhuǎn)發(fā)及VLAN 加速,數(shù)據(jù)包優(yōu)先級(jí)調(diào)度。但是不支持點(diǎn)對(duì)點(diǎn)設(shè)備、隧道設(shè)備以及數(shù)據(jù)包大于MTU 的情況,這些將在后續(xù)繼續(xù)研究。