TC工具后台模式_Libbpf-tools —— 让 Tracing 工具身轻如燕

8428ef3bc566aa9e16fef9e1322080aa.png

本篇文章概述了 BPF 的主要应用,重点描述了 libbpf-tools 解决了哪些 BCC 痛点以及在 PingCAP 内部的相关实践。

BPF 最初代表 Berkeley Packet Filter,但在 Linux 中已扩展为通用内核执行引擎,能够运行新型的用户定义和内核模式应用程序。近几年来,BPF 子系统越发火热,迄至 Linux 5.8 内核,Linux 内核已经支持 30 种 eBPF 程序类型,遍布于内核各个角落,引起了广泛关注及热议,在 LWN 上甚至出现过 Why don't we rename Linux to BPF-kernel? 这样的嘲讽评论,不过更多的是一些理性的讨论。除上周在 CNCF 和大家分享的 BPF 在 Chaos 领域的应用外,目前 BPF 主要应用于:

  1. 跟踪和探测,最有名的应用当属 BCC;
  2. 网络功能 (XDP/TC),用于反 ddos,负载均衡等,K8S 平台有著名的 Cilium;
  3. 内核安全策略;
  4. 内核回调接口,这种新架构可用于允许 BPF 程序替换内核中的任何 “ops 结构 ( struct xxx_ops ) ,社区大佬对此功能的评价是:march towards becoming BPF runtime-powered microkernel,目前 TCP 拥塞算法已用此框架实现,感兴趣的可以体验下;
  5. 迭代器:dump 内核数据;
  6. … …

这些功能都非常酷,其中上述一些应用的背后有着一个重要的基础功能 BTF 做支撑, BTF 的一个用途是实现 BPF CO-RE (Compile Once – Run Everywhere)重定向,我们来看下如何基于 BPF CO-RE 替代 BCC 工具来获得更好的体验。

Libbpf-tools vs BCC

BCC 是 BPF 的编译工具集合,前端提供 Python/Lua API,本身通过 C/C++ 语言实现,集成 LLVM/Clang 对 BPF 程序进行重写、编译和加载等功能, 提供一些更人性化的函数给用户使用。

虽然 BCC 竭尽全力地简化 BPF 程序开发人员的工作,但其“黑魔法” (使用 Clang 前端修改了用户编写的 BPF 程序)使得出现问题时,很难找到问题的所在以及解决方法。必须记住命名约定和自动生成的跟踪点结构 。且由于 libbcc 库内部集成了庞大的 LLVM/Clang 库,使其在使用过程中会遇到一些问题:

  1. 在每个工具启动时,都会占用较高的 CPU 和内存资源来编译 BPF 程序,在系统资源已经短缺的服务器上运行可能引起问题;
  2. 依赖于内核头文件包,必须将其安装在每个目标主机上。即便如此,如果需要内核中未 export 的内容,则需要手动将类型定义复制/粘贴到 BPF 代码中;
  3. 由于 BPF 程序是在运行时才编译,因此很多简单的编译错误只能在运行时检测到,影响开发体验。

随着 BPF CO-RE 的落地,我们可以直接使用内核开发人员提供的 libbpf 库来开发 BPF 程序,开发方式和编写普通 C 用户态程序一样:一次编译生成小型的二进制文件。Libbpf 作为 BPF 程序加载器,接管了重定向、加载、验证等功能,BPF 程序开发者只需要关注 BPF 程序的正确性和性能即可。这种方式将开销降到了最低,且去除了庞大的依赖关系,使得整体开发流程更加顺畅。

性能优化大师 Brendan Gregg 在用 libbpf + BPF CO-RE 转换一个 BCC 工具后给出了性能对比数据:

As my colleague Jason pointed out, the memory footprint of opensnoop as CO-RE is much lower than opensnoop.py. 9 Mbytes for CO-RE vs 80 Mbytes for Python.

我们可以看到在运行时相比 BCC 版本,libbpf + BPF CO-RE 版本节约了近 9 倍的内存开销,这对于物理内存资源已经紧张的服务器来说会更友好。

Libbpf-tools 在 PingCAP 的应用

在 PingCAP 内部,我们很早就开始关注 BPF 和其社区发展,以前每添加一台新机器,就得在上面安装一套 BCC 依赖,比较麻烦,自从 libbpf-tools 示例程序添加到 BCC 项目后,我们就开始转换体验,在此过程中有幸得到了 Andrii Nakryiko (libbpf + BPF CO-RE 的主导者),和 Brendan Gregg,Yonghong Song 的指导。当前已完成 10 个 BCC/bpftrace 工具到 libbpf + BPF CO-RE 的转换 & 改进,并在内部使用。比如当需要弄清特定 workload 下 IO 特征时,就可以使用 block 层的多个性能分析工具来分析:

  1. 使用 ./biolatency -d nvme0n1 确认 IO 请求的延迟分布情况:

974f8c384ae43e8036429ce2657f5400.png
  1. 使用 ./biopattern -T 1 -d 259:0 分析 IO 模式:

2b7545942dc66736f42cc6159f4cebb8.png
  1. 使用 ./bitesize -c fio -T 确认 task 下发物理 IO 请求时的请求大小分布图:

457755aa3d10a83b3b1698f56c85f413.png
  1. 使用 ./biosnoop -d nvme0n1 对每次物理 IO 都进行详细都分析:

c9837b6eaa4e73830cb8b9a9992019a0.png

这些分析结果为后续的 IO 优化提供指导建议。除此之外,我们也在探索调度器相关的 libbpf-tools 对 TiDB 数据库的调优是否有帮助。这些工具属于通用型工具,欢迎大家来使用!

后续会将更多的工具基于 libbpf-tools 的方式来实现。期待大家的使用反馈!

Libbpf-tools —— 让 Tracing 工具身轻如燕 本篇文章概述了 BPF 的主要应用,重点描述了 libbpf-tools 解决了哪些 BCC 痛点以及在 PingCAP 内部的相关实践。 BPF 最初代表 Berkeley Packet Filter,但在 Linux 中已扩展为通用内核执行引擎,能够运行新型的用户定义和内核模式应用程序。近几年来,BPF 子系统越发火热,迄至 Linux 5.8 内核,Linux 内核已经支持 30 种 eBPF 程序类型,遍布于内核各个角落,引起了广泛关注及热议,在 LWN 上甚至出现过 Why don’t we re 阅读详情

相关推荐

基于Python与eBPF/XDP构建高性能零信任网络安全框架实践

在云原生与微服务架构下,网络安全防护面临流量激增与规则复杂的挑战。传统方案如iptables或用户态代理常遇性能瓶颈。eBPF(扩展伯克利包过滤器)技术允许在内核安全运行沙盒程序,实现对网络数据包的过滤、修改与重定向,无需修改内核源码。XDP(eXpress Data Path)作为eBPF的早期网络钩子点,位于网络驱动层,可实现微秒级的数据包处理,为高性能网络策略执行提供了基础。结合Python在策略管理与外部系统集成方面的灵活性,可构建解耦的数据面与控制面架构。这种技术组合特别适用于实现零信任安全模型中

weixin_30512089的博客 459

TC工具后台模式_Vue-cli+Element-ui实现后台管理系统(一)项目创建及Element-ui集成...

前言近期由于个人项目中需要用到一套后台管理系统,于是去网上搜索了不少的框架,也有很多不错的,这里我使用过的有林间有风的lin-ui的cms系统、vue-element-admin这两套,如果大家有需要也是可以直接使用的,但是如果大家和我一样也想自己体会一下造轮子的乐趣,那不妨自己试试~一、介绍以下我将介绍一下Vue+element-ui如何搭建一套简单的后台管理系统。开发工具:vscode框架:V...

weixin_39999536的博客 475

DNS监控:生产实践

本文分享了DNS查询监控在生产环境的实践经验和踩坑记录。针对2024年9月的监控需求,作者评估了tcpdump、dnstrace和eBPF三种方案,最终选择eBPF实现。文章详细介绍了DNS协议解析、UDP/TCP双协议处理、eBPF程序设计和性能测试过程,重点解决了map结构设计、协议解析正确性和性能优化等关键问题。实践表明,eBPF方案在性能(2% CPU)、进程关联和实时分析方面具有明显优势,并提供了线上部署时的注意事项,包括双协议处理、map大小控制和定期清理等最佳实践。

hzz812503533的博客 316

TC工具后台模式_最新主流的软件测试工具汇集

测试管理工具1,TestDirector(大而全)2,jira(简单好用)3,Quality Center(复杂)4,bugzilla(功能简单)5,svn(代码和文档管理工具)6,git,同svn,但是多分支管理比svn好web自动化工具1,qtp(录制回放和脚本编辑),用到的是vb语言2,Selenium (当前算最流行了,qtp的升级版本),用到的是Python语言。3,Watir,全称叫 ...

weixin_39607837的博客 682

eBPF编程指北

—1—开发环境这里以 Ubuntu 20.04 为例构建 eBPF 开发环境:$uname-a LinuxVM-1-3-ubuntu5.4.0-42-generic#46-UbuntuSMPFriJul1000:24:02UTC2020x86_64x86_64x86_64GNU/Linux $sudoaptinstallbuil...

Go中国 1879

从零构建libbpf+ebpf CO-RE程序

通过最简单的示例,一步一步构建bpf CO-RE程序,理解libbpf的开发流程。

qq_40711766的博客 3304

Libbpf-toolsTracing工具

本篇文章概述了 BPF 的主要应用,重点描述了 libbpf-tools 解决了哪些 BCC 痛点以及在 PingCAP 内部的相关实践。 目录 Libbpf-tools vs BCC Libbpf-tools 在 PingCAP 的应用 相关阅读 BPF 最初代表 Berkeley Packet Filter,但在 Linux 中已扩展为通用内核执行引擎,能够运行新型的用户定义和内核模式应用程序。近几年来,BPF 子系统越发火热,迄至 Linux 5.8 内核,Linux 内核已经支持 3.

RToax 883

【信息科学与工程学】【数据中心】第三十五篇 云计算数据中心的学科知识04

编号学科(课程)核心知识点在云计算/云存储/云网络/云安全/云MaaS中的作用代表教材/资料/论文 + 数学方程式列表工业界应用D1421​云原生数据库:TiDB​HTAP(混合事务/分析处理)、分布式SQL、水平扩展、强一致(Raft)、自动故障恢复、与MySQL兼容、TiFlash列式引擎提供弹性扩展的分布式数据库;支撑高并发在线交易与实时分析教材:《TiDB in Action》PingCAP(2020) 论文:《TiDB: A Raft-based HTAP Database》(2017)

weixin_49199313的博客 176

【译】 Libbpf:初学者指南

本文讨论了 libbpf 及其在开发 BPF 工具和应用程序时相对于 BCC 的优势。包括代码示例和入门指南。BPF 应用程序让工程师可以直接了解操作系统的底层。这些应用程序可以通过内核子系统中的挂钩(hooks)来监控性能和访问资源。不过,在内核应用程序上工作是一种微妙的平衡。你需要确保在一系列系统上的兼容性,并避免任何过时或弃用的东西。BCC 可以简化该过程,但 libbpf 的优势使其在许多情况下成为更好的解决方案...

barryX的技术笔记 4597

eBPF入门开发实践教程十三:统计 TCP 连接延时,并使用 libbpf 在用户态处理数据

tcpconnlat这个工具能够跟踪内核中执行活动 TCP 连接的函数(如通过connect()系统调用),并测量并显示连接延时,即从发送 SYN 到收到响应包的时间。通过本篇 eBPF 入门实践教程,我们学习了如何使用 eBPF 来跟踪和统计 TCP 连接建立的延时。我们首先深入探讨了 eBPF 程序如何在内核态监听特定的内核函数,然后通过捕获这些函数的调用,从而得到连接建立的起始时间和结束时间,计算出延时。

云微的blog 1189

Ubuntu下bpf纯c程序的编写与运行

1. 前言 2. 搭建bpf程序运行环境 2.1 下载源码 3. bpf代码分析及运行 4. 总结

金荣的个人技术博客 7448

libbpf-bootstrap基础

libbpf-bootstrap 源码下载,源码目录介绍,和libbpf的关系,eBPF的生命周期,CO-RE原理,x86-64 平台上的编译

qq_38232169的博客 1726

大漠天使后台绑定测试工具

 无聊用TC写了一个后台绑定测试的工具,仿付费大漠的VIP绑定工具而写 只支持插件版本 免费大漠的3.1233 天使4.019 QQ图片20140418125239.jpg (81.22 KB, 下载次数: 2) 下载附件 2014-4-18 12:52 上传 1.jpg (17.03 KB, 下载次数: 0) 下

czxin2的专栏 4122

TC工具后台模式_【工具】图像处理调试工具(附工具下载!)

导言在图像处理时,我们可能需要实时进行调试,有时候需要知道图像每个像素的具体值来帮助我们验证算法的准确性和理解算法思路。在不同情况下,我们需要使用 Python 或者 C++ 进行开发下面就介绍在 Visual Studio(VS) 和 Pycharm 下调试图像的工具,Max 大家的开发效率。ImageWatch 工具(VS 插件)Image Watch 是 OpenCV 的一款工具,它能够即时...

weixin_39548733的博客 420

TC工具后台模式_【微信小程序】小程序工具安装

上午突发奇想,想做个小程序链接到自己的公众号里面,想可以方便的分享些资源,也方便后面自己查找,懒得老是新建图文,找的时候还要一个个看。反正就是懒了,懒是我学习的动力。(突然想起早饭的碗跟锅还泡在厨房水龙头下ε(┬┬﹏┬┬)3)我也没写过小程序,本职工作跟代码也是十万八千里远。这个只是业余时间做着玩,我没打算系统的学习,也没那个学习习惯,一切以结果为导向,有兴趣的朋友可以一起交流学习。我不能保证每天...

weixin_39742065的博客 432

libbpf-tools编译和使用步骤

libbpf-tools的编译和运行

chensong_2000的博客 6401

ebpf之基于libbpf-tools开发环境搭建

linux ebpf libbpf libbpf-tools 开发环境

qq_23887115的博客 682
上一篇: 三菱modbusRTU通讯实例_国产PLC必学编程-- 汇川H1UModbus通讯例程
下一篇: mysql 查找相似数据_MySQL索引原理与高性能索引策略
weixin_39629617
博客等级 码龄9年 61粉丝 145原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值