姜元山,王運付,李 佳(.中訊郵電咨詢設計院有限公司,北京 00048;.中訊郵電咨詢設計院有限公司鄭州分公司,河
如今移動互聯網承載來自不同行業越來越多的數據,各種不同類型的終端接入到無線網絡中。隨著5G 的持續演進,網絡的傳輸速率越來越高,網絡側設備可以靠提升CPU 處理能力,增加CPU 核等手段滿足網絡演進需求,但是個人手持終端、家庭工業互聯網行業終端要求低成本、低功耗,傳統方式下CPU 無法滿足1 Gbit/s、10 Gbit/s級別的數據處理需求。
為了解決5G CPE 終端性能與成本功耗沖突問題,本文提出了包加速技術,通過對Linux 進行傳輸優化,數據包直接通過網絡設備進行轉發,減少轉發路徑的同時不影響正常的NAT、路由功能,在相同CPU處理能力下提升傳輸性能。
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 還可以與邊緣計算結合,成為一個下沉的邊緣計算節點,為相關設備提供算力支持。

圖1 5G CPE在5G網絡中的位置
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傳輸性能的提升。

圖2 5G CPE實現示意圖
傳統方式下Linux 對TCP/IP 數據包收發的流程如圖3所示。

圖3 Linux下的IP收發包示意圖
Linux 的IP 數據發送流程為用戶進程通過系統調用進入內核,調用發送函數,通過內存拷貝將數據從用戶空間拷貝到內核空間,完成發送函數處理后,將數據封裝為標準SKB_BUFF,隨后進入到IP 協議棧處理,最后到達網卡驅動。網卡驅動通過一次拷貝或者通過DMA將數據添加到網卡的發送隊列,隨后網卡將數據發送到網絡。
Linux 的IP 數據接收流程為網絡的數據包到達網卡后,網卡將數據放到DMA 中,然后產生一個硬中斷通知數據包到達,中斷處理程序調用網卡驅動中的接收函數將網卡中的數據包通過拷貝或者DMA 操作到SKB_BUFF,隨后CPU 進入軟中斷處理。在軟中斷的處理過程中,數據包進入IP 協議棧處理后,再進入接收隊列,應用程序通過系統調用進入到內核的接收函數,并將數據從內核空間拷貝到用戶空間,完成了數據接收流程。
當前基于5G CPE 產品進行性能優化時發現網卡接收數據時CPU 占用率高,其中主要為softirq 進程占用。使用perf 性能工具分析,CPU 占用高的函數主要為Linux 網絡協議棧函數流程,該路徑消耗CPU 過高。因此如何降低軟中斷的CPU 占用率成為性能提升的關鍵。
為了解決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項里的路由項,解析出發送網卡的信息,直接轉發到對端網卡。

圖4 包加速原理圖
其中forward entry和sa_conn_tuple的定義如下。
a)forward entry 用于記錄路由表信息,發送網卡信息。由于缺少IP、ARP 等支持,必須包含MAC 和發送網卡設備信息,另外用Tuple 來辨識數據流,用Age來記錄最后一次entry hit的jiffies。
b)sa_conn_tuple用五元組來匹配發送數據包。
如圖5 所示,網卡接收到數據包進入到TCP/IP 協議棧,如果匹配forward entry 成功,則直接轉發到對端網卡,如果不成功,按原來流程發送,并將sa_conn_tuple記錄到forward entry中。

圖5 包加速處理流程
具體技術實現點如表1所示。

表1 包加速關鍵技術實現表
使用5G CPE在5G NSA網絡下使用TCP報文進行測試,在5G CPE 傳輸數據未消耗完CPU 資源的場景下,采用包加速技術可以降低CPU損耗。5G CPE傳輸數據流量超過CPU 負載能力時,采用包加速可以提升5G CPE 傳輸性能。具體測試結果如表2 所示,本文所采用的5G CPE TCP未優化前可以達到上行600 Mbit/s、下行1 080 Mbit/s,采用加速技術后,下行提升到1 580 Mbit/s,上行由于網絡限制,跑滿600 Mbit/s 時CPU 占用率比未加速時降低39%。

表2 包加速測試數據表
網絡設備所有網絡處理都在操作系統內核運行,既有大量的中斷,又要參與內核調度,所以協議棧效率低,消耗了大量的CPU 資源,本文提出的運行在5G CPE 設備上的TCP/IP 包加速技術,縮短了網絡數據包在Linux 中的處理路徑,對數據包進行協議加速處理,提高了網絡處理效率,最后試驗結果證明,采用包加速技術后設備的傳輸性能提高,CPU資源消耗降低。
目前包加速只能用在Linux 平臺,支持IPv4、IPv6的上傳下載加速,支持網絡內部轉發及VLAN 加速,數據包優先級調度。但是不支持點對點設備、隧道設備以及數據包大于MTU 的情況,這些將在后續繼續研究。