当eBPF遇上Linux内核网络

一口Linux 2022-07-08 00:00

大家好,我是西安邮电大学陈莉君老师研三学生梁金荣,今天给大家分享的主题是《当eBPF遇上Linux内核网络》

主要有四部分:

  • Linux内核网络数据的收发流程
  • eBPF优化Linux内核网络
  • eBPF提取内核网络数据
  • 可视化展示eBPF提取的数据

视频讲解链接:https://www.bilibili.com/video/BV1ch411U75f?spm_id_from=333.999.0.0

Linux内核网络数据收发流程

我们经常说的TCP/IP五层模型从上层到下层依次是应用层、传输层、网络层、链路层和物理层。其中应用层主要负责为应用进程提供服务,传输层主要负责实现端到端的数据传输,网络层主要负责数据报路由以及把分组报文发送到目标网络或者主机,链路层主要负责跨物理层在网段节点之间传输数据。

在Linux中主要对网络传输层、网络层和链路层进行了实现。传输层 网络层统称为协议层,链路层主要由网络设备驱动实现。

Linux网络接收数据包流程

在Linux内核中当数据包到达网卡的时候,通过DMA方式将数据映射到内存。然后硬中断通知CPU有数据到来,调用硬中断处理函数,之后交给软中断去处理。通过ksoftirq调用软中断处理函数,收包的软中断处理函数是net_rx_action函数,主要将Ring Buffer缓冲区数据做成sk_buff送给上层协议栈进行处理,之后数据包经过层层解包最终将数据放入套接字缓冲区中,CPU通过将数据拷贝给应用程序。

Linux网络接收数据包流程

首先,应用层应用程序通过CPU将数据拷贝到套接字缓冲区,然后数据包经过层层处理封装好数据包,经过软中断处理函数,通过建立dma映射,将数据放到发送缓冲区中,最后经过一个物理的网卡发送出去。

eBPF优化Linux网络性能

传统优化技术

NAPI

当数据包到达网卡的时候产生中断,驱动程序通知网络子系统有新的数据包到来,这时不是立即去处理,而是以轮询方式进行处理。

在NAPI中有pool方法来一次性接收多个数据。驱动程序不再使用数据包接收队列,而是网卡本身维护用来保存接收数据的缓冲区,并且可以禁止中断。该方法减少了中断产生,在突发的情况下,减少丢包的可能性,避免了接收队列的饱和,进而提高了网络性能。

GRO、RSS、RPS、XPS、RFS

GRO是在接收数据包的时候通过合并足够类似的包来减少传送给网络栈的包数,即将接收到的一些很小的包合并为一个大包送到协议栈,进而来减少cpu的使用量提高性能。

RSS是一种高效的网卡驱动技术。他能够在多处理器的系统下使接收报文在多个cpu之间高效的分发,相当于cpu收包的负载均衡。

RPS是SS的软件实现,使用软件的方法实现接收的报文在CPU之间平均分配,利用报文的哈希值找到匹配的CPU将报文送到对应CPU对应的backlog队列进行下一步的处理。

XPS相较于RPS,它是软件支持的发送数据包的多对列。XPS软件主要支持发送数据。

RFS的目标是通过指派处理报文程序所在的CPU。来在内核中处理报文,那么用方式来增加CPU的缓存命中率。

DPDK

如果在内核中没有DPDK,那么用户态收发数据就将数据放到内核协议栈经过一系列的处理,再到物理层网卡进行发送和接收数据。

DPDK用户态进行了实现,在用户态有DPDK的库。它实现了内核里面的协议站的功能,这时候就可以在用户态直接进行处理,将数据包处理好,直接放到物理层将数据发送出去。实际上就是将内核协议栈进行了短路,进而提高了网络性能。

优点:绕过了内核协议栈,提升了性能。

缺点:因为不走内核协议栈,传统的工具没法跟踪传统工具。

XDP

XDP为Linux内核提供了高性能可编程的网络数据路径。XDP需要网卡支持的,如果网卡支持那么网卡驱动程序里面有内置的bpf钩子,它可以访问原始的网络数据帧,直接告诉网卡对数据包的下一步操作。这么做避免了TCP/IP协议栈处理产生的额外消耗,通过驱动层做相关工作来提升性能。

XDP VS DPDK

XDP应用场景非常丰富,常见的有DDoS防御、负载均衡、SDR、网络统计、防火墙等。

XDP应用Cilium

它是基于eBPF的开源项目。其目的是为了微服务环境提供网络负载均衡安全功能。他主要的场景是在微服务、容器中。

在网络方面,可以用Cilium来作为容器的网络方案。以k8s集群为例,南北向流量就指当外部网络如果要访问k8s集群的时候就通过Ingress来访问。如果说是在集群内部,有很多Node节点节点,每个节点里面有很多个Pod,每个Pod有很多个容器。那么他们整个集群里面进行互相访问和互联互通的网络流量,我们就成为东西向的流量。

k8s并没有去实现网络,而是定义了模型。各大厂商就自己去做了网络的CNI插件。比如说Cilium它可以作为网络的CNI插件,它可以实现在集群内部Node与Node之间,Pod与Pod之间,容器与容器之间,或者不同的pod不同的Node之间的网络访问。

对于安全方面,它是基于Identity做的安全,传统的安全基于ip+port,而Cilium给服务指定了Identity允许Service Lable来定义安全策略。

最后Cilium还可以做监控,在集群里部署Cilium的CNI插件就可以监控整个集群。

CIlium性能

下图左边为传统网络,右边Cilium。

在传统的网络方案中,两个微服务之间要通信的话会经过Sidecar Poxy代理,他的数据走向看起来很短,实际上他走了完整的协议栈,而且在协议栈中还有iptables它里面维护了大量的规则,非常损耗性能。

而Cilium将两个socket以短路的方式连接到了一起,绕过了协议栈直接在两个socket之间进行拷贝数据。从直观上来看,它的性能提升是非常大的。

下图是几种方法之间的性能比较,Cilium每秒处理请求数比传统方法效率成倍增加。

eBPF提取内核网络数据

eBPF能做什么

eBPF在跟踪,观测,安全,网络,技能调优方面都大有可为。

  • 跟踪:比如要跟踪Linux内核里面的某个函数,我们想要知道这个函数调用了多少次,编写类似于Kprobe,Tracepoint这种类型的BPF程序用来跟踪内核的函数。
  • 观测:编写eBPF程序来提取内核的一些数据。
  • 安全:比如用eBPF程序抵御DDoS攻击。
  • 网络:比如上面说的Cilium。
  • 性能调优:用eBPF来提取细粒度的数据,然后通过数据做一些性能调优工作。

谁在使用eBPF

  • FaceBook他们用eBPF重写了他们大部分的基础设施。比如使用eBPF重写了iptable和netfilter。他们的负载均衡也从Ipvs换成了BPF。

  • 谷歌使用eBPF做Profiling,找出在分布式系统中应用消耗了多少cpu。他们也开始将BPF的应用范围扩展到了流量优化和网络安全。

  • RedHat用BPF做了bpfilter。它会替换掉内核中的iptables。

eBPF跟踪内核原理

eBPF可以使用c、gobpf、BCC、bpftrace进行编写。常用的是BCC和bpftrace其中bpftrace就是在命令行就可以用一些很简短的一些命令来达到一个bpf观测的一个效果,BCC作为工具集,他是一个BPF的前端将bpf的一些api进行了更上一层的封装,就是你可以用python来做这些工作。

BCC程序通过LLVM和Clang将BPF程序编译成bpf字节码,通过bpf系统调用将bpf字节码注入内核中。其中bpf字节码首先经过安全验证检查防止写的bpf程序破坏内核,JIT将bpf字节码翻译成机器能识别的机器码注入内核。当我们监控的内核函数触发就去执行eBPF程序,其原理是当你监控函数执行的时候会在入口处做一个类似于中断替换,转去执行BPF程序,执行结束后回到刚才跳转处继续执行函数。

在eBPF机制中有BPF Map共享空间,可以被内核和用户同时访问,eBPF程序将提取出数据放入Map中用户从中拿到数据进行观测。

TCP协议收发数据关键函数执行流

下图是TCP协议收发数据流,左边是协议栈数据接收过程,右边是发送过程。下一节演示如何提取内核进程级TCP流量数据。

在TCP数据发送的时候,tcp_sendmsg是流量发送的一个必经之路,该函数的第三个参数中就有它的流量信息。

在TCP数据接收的时候,tcp_recvmsg是流量接收必经之路,该函数的第三个参数中就有它的流量信息。。

使用kprobe进行函数挂载,在数据报经过时函数触发BPF函数将数据放入Map中,用户态将数据从Map中进行提取展示。相较于tcp_recvmsg,tcp_cleanup_rbuf的执行次数会远远小于tcp_recvmsg减少了BPF程序触发次数所带来的开销,所以此处改为tcp_cleanup_rbuf为挂载点。

运行展示

通过下方视频链接可以更直观感受eBPF运行流程:

https://www.bilibili.com/video/BV1ch411U75f?p=4&spm_id_from=pageDriver

可视化展示eBPF提取的数据

  • eBPF Exporter 是一个将自定义BPF跟踪数据导出到Prometheus的工具。可以将你的BPF程序嵌入在yml配置文件里面。然后执行Ebpf-exporter的时候加载这个配置就可以执行eBPF程序,然后将提取的数据通过一个端口暴露出来。

  • Prometheus 是一个高扩展性的监控和报警系统,可以主动将暴露出来数据进行拉取存储展示。

  • Grafana 是一个用来展示各种各样数据的开源软件,它的图表非常丰富。

操作展示

通过下方视频链接可以更直观感受eBPF数据可视化展示:

https://www.bilibili.com/video/BV1ch411U75f?p=4&spm_id_from=pageDriver

学习资料

《Linux内核观测技术BPF》

《BPF之巅:洞悉Linux系统和应用性能》

《Systems Performance》

《BPF Performance Tools》

https://www.tcpdump.org/papers/bpf-usenix93.pdf

https://www.brendangregg.com/index.html

Cilium eBPF:https://ebpf.io

https://github.com/iovisor/bcc

end



一口Linux 


关注,回复【1024】海量Linux资料赠送

精彩文章合集

文章推荐

【专辑】ARM
【专辑】粉丝问答
【专辑】所有原创
专辑linux入门
专辑计算机网络
专辑Linux驱动
【干货】嵌入式驱动工程师学习路线
【干货】Linux嵌入式所有知识点-思维导图



【课程推荐】

针对应届生和转行的朋友,彭老师录制了基于Linux的物联网综合实战课程。以项目为基础讲解知识点,掌握就有2年以上工作经验。
  课程详情:《一个适合写到简历的基于linux的物联网综合项目
报名联系:yikoupeng(微信号)
课程报名及开发板购买,后台回复关键字:无线传感网


点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看

一口Linux 写点代码,写点人生!
评论
  • 一、VSM的基本原理震动样品磁强计(Vibrating Sample Magnetometer,简称VSM)是一种灵敏且高效的磁性测量仪器。其基本工作原理是利用震动样品在探测线圈中引起的变化磁场来产生感应电压,这个感应电压与样品的磁矩成正比。因此,通过测量这个感应电压,我们就能够精确地确定样品的磁矩。在VSM中,被测量的样品通常被固定在一个震动头上,并以一定的频率和振幅震动。这种震动在探测线圈中引起了变化的磁通量,从而产生了一个交流电信号。这个信号的幅度和样品的磁矩有着直接的关系。因此,通过仔细
    锦正茂科技 2025-02-28 13:30 104浏览
  • RGB灯光无法同步?细致的动态光效设定反而成为产品客诉来源!随着科技的进步和消费者需求变化,电脑接口设备单一功能性已无法满足市场需求,因此在产品上增加「动态光效」的形式便应运而生,藉此吸引消费者目光。这种RGB灯光效果,不仅能增强电脑周边产品的视觉吸引力,还能为用户提供个性化的体验,展现独特自我风格。如今,笔记本电脑、键盘、鼠标、鼠标垫、耳机、显示器等多种电脑接口设备多数已配备动态光效。这些设备的灯光效果会随着音乐节奏、游戏情节或使用者的设置而变化。想象一个画面,当一名游戏玩家,按下电源开关,整
    百佳泰测试实验室 2025-02-27 14:15 140浏览
  • 1,微软下载免费Visual Studio Code2,安装C/C++插件,如果无法直接点击下载, 可以选择手动install from VSIX:ms-vscode.cpptools-1.23.6@win32-x64.vsix3,安装C/C++编译器MniGW (MinGW在 Windows 环境下提供类似于 Unix/Linux 环境下的开发工具,使开发者能够轻松地在 Windows 上编写和编译 C、C++ 等程序.)4,C/C++插件扩展设置中添加Include Path 5,
    黎查 2025-02-28 14:39 146浏览
  • 美国加州CEC能效跟DOE能效有什么区别?CEC/DOE是什么关系?美国加州CEC能效跟DOE能效有什么区别?CEC/DOE是什么关系?‌美国加州CEC能效认证与美国DOE能效认证在多个方面存在显著差异‌。认证范围和适用地区‌CEC能效认证‌:仅适用于在加利福尼亚州销售的电器产品。CEC认证的范围包括制冷设备、房间空调、中央空调、便携式空调、加热器、热水器、游泳池加热器、卫浴配件、光源、应急灯具、交通信号模块、灯具、洗碗机、洗衣机、干衣机、烹饪器具、电机和压缩机、变压器、外置电源、消费类电子设备
    张工nx808593 2025-02-27 18:04 123浏览
  • 应用趋势与客户需求,AI PC的未来展望随着人工智能(AI)技术的日益成熟,AI PC(人工智能个人电脑)逐渐成为消费者和企业工作中的重要工具。这类产品集成了最新的AI处理器,如NPU、CPU和GPU,并具备许多智能化功能,为用户带来更高效且直观的操作体验。AI PC的目标是提升工作和日常生活的效率,通过深度学习与自然语言处理等技术,实现更流畅的多任务处理、实时翻译、语音助手、图像生成等功能,满足现代用户对生产力和娱乐的双重需求。随着各行各业对数字转型需求的增长,AI PC也开始在各个领域中显示
    百佳泰测试实验室 2025-02-27 14:08 261浏览
  •           近日受某专业机构邀请,参加了官方举办的《广东省科技创新条例》宣讲会。在与会之前,作为一名技术工作者一直认为技术的法例都是保密和侵权方面的,而潜意识中感觉法律有束缚创新工作的进行可能。通过一个上午学习新法,对广东省的科技创新有了新的认识。广东是改革的前沿阵地,是科技创新的沃土,企业是创新的主要个体。《广东省科技创新条例》是广东省为促进科技创新、推动高质量发展而制定的地方性法规,主要内容包括: 总则:明确立法目
    广州铁金刚 2025-02-28 10:14 109浏览
  • 振动样品磁强计是一种用于测量材料磁性的精密仪器,广泛应用于科研、工业检测等领域。然而,其测量准确度会受到多种因素的影响,下面我们将逐一分析这些因素。一、温度因素温度是影响振动样品磁强计测量准确度的重要因素之一。随着温度的变化,材料的磁性也会发生变化,从而影响测量结果的准确性。因此,在进行磁性测量时,应确保恒温环境,以减少温度波动对测量结果的影响。二、样品制备样品的制备过程同样会影响振动样品磁强计的测量准确度。样品的形状、尺寸和表面处理等因素都会对测量结果产生影响。为了确保测量准确度,应严格按照规
    锦正茂科技 2025-02-28 14:05 149浏览
  •         近日,广电计量在聚焦离子束(FIB)领域编写的专业著作《聚焦离子束:失效分析》正式出版,填补了国内聚焦离子束领域实践性专业书籍的空白,为该领域的技术发展与知识传播提供了重要助力。         随着芯片技术不断发展,芯片的集成度越来越高,结构也日益复杂。这使得传统的失效分析方法面临巨大挑战。FIB技术的出现,为芯片失效分析带来了新的解决方案。它能够在纳米尺度上对芯片进行精确加工和分析。当芯
    广电计量 2025-02-28 09:15 132浏览
  • 在2024年的科技征程中,具身智能的发展已成为全球关注的焦点。从实验室到现实应用,这一领域正以前所未有的速度推进,改写着人类与机器的互动边界。这一年,我们见证了具身智能技术的突破与变革,它不仅落地各行各业,带来新的机遇,更在深刻影响着我们的生活方式和思维方式。随着相关技术的飞速发展,具身智能不再仅仅是一个技术概念,更像是一把神奇的钥匙。身后的众多行业,无论愿意与否,都像是被卷入一场伟大变革浪潮中的船只,注定要被这股汹涌的力量重塑航向。01为什么是具身智能?为什么在中国?最近,中国具身智能行业的进
    艾迈斯欧司朗 2025-02-28 15:45 226浏览
  • 更多生命体征指标风靡的背后都只有一个原因:更多人将健康排在人生第一顺位!“AGEs,也就是晚期糖基化终末产物,英文名Advanced Glycation End-products,是存在于我们体内的一种代谢产物” 艾迈斯欧司朗亚太区健康监测高级市场经理王亚琴说道,“相信业内的朋友都会有关注,最近该指标的热度很高,它可以用来评估人的生活方式是否健康。”据悉,AGEs是可穿戴健康监测领域的一个“萌新”指标,近来备受关注。如果站在学术角度来理解它,那么AGEs是在非酶促条件下,蛋白质、氨基酸
    艾迈斯欧司朗 2025-02-27 14:50 415浏览
  • 在物联网领域中,无线射频技术作为设备间通信的核心手段,已深度渗透工业自动化、智慧城市及智能家居等多元场景。然而,随着物联网设备接入规模的不断扩大,如何降低运维成本,提升通信数据的传输速度和响应时间,实现更广泛、更稳定的覆盖已成为当前亟待解决的系统性难题。SoC无线收发模块-RFM25A12在此背景下,华普微创新推出了一款高性能、远距离与高性价比的Sub-GHz无线SoC收发模块RFM25A12,旨在提升射频性能以满足行业中日益增长与复杂的设备互联需求。值得一提的是,RFM25A12还支持Wi-S
    华普微HOPERF 2025-02-28 09:06 156浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦