eBPF实战教程七 | 性能监控工具—bpftop

目录

bpftop介绍

工作原理

工具使用

功能小结


在之前的文章《USDT的预埋与性能测评》中,我们通过多次触发探针并统计用户态函数调用时间来分析USDT的性能,这种方法在编写demo时非常便捷,但在工程化的项目中,我们通常无法直接修改用户态应用程序或内核代码,这导致在分析eBPF程序本身的性能时,往往粒度比较粗。

例如当对MySQL进行探测时,我们可能部署了多个uprobe来探测SQL执行路径。但在观测性能时,只能通过sysbench等压测工具对MySQL进行压力测试,通过部署eBPF前后MySQL的QPS表现来估计eBPF的性能,但这种方式粒度比较粗。eBPF程序出现性能问题时,由于是多个uprobe同时对SQL执行链路进行探测,我们难以精确识别是哪个探针导致了性能问题。

那有没有一种工具能更直观分析eBPF程序性能问题呢?性能分析大神Brendan Gregg老东家开源的bpftop工具可完美解决eBPF程序自身性能分析问题。

项目地址:https://github.com/Netflix/bpftop

bpftop介绍

bpftop 提供了一个可以实时动态查看 eBPF 程序运行情况的界面。它可以显示每个程序的平均执行时间、每秒事件数和估算的 CPU 占用率。这个工具只在其运行时启用性能统计功能,以尽量减少对系统的开销。

图片

bpftop 通过实现高效的基准测试、代码优化和即时反馈循环,简化了eBPF程序的性能优化过程。如果没有 bpftop,优化过程将需要手动计算,增加了不必要的复杂性。有了 bpftop,用户可以快速建立基线,进行改进,并验证优化效果,从而简化了整个流程。

这款工具的一个亮点是它能够以时间序列图的形式展示统计数据。这种展示方式可以揭示其他方法可能错过的模式和趋势。

工作原理

bpftop 使用 BPF_ENABLE_STATS 系统调用命令来启用全局 eBPF 运行时统计数据收集,该功能默认是禁用的以减少性能开销。它每秒收集一次这些统计数据,计算每个 eBPF 程序在该样本周期内的平均执行时间、每秒事件数和估算的 CPU 利用率。这些信息可以以类似 top 的表格格式或者在 10 秒移动窗口的时间序列图中显示出来。一旦bpftop终止,它会关闭统计数据收集功能。该工具用 Rust 编写,利用了 libbpf-rs 和 ratatui 的 crates。

工具使用

项目地址中有已经打包好的release二进制文件,下载到开发机试用时发现该文件依赖glibc2.29。由于前段时间曾遇到glibc需要升级的情况,在glibc官网下载源码编译安装,导致ld文件不兼容,造成整个系统不可用,只能救援模式把ld覆盖回去了 。  遂放弃升级主机的glibc,选择源码编译bpftop。

项目中给出的编译命令很简单: cross build --release。

项目是用rust写的,需要先安装rust跨平台编译器。

  • 先安装cargo用来安装cross:  cargo install cross

  • 安装rustup: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh (安装完成后需要source环境变量或者reboot)

  • 如有报错可更新下rust版本: rustup update

  • 用cargo安装cross: cargo install cross

等待安装完成就可以编译啦。

编译完成后,在target/x86_64-unknown-linux-gnu/release目录中生成了bpftop这个二进制文件,当运行时再次发现该二进制依赖gblic2.0.29。

cross build --release -v 发现是在镜像中编译的。


/usr/bin/docker run --userns host -e 'PKG_CONFIG_ALLOW_CROSS=1' -e 'XARGO_HOME=/xargo' -e 'CARGO_HOME=/cargo' -e 
'CARGO_TARGET_DIR=/target' -e 'CROSS_RUNNER=' -e https_proxy -e http_proxy -e TERM -e 'USER=root' --rm -v 
/root/.xargo:/xargo:z -v /root/.cargo:/cargo:z -v /cargo/bin -v /home/github/bpftop-main:/project:z -v 
/root/.rustup/toolchains/stable-x86_64-unknown-linux-gnu:/rust:z,ro -v /home/github/bpftop-main/target:/target:z -w /project 
cross-custom-bpftop-main:x86_64-unknown-linux-gnu-0e427 sh -c 'PATH=$PATH:/rust/bin cargo build --release -v --target 
x86_64-unknown-linux-gnu'

那就把这个二进制文件丢进容器中执行,先把编译容器拉起来:

docker run -d --name bpftop-dev --privileged --entrypoint sleep cross-custom-bpftop-main:x86_64-unknown-linux-gnu-0e427 1000000

将二进制拷贝至容器中 docker cp bpftop bpftop-dev:/,进入bpftop-dev容器 docker exec -it bpftop bash,运行bpftop工具能正常执行了。

图片

在示例中发现项目中正在运行的kprobe以及uprobe都进行了统计,对每个探针的平均耗时,事件触发频率以及CPU消耗进行了打印。

UI做的功能还是比较丰富的,可以通过关键字筛选探针,可以进行排序,选中一个探针后按ENTER可以展现该探针的曲线图。

图片

这样,每个探针的性能表现就一目了然了,对与eBPF程序开发者来说,这是再实用不过的功能了。

功能小结

bpftop是一个强大的工具,使用bpftop工具可以直观地监控系统中正在运行的eBPF程序,极大提升了开发eBPF程序时对其自身性能优化的效率。

参考文档:Netflix的博客《Announcing bpftop: Streamlining eBPF performance optimization》https://netflixtechblog.com/announcing-bpftop-streamlining-ebpf-performance-optimization-6a727c1ae2e5

********************************************************************************************************

了解更多eBPF相关知识,请关注【DBdoctor】公众号,或点击下方卡片了解更多

DBdoctor-1分钟定位数据库性能问题DBdoctor是一款企业级数据库监控、巡检、性能诊断、SQL审核与优化平台,利用eBPF透视数据库内核,可一分钟定位数据库性能问题,实现根因诊断,并给出优化建议。icon-default.png?t=O83Ahttps://www.dbdoctor.cn/?utm=4cf70f49547b4b45864ac76d1da334bf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1558681.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

竹云参编 | 《个人信息保护合规审计人员能力发展研究报告(2024)》正式发布!

近日,“个人信息保护合规审计实务研讨会”在北京成功举办,来自中国网络安全审查认证和市场监管大数据中心、中国通信学会、中国通信企业协会、中国行为法学会网络与数据法学研究部、蒙牛乳业、平安集团、大成律师事务所、竹云等80余名专家学者、行业精英…

【python实操】python小程序之魔法方法(__init__方法、__str__方法、__del__方法)

引言 python小程序之魔法方法(__init__方法、__str__方法、__del__方法) 文章目录 引言一、__init__方法1.1 题目1.2 代码1.3 代码解释1.3.1 逐行注释1.3.2 代码执行过程 二、__str__方法2.1 题目2.2 代码2.3 代码解释 三、__del__方法3.1 题目3.2 代码3…

2句话说通 一体化模型与矢量模型的不同

有人说:一个人从1岁活到80岁很平凡,但如果从80岁倒着活,那么一半以上的人都可能不凡。 生活没有捷径,我们踩过的坑都成为了生活的经验,这些经验越早知道࿰

安卓系统属性persist类型prop深入剖析

背景: 近来学员朋友在群里问道了prop属性值进行持久化存储相关的问题,针对prop大部分情况下都是在代码端进行get获取读取操作,因为很多系统属性都是ro类型的,即不可以修改的,有一些debug可以修改的属性,但…

GC9008为什么能替代MX6208应用于红外开关,电流开关上

GC9008作为一种新型集成电路,具备了多个方面的优势,使其能够有效替代MX6208。以下是GC9008替代MX6208的主要原因及其优势: 1. 更低的功耗 优势:GC9008在设计上进行了优化,能够在更低的电压下运行,从而显著…

Android Compose 控件基本属性

本文的代码由上一篇文章的Demo进一步书写完成, 传送门:Android Compose的基本使用-CSDN博客 _____________________________________________________________________________ 以下代码分别列举了控件的: 内边距,外边距,内容居中,渐变自定义边框,宽度权重,string资源引用等…

JVM 内存模型与垃圾回收过程详解

JVM 内存模型与垃圾回收过程详解 文章目录 JVM 内存模型与垃圾回收过程详解1. JVM内存分区1.1 具体分区1.2 JVM内存分区的必要性 2. 垃圾回收2.1 CMS垃圾回收器2.2 G1垃圾回收器2.3 JVM垃圾回收从新生代到老年代 1. JVM内存分区 1.1 具体分区 Java虚拟机(JVM&#…

Ubuntu 18.04安装storcli查看阵列信息

rootCeph03:/opt/MegaRAID/storcli# cat /etc/issue Ubuntu 18.04.5 LTS \n \l 准备好storcli的安装包 解压 解压之后可以看到 根据系统版本选择 把storcli_1.18.11_all.deb包传到服务器 使用命令dpkg -I storcli_1.18.11_all.deb ./storcli64 show ./storcli64 /c1 show …

Nuxt3哔哩哔哩移动端项目实战

Nuxt3 - 哔哩哔哩 - 项目实战 简介 Nuxt 框架提供了一种基于 Node.js 的服务端渲染方案 SSR(Server Side Rendering),可以让 Vue 应用在服务器端进行渲染,从而提高页面的加载速度和 SEO。 项目预览 在线预览 https://bilibil…

室内人行与导航系统有哪些多样化的功能?

在现代化建筑的迷宫中,室内人行与导航系统如同一位无形的向导,引领我们穿梭于复杂的空间之中,极大地提升了人们在室内环境中的便捷性和安全性。这一技术领域的飞速发展,不仅体现在定位精度的提升上,更在于其多样化的功…

基于卷积神经网络的书法字体识别系统,resnet50,mobilenet模型【pytorch框架+python】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示: 基于卷积神经网络的书法字体识别系统,resnet50,mobilenet【pytorch框架,python,tkinter】_哔哩哔哩_bilibili (一)简介 基于卷…

台球助教预约小程序源码开发:技术解析与示例代码

随着数字化时代的到来,信息技术与体育运动的融合日益紧密。台球作为一项深受大众喜爱的运动,其教学训练领域也迎来了技术创新的浪潮。本文将探讨台球助教预约小程序的开发过程,从技术选型、功能设计到示例代码展示renxb001,全面解…

ComfyUI | 高清出图+艺术字+文字直出工作流(附工作流)

今天给大家带来一个可以直接打字的工作流,非常适合设计师使用!拒接二次修改!轻松上手设计,无需Photoshop技能,直接输入文字即可,操作极为简便,极大提升工作效率。 以国庆海报为例 庆祝75周年国…

搭建Serverless社交媒体分析平台,Dataxet运维成本降低50%

社交媒体平台发展如火如荼,据相关机构统计,2024年全球社交媒体活跃用户已占全球人口总数约62.5%。亚洲知名智能媒体公司Dataxet意识到社交媒体数据分析潜在商业价值,即推出全新的社交媒体分析平台DTX360,用于提供媒体监测、社交网…

Canvas:AI协作的新维度

在人工智能的浪潮中,OpenAI的最新力作Canvas,不仅是一款新工具,它标志着人工智能协作方式的一次革命性飞跃。Canvas为写作和编程提供了一个全新的交互界面,让用户能够与ChatGPT进行更紧密、更直观的协作。 ​​​​​​​ Canvas的…

危房安全监测系统解决方案

一、危房产生原因 1、地基因滑移,或因承载力严重不足,或因其他特殊地质原因,导致不均匀沉降引起结构明显倾科、位移、裂缝、扭曲等,并有继续发展的趋势。 2、地基因毗邻建筑增大荷载,或因自身局部加层增大荷载,或因其他人为因素,导致不均匀沉降,引起结构明显倾料、位移、裂缝…

linux安装Go ImageMagick插件

ImageMagick安装 在程序中需要对图片转化时需要使用到gopkg.in/gographics/imagick.v2/imagick库,但是这个库需要在本地安装ImageMagick插件。 有些机器在软件库是有的,可以直接下载安装,没有的话推荐源码安装。 ImageMagick中文站 ImageM…

Spring Boot学习资源库:Java开发者的新篇章

2 相关技术简介 2.1Java技术 Java是一种非常常用的编程语言,在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中,Java的身影无处不在,并且拥有旺盛的生命力。Java的跨平台能力十分强大,只需一次编译,任…

张驰咨询:企业管理难题?精益六西格玛培训公司有‘秘籍’!

在当今这个快速变化、竞争激烈的市场环境中,企业要想持续保持竞争优势,就必须不断追求效率与质量的双重提升。而精益六西格玛作为一种集精益生产与六西格玛管理于一体的先进管理理念和工具,正成为越来越多企业转型升级的首选。在这样的背景下…

Springboot3+druid+jasypt+application.yml配置文件数据库密码加密技术

说明 开发环境我们经常把数据库密码直接明文暴露在配置文件中,但是在生产环境,出于安全考虑,必须对数据库密码进行加密。 Jasypt是一个简单易用的Java加密工具库。Jasypt支持多种加密算法,如AES、SHA512、AES_256等,以适应不同的安全需求,可以轻松将加密技术应用于配置…