摘要

截止2023年6月30日,中国移动有线宽带客户总数达到2.86亿户[1]。宽带客户数量的急剧增加,对中国移动网络运维工作提出了更高的要求,快速高效地采集网络数据是提高网络运维能力的关键一环。现有的网络数据采集方法需要截取网络报文并分析计算得出网络质量指标数据,存在明显的不足。本文提出一种基于eBPF(extened Berkeley Packet Filter)技术的网络数据采集方法,该技术方案可以实时采集多种网络数据,帮助快速发现网络问题,实现大规模网络的智能化运维。本文介绍对提高未来网络数据采集能力的思考,期待通过新方法的应用,持续提高网络运维能力,以满足广大用户对中国移动优质网络服务的需求。

01 现有网络数据采集方法及存在的问题

传统采集网络数据的方法是通过程序或抓包工具软件截获网络流数据,然后对截获的网络流数据进行解析、计算得到网络指标。比如,为了获取TCP握手时延指标,现有方法通过wireshark、tcpdump之类的抓包软件截取TCP报文,从截取的TCP报文中解析出TCP握手阶段各个节点的时间戳,并计算节点间时间戳的差值得出握手时延指标。

通过程序或抓包工具软件截获网络流数据,然后对截获的网络流数据进行分析计算得到网络指标的方法存在明显的不足之处,主要有以下几个方面:

(1)采集网络数据会占用较大的内存资源:该方法需要把网络流数据存储下来进行分析,需要占用额外的内存存储空间,特别是在高并发、大流量业务中需要占用大量的内存资源,这会对系统带来很大的内存资源压力。

(2)采集网络数据的实时性难以保障:该方法首先要截获网络数据流,然后对截获的数据流解析、分析计算得出网络指标,不管是截获数据流还是对数据流进行分析计算都需要占用较长的时间,很难实时获取当前的网络指标。

(3)采集网络数据的工作效率低下:该方法涉及大量数据拷贝和分析计算,这会导致CPU资源占用大幅增大,特别是对于硬件资源有限的家庭网关,有限的CPU资源无法完成对所有网络连接的网络数据采集。

鉴于传统网络数据采集方法存在如上不足,业界亟需一种更加高效的网络数据采集方法。基于eBPF技术,可以直接通过Linux内核获取网络数据,能有效提高网络数据采集的效率。

02 eBPF技术简介

(一)eBPF程序工作机制

eBPF是从 BPF (Berkeley Packet Filter) 技术扩展而来的一种内核拓展技术,它允许开发人员在不修改内核代码的情况下拓展内核功能。如图1所示,编写关联到钩子函数(hook function)的eBPF 程序,将其编译并加载到内核中,每当该钩子函数被调用时,将触发eBPF 程序运行,eBPF程序将获取到的内核数据通过eBPF Map(用于用户态和内核态数据交互、存储的数据结构)共享到用户程序,从而实现了用户程序获取内核数据的功能。

图1 eBPF程序工作机制[2]

(二)eBPF技术特点和优势

作为当前使用最广泛的内核拓展技术,eBPF技术有如下特点和优势:

(1)事件驱动:eBPF 程序都是事件驱动的,它们会在内核或者应用程序调用某个确定的钩子函数的时候运行,这些钩子函数都是提前定义的,包括系统调用、函数进入/退出、内核 tracepoints、网络事件等[3]

(2)安全:eBPF虚拟机的Verifier会检查加载到内核的eBPF 程序,保证 eBPF 程序的安全性。

(3)效率高、实时性强:eBPF程序直接运行于内核,避免了用户空间和内核空间之间频繁切换的开销,这能大大降低cpu和内存开销,因此可以实现更高效、更及时的数据采集和处理。

(4)精度高:eBPF程序可以直接访问内核数据结构,获取更加准确的数据信息,因此可以提供更精准的监控数据和分析结果。

(5)内核可编程性:eBPF程序可以重新编程 Linux 内核的行为,而无需更改内核源代码或加载内核模块。

综合以上特点,编写关联到Linux内核TCP/UDP相关钩子函数的eBPF程序,可以方便且高效地从内核获取TCP/UDP网络指标,显著提高网络数据采集的工作效率。

03 基于eBPF技术的网络数据采集方案

图2 基于eBPF技术的网络数据采集系统架构

如图2所示,基于eBPF技术的网络数据采集系统从架构上分为网络数据采集模块和网络数据监控管理平台,其特点是系统架构模块化,网络数据采集、网络数据处理及网络数据显示等模块相对独立,便于各模块添加新功能,有利于提高系统功能拓展能力。各模块具体功能如下:

(1)网络数据采集模块

在整个网络数据采集系统中,网络数据采集模块是最核心的工作单元,该模块通过eBPF程序直接从Linux内核获取网络数据。在该模块中,首先要确定获取网络数据需要关联的Linux内核钩子函数,其次是编写关联到该钩子函数的eBPF程序,在eBPF程序中从内核获取网络数据并写入到eBPF Map中,最后,用户程序从eBPF Map读取eBPF程序写入的网络数据并将读取到的网络数据发送到网络数据处理模块。

网络数据采集模块的最重要的工作是找到可以获取指定网络数据的钩子函数,并编写相应的eBPF程序,在eBPF程序中获取源自内核的数据,比如编写关联钩子函数tcp_sendmsg的eBPF程序,可以获取TCP发送流量数据,而inet_sock_set_state、tcp_cleanup_rbuf、tcp_retransmit_skb、tcp_rcv_established和kfree_skb等钩子函数可以分别用来获取TCP握手时延、TCP接收流量、TCP重传、TCP RTT(Round Trip Time)和TCP丢包等网络数据。网络数据采集模块的另一个重要工作是通过eBPF Map实现eBPF程序和用户程序间的数据交互,使得从内核读取的网络数据能被用户程序获取。

(2)网络数据监控管理平台

网络数据监控管理平台包含网络数据处理模块和网络数据展示模块。网络数据处理模块收到网络数据采集模块传来的网络数据后,需要对网络数据进行进一步的处理。处理过程包括:对采集的网络数据进行过滤,比如过滤指定的某些网络设备的网络数据;数据过滤完成后,下一步要对数据进行计算,根据网络数据计算出能反应网络质量的指标,比如根据指定TCP连接的网络丢包个数和接收的TCP包总个数,计算TCP丢包率指标,将计算得出的网络质量指标同预期的结果进行比较,得出该指标是否异常。在网络数据展示模块,可以查看和存储网络处理模块计算得出的网络指标,也可以设置获取网络数据的过滤条件,指定获取指定空间、时间范围网络设备的网络数据。

04 持续提升网络数据采集能力的思考

为了进一步提升eBPF技术的网络数据采集能力,扩大应用范围,可以重点做以下几个方面的工作。

(1)加强与终端设备芯片厂商的合作,解决eBPF程序移植失败的问题

开发基于eBPF技术的网络数据采集程序时,当需要移植到各种不同网络终端时,很容易出现eBPF程序在某些终端上无法运行的问题,根本原因是有些终端设备的Linux系统对eBPF程序有特殊的限制和要求。一种可行的解决方法是和终端设备芯片厂商沟通,明确该种终端设备上eBPF程序运行有哪些特殊限制和需要注意的问题,并根据这些限制和需要注意的问题有针对性的完成eBPF程序的适配工作,避免出现eBPF程序移植失败的问题。

(2)推动内核改造,拓宽应用范围

eBPF程序直接和Linux内核进行数据交互,是高度依赖Linux内核配置的,不同的内核对eBPF支持程度不一样,有些内核全面开放了eBPF能力,有些内核则版本太低或没开放eBPF能力。为了拓宽eBPF网络数据采集程序的应用范围,需要联合相关设备厂商,升级设备内核或在设备内核打开更多的eBPF内核选项,以便让更多厂商的设备能运行eBPF网络数据采集程序,从而拓宽网络数据采集程序的应用范围。

(3)持续跟踪、研究eBPF技术的新发展,挖掘eBPF技术新能力

近年来,作为Linux内核的重要组成部分,eBPF是高速发展的,每一次内核迭代,eBPF技术都会有新的拓展,会增加新的内核钩子函数。面向未来,通过持续跟踪eBPF技术的最新发展,研究eBPF技术迭代中新增的钩子函数及其作用,尤其是新增与网络相关的钩子函数及其作用,可以获取更加全面的网络质量数据,进一步提高网络数据采集能力。另外,除了采集网络数据,eBPF技术在其他领域也有很多高效地应用,比如在系统资源监控、故障排查、性能监控等领域,因此,探索eBPF技术在这些领域的新应用也是挖掘eBPF技术新能力的重要工作。

05 总结与展望

本文聚焦于基于eBPF技术的网络数据采集方法,该方法可以帮助我们更加高效地采集网络数据。面向未来,我们将继续加强eBPF技术研究,扩展应用场景,不断提高网络数据采集能力。期待与业内同仁,尤其是设备芯片厂商一起努力,不断通过eBPF技术创新来提高网络数据智能化监控能力,进而提高中国移动网络运维能力。

此外,eBPF技术具有强大的内核监控能力,除了获取网络数据,通过eBPF技术还可以高效地实现实时跟踪监控cpu、内存资源、排查系统故障、分析系统性能等功能,未来通过eBPF技术创新还可以在更加广泛的维度提高网络运维能力。

参考文献

[1] 《中国移动2023中期业绩》。

[2] Linux Observability with BPF, David Calavera, Lorenzo Fontana, O"Reilly, Nov 2019。

[3] BPF Performance Tools, Brendan Gregg, Addison-Wesley Professional Computing Series, Dec 2019。

审稿:业务研究所 | 李连源、吴博、葛欣

本文作者

彭祖元 业务研究所

就职于中国移动研究院,主要从事有线宽带领域的数据库、eBPF技术开发工作。

刑辉峰 业务研究所

就职于中国移动研究院,主要从事有线宽带领域的数据库、大数据技术开发工作。

声明:本文来自中移智库,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。