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的情况,这些将在后续继续研究。