5G CPE傳輸性能提升研究與實現
1、概述
如今移動互聯網承載來自不同行業越來越多的數據,各種不同類型的終端接入到無線網絡中。隨著5G的持續演進,網絡的傳輸速率越來越高,網絡側設備可以靠提升CPU處理能力,增加CPU核等手段滿足網絡演進需求,但是個人手持終端、家庭工業互聯網行業終端要求低成本、低功耗,傳統方式下CPU無法滿足1Gbps、10Gbps級別的數據處理需求。
為了解決5G CPE終端性能與成本功耗沖突問題,本文提出了包加速技術,通過對Linux進行傳輸優化,數據包直接通過網絡設備進行轉發,減少轉發路徑的同時不影響正常的NAT、路由功能,在相同CPU處理能力下提升傳輸性能。
2、5G CPE介紹
CPE全稱Customer Premise Equipment,即“客戶終端設備”。它的作用是將移動通信信號(4G、5G等)或有線寬帶信號轉換成本地局域網信號,供用戶設備使用。
5G CPE屬于5G終端設備,如圖1所示它接收運營商基站發出的5G信號,然后轉換成Wi-Fi信號或有線信號,讓更多本地設備(手機、平板、電腦、工業設備)上網。目前的5G CPE產品,支持SA/NSA組網,兼容4G/5G信號。5G CPE應用通常以2種方式出現:面向家庭的toC場景和面向企業的toB市場。除了提供網絡連接功能外,5G CPE還可以與邊緣計算結合,成為一個下沉的邊緣計算節點,為相關設備提供算力支持。
5G CPE由5G Modem和5G Router 2部分組成,如圖2所示,5G Modem負責5G UE協議棧、基帶、射頻處理,將5G信號轉化為網口信號。5G Router負責路由功能,將5G Modem的網口數據轉化為局域網內Wi-Fi或者網口數據。本文主要針對5G CPE Router中的Linux TCP/IP以及網卡驅動進行優化研究,實現5G CPE傳輸性能的提升。
3、引言
3.1 傳統方式的傳輸
傳統方式下Linux對TCP/IP數據包收發的流程如圖3所示。
Linux的IP數據發送流程為用戶進程通過系統調用進入內核,調用發送函數,通過內存拷貝將數據從用戶空間拷貝到內核空間,完成發送函數處理后,將數據封裝為標準SKB_BUFF,隨后進入到IP協議棧處理,最后到達網卡驅動。網卡驅動通過一次拷貝或者通過DMA將數據添加到網卡的發送隊列,隨后網卡將數據發送到網絡。
Linux的IP數據接收流程為網絡的數據包到達網卡后,網卡將數據放到DMA中,然后產生一個硬中斷通知數據包到達,中斷處理程序調用網卡驅動中的接受函數將網卡中的數據包通過拷貝或者DMA操作到SKB_BUFF,隨后CPU進入軟中斷處理。在軟中斷的處理過程中,數據包進入IP協議棧處理后,再進入接受隊列,應用程序通過系統調用進入到內核的接受函數,并將數據從內核空間拷貝到用戶空間,完成了數據接收流程。
當前基于5G CPE產品進行性能優化時發現網卡接收數據時CPU占用率高,其中主要為softirq進程占用。使用perf性能工具分析,CPU占用高的函數主要為linux網絡協議棧函數流程,該路徑消耗CPU過高。因此如何降低軟中斷的CPU占用率成為性能提升的關鍵。
3.2 包加速技術原理
為了解決5G CPE傳輸的性能瓶頸問題,本文提出了包加速技術,即對Linux中的TCP/IP報文進行快速轉發,達到性能提升目的。如圖4所示,網卡接收到數據包如果sa_conn_tuple五元組未命中,數據轉交給IP Routing路徑,按照Linux 標準IP包處理流程處理,此時IP_Forward在FORWARD hook將flow entry加入到forward entry表中。如果命中sa_conn_tuple五元組,獲取forward entry項里的路由項,解析出發送網卡的信息,直接轉發到對端網卡。
其中forward entry和sa_conn_tuple的定義如下。
- forward entry用于記錄路由表信息,發送網卡信息。由于缺少IP、ARP等支持,必須包含MAC和發送網卡設備信息,另外使用Tuple用來辨識數據流,Age用來記錄最后一次entry hit的jiffies。
- sa_conn_tuple用五元組來匹配發送數據包。
3.3 包加速技術實現
如圖5所示,網卡接收到數據包進入到TCP/IP協議棧,如果匹配forward entry成功,則直接轉發到對端網卡,如果不成功,按原來流程發送,并將sa_conn_tuple記錄到forward entry中。
具體技術實現點如表1所示。
表1 包加速關鍵技術實現表
3.4 包加速實驗測試
使用5G CPE在5G NSA網絡下使用TCP報文進行測試,在5G CPE傳輸數據未消耗完CPU資源的場景下,采用包加速技術可以降低CPU損耗。5G CPE傳輸數據流量超過CPU負載能力時,采用包加速可以提升5G CPE傳輸性能。具體測試結果如表2所示,本文所采用的5G CPE TCP未優化前可以達到上行600 Mbps下行1 080 Mbps,采用加速技術后,下行提升到1 580 Mbps,上行由于網絡限制,跑滿600 Mbps時CPU占用率比未加速時降低39%。
表2 包加速測試數據表
4、結束語
網絡設備所有網絡處理都在操作系統內核運行,既有大量的中斷,又要參與內核調度,所以協議棧效率低,消耗了大量的CPU資源,本文提出的運行在5G CPE設備上的TCP/IP包加速技術,縮短了網絡數據包在Linux中的處理路徑,對數據包進行協議加速處理,提高了網絡處理效率,最后試驗結果證明,采用包加速技術后設備的傳輸性能提高,CPU資源消耗降低。
目前包加速只能用在Linux平臺,支持IPv4、IPv6的上傳下載加速,支持網絡內部轉發及VLAN加速,數據包優先級調度。但是不支持點對點設備、隧道設備以及數據包大于MTU的情況,這些將在后續繼續研究。