姜元山,王运付,李 佳(.中讯邮电咨询设计院有限公司,北京 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 的情况,这些将在后续继续研究。