ebpf

2024/4/11 23:52:29

BCC介绍

本文参考以下博文: bcc/ebpf使用介绍一文看懂eBPF、eBPF的使用(超详细) ebpf之bcc程序入门 特此致谢! BCC(有时也写作bcc)的全称是BPF Compiler Collection,即BPF编译器集合。BCC是一个开源项…

3.6 Android gpu_mem ebpf程序设计原理(二)

本篇我们继续以gpu_mem为例详细拆解eBPF程序组成。 三,DEFINE_BPF_PROG宏 从宏的字面意义上,我们可以看到,该宏定义了处理kernel内核事件被触发后的handler函数。这部分后面照葫芦画瓢写HelloWorld Demo的时候还会介绍。这里我们来先看android的宏定义的设计。 framework…

3.6 Android gpu_mem ebpf程序设计原理(二)

本篇我们继续以gpu_mem为例详细拆解eBPF程序组成。 三,DEFINE_BPF_PROG宏 从宏的字面意义上,我们可以看到,该宏定义了处理kernel内核事件被触发后的handler函数。这部分后面照葫芦画瓢写HelloWorld Demo的时候还会介绍。这里我们来先看android的宏定义的设计。 framework…

1.3 eBPF的工作原理初探

写在前面 上一节提到过,eBPF程序是面向BPF体系结构指令集编写的,它并不直接运行在Linux内核中,我们可以理解为它是运行在eBPF虚拟机,由eBPF虚拟机来执行eBPF字节码,就像java运行在jvm一样。 我们用一张原理图来看下eBPF程序的编译,加载,验证,钩子,映射等结点。 如上是…

运行原理:eBPF 是一个新的虚拟机吗?

目录 背景 eBPF 虚拟机是如何工作的? BPF 指令是什么样的? eBPF 程序是什么时候执行的? 小结 背景 前面,我们从最简单的 Hello World 开始,带你借助 BCC 库从零开发了一个跟踪 openat() 系统调用的 eBPF 程序。…

《BPF Performance Tools —— 洞悉Linux系统和应用性能》学习笔记 —— 第一章 介绍(2)

接前一篇文章:《BPF Performance Tools —— 洞悉Linux系统和应用性能》学习笔记 —— 第一章 介绍(1) 1.2 Tracing、Snooping、Sampling、Profiling和Observability是什么? 这些都是用于对分析技术和工具进行分类的术语。 Trac…

5.4 Android BCC环境搭建(eadb版 下)

四,BCC使用示例 这里以tcplife为例,来显示TCP会话的生命周期和吞吐量统计。 4.1 进入/bcc/tools目录 root@localhost:/bcc# cd tools/ root@localhost:/bcc/tools# ls CMakeLists.txt javacalls.sh rubystat_example.txt argdist.py javacalls_e…

ubuntu 18.04 中 eBPF samples/bpf 编译

1. history 信息 一次成功编译 bpf 后执行 history 得到的信息: yingzhiyingzhi-Host:~/ex/ex_kernel/linux-5.4$ history1 ls2 mkdir ex3 cd ex4 mkdir ex_kernel5 ls /boot/6 sudo apt install linux-source7 ls /usr/src/8 uname -r9 cd ex_kernel/10…

3.5 Android gpu_mem ebpf程序设计原理(一)

写在前面 前面提到过Android ebpf c语言版的源码结构,这里再以以gpu_mem为例详细拆解下。它主要包括: 定义map,用于存储内核事件触发时填充数据以分享给用户控件进程进行读取分析。定义type/map,程序类型决定了可以hook的内核函数,prog决定了map数据管理的主要逻辑。一,…

3.5 Android gpu_mem ebpf程序设计原理(一)

写在前面 前面提到过Android ebpf c语言版的源码结构,这里再以以gpu_mem为例详细拆解下。它主要包括: 定义map,用于存储内核事件触发时填充数据以分享给用户控件进程进行读取分析。定义type/map,程序类型决定了可以hook的内核函数,prog决定了map数据管理的主要逻辑。一,…

2.2 Android ebpf帮助函数解读(一) --- 更新中

写在前面 在开始我们的helloworld之前,我们先了解下内核ebpf子系统为我们提供了哪些能力。这样我们后面编写起来才会游刃有余。 前面讨论过,我们所编写的用户空间的eBPF程序并不能直接调用内核函数,而是通过bpf帮助函数来帮助我们完成对内核能力的调用,并填充对应的数据结构…

2.2 Android ebpf帮助函数解读(一) --- 更新中

写在前面 在开始我们的helloworld之前,我们先了解下内核ebpf子系统为我们提供了哪些能力。这样我们后面编写起来才会游刃有余。 前面讨论过,我们所编写的用户空间的eBPF程序并不能直接调用内核函数,而是通过bpf帮助函数来帮助我们完成对内核能力的调用,并填充对应的数据结构…

ebpf实战(一)-------监控udp延迟

问题背景: 为了分析udp数据通信中端到端的延迟,我们需要对整个通信链路的每个阶段进行监控,找出延迟最长的阶段. udp接收端有2个主要路径 1.数据包到达本机后,由软中断处理程序将数据包接收并放入udp socket的接收缓冲区 数据接收流程 2. 应用程序调用recvmsg等a…

1.4 Android下使能eBPF --- 更新中

写在前面 由于eBPF可运行用户提供的eBPF程序来扩展内核,这些程序可以附加到内核中的探测点或事件,用于收集有用的内核统计信息,监控和调试。eBPF使用bpf(2)系统调用加载到内核中,并作为eBPF机器指令的二进制块由用户来提供。 Android构建系统支持使用本文所述的build文件语…

Caretta 利用 eBPF 实现 Kubernetes 应用网络拓扑

介绍 Caretta 是一种轻量级的独立工具,快速展示集群中运行的服务可视化网络图。 Caretta 利用 eBPF 有效地展示 K8s 集群中的服务网络交互图,并利用 Grafana 查询和可视化收集的数据。科学家们早就知道,海龟和许多动物一样,通过…

5.82 BCC工具之tcpdrop.py解读

一,工具简介 tcpdrop工具打印被内核丢弃的 TCP 数据包或段的详细信息,包括导致丢弃的内核堆栈跟踪。 当网络出现拥堵、资源不足或其他原因导致数据包被内核丢弃时,tcpdrop可以帮助开发者和网络管理员识别并定位问题。 该工具通过钩住内核中处理TCP数据包的相关函数,捕获…

eBPF - 开篇

写在前面 近年来,eBPF发展比较快,越来越受很多大厂的追捧,一些Top手机厂商,云厂商都有针对性的开发了一些实用工具来帮助更好的监控系统基础能力和性能。作为操作系统的从业者,我们很难不去学习,尤其在“降…

5.83 BCC工具之tcplife.py解读

一,工具简介 tcplife工具统计了在追踪过程中打开和关闭的 TCP 会话。 tcplife 工具能够显示 TCP 会话的生命周期和吞吐量统计。它可以追踪 TCP 连接的建立、数据传输和关闭过程,并提供有关连接持续时间、传输的字节数等详细信息。这对于分析和优化网络性能、识别潜在的网络…

云原生之深入解析网络服务Istio、eBPF和RSocket Broker

一、服务治理 ① “服务治理”简介 在微服务时代,一个复杂的应用程序被分解为多个组件化、协作和连接的单元,服务往往会承担越来越多的业务责任,这使得服务治理的难度前所未有,仅仅依靠微服务框架级的治理是不够的,构…

kprobe/kretprobe的介绍,原理图,运行情况,用户层代码+内核层代码+预编译代码(详细解释+语法介绍),修改.bpf.c入口处的函数

目录 kprobe/kretprobe 介绍 原理图 运行情况 代码解释 .bpf.c 源码 语法 / 函数接口 char LICENSE[] SEC("license") "Dual BSD/GPL" SEC do_unlinkat filename结构体 ​编辑 BPF_KPROBE bpf_get_current_pid_tgid(…

DeeTune:基于 eBPF 的百度网络框架设计与应用

作者 | 百度APP云原生技术研发组 导读 随着云计算的技术的不断迭代演进,百度内部服务逐渐搬迁到云环境中,部署成本和效率取得明显收益,但一些可观测能力的短板和缺失逐渐显露,传统的方式往往通过植入代码进行修改来实现&#xff0…

DTCC2023大会-基于eBPF观测数据库-附所有PPT下载链接

DTCC2023大会-基于eBPF观测数据库-附所有PPT下载链接 8月16日—18日,第14届中国数据库技术大会(DTCC-2023)在北京国际会议中心举行。聚好看在大会上首次发布基于eBPF观测数据库性能的产品DBdoctor,受到了业界广泛的关注。近期几位业内同仁过来要大会的PPT&#xff…

eBpf技术总结

一、 ebpf基本原理 eBPF (扩展的伯克利数据包过滤器) 是一项强大的网络和性能分析工具,其在内核中的实现为一个基于寄存器的虚拟机,使用自定义的 64 位 RISC 指令集,运行本地即时编译(JIT)的 “BPF 程序, …

5.58 BCC工具之mysqld_qslower.py解读

一,工具简介 mysqld_qslower工具用于追踪 MySQL 服务器提供的查询,并打印出那些超过延迟(查询时间)阈值的查询。默认情况下,使用的阈值为 1 毫秒。 二,代码示例 #!/usr/bin/env pythonfrom __future__ import print_function from bcc import BPF, USDT import sys# a…

BCC源码内容概览(5)

接前一篇文章:BCC源码内容概览(4) 本文参考官网中的Contents部分的介绍。 BCC源码根目录的文件,其中一些是同时包含C和Python的单个文件,另一些是.c和.py的成对文件,还有一些是目录。 工具(To…

2.5 Android ebpf帮助函数解读(四)

61.long bpf_sock_ops_cb_flags_set(struct bpf_sock_ops *bpf_sock, int argval) 描述:尝试设置bpf_sock_ops相关联的完整TCP套接字的bpf_sock_ops_cb_flags字段的值为argval。 bpf_sock_ops_cb_flags字段的主要应用,是确定是否应在 TCP 代码的不同地方调用类型为BPF_PROG…

2.5 Android ebpf帮助函数解读(四)

61.long bpf_sock_ops_cb_flags_set(struct bpf_sock_ops *bpf_sock, int argval) 描述:尝试设置bpf_sock_ops相关联的完整TCP套接字的bpf_sock_ops_cb_flags字段的值为argval。 bpf_sock_ops_cb_flags字段的主要应用,是确定是否应在 TCP 代码的不同地方调用类型为BPF_PROG…

ebpf基础篇(一) -------- hello ebpf

很多东西的学习都开始于一个’hello world’, ebpf也不例外。 实验环境: ubuntu 20.04 确认linux内核打开了如下选项 CONFIG_BPF=y CONFIG_BPF_SYSCALL=y CONFIG_BPF_JIT=y CONFIG_HAVE_EBPF_JIT=y CONFIG_BPF_EVENTS=y CONFIG_FTRACE_SYSCALLS=y CONFIG_FUNCTION_TRACER=y …

5.3 Android BCC环境搭建(eadb版 上)

写在前面 eadb即eBPF Android Debug Bridge,它是基于adeb的重构。后者曾随aosp 10发布在platform/external目录下。 一,root权限 这里再HighLight下,当前整个专栏都是基于开发环境来展开的,也就是Android设备需要具有root权限。因此该专栏下每一篇博客都是默认了当前开发…

Android中eBPF使用原理以及 kprobe dmabuf_setup实例

目录 eBPF in Android Android eBPF kprobe dma代码 定义一个MAP 定义一个 PROG bpfprogs/Android.bp 测试程序 bpfprogs/memstats/Android.bp bpfprogs/memstats/MemStats.h bpfprogs/memstats/MemStats.cpp bpfprogs/memstats/MemStatsMain.cpp 编译运行 结果分析…

5.10 BCC工具之stacksnoop简介

一,stacksnoop简介 stacksnoop用于跟踪内核函数,并打印出所有的内核栈。 二,代码示例 #!/usr/bin/python# USAGE: stacksnoop [-h] [-p PID] [-s] [-v] functionfrom __future__ import print_function from bcc import BPF import argparse import time# 参数 examples …

5.8 BCC工具之mysqld_query.py解读

一,mysqld_query简介 我们首先来看USDT,USDT即Userland Statically Defined Tracing,它是一种静态定义的跟踪技术,用于在用户空间应用程序中添加自定义的跟踪点。USDT利用DTrace(动态跟踪)框架,允许开发者在代码中定义跟踪点,并在需要时启用它们。这样,开发人员可以在…

使用 eBPF检测 mmap泄露

目录 背景 官网 malloc泄露检测 mmap泄露检测 调用munmap释放内存 小结 背景 我们知道 mmap系统调用申请的内存空间,属于文件映射区域 和 匿名映射区域。这部分区域并不属于 heap,所以用一般的内存泄露检测工具是检测不出来的。例如:一…

Grafana 开源了一款 eBPF 采集器 Beyla

eBPF 的发展如火如荼,在可观测性领域大放异彩,Grafana 近期也发布了一款 eBPF 采集器,可以采集服务的 RED 指标,本文做一个尝鲜介绍,让读者有个大概了解。 eBPF 基础介绍可以参考我之前的文章《eBPF Hello world》。理…

Android gpu_mem ebpf程序设计原理(二)

本篇我们继续以gpu_mem为例详细拆解eBPF程序组成。 三,DEFINE_BPF_PROG宏 从宏的字面意义上,我们可以看到,该宏定义了处理kernel内核事件被触发后的handler函数。这部分后面照葫芦画瓢写HelloWorld Demo的时候还会介绍。这里我们来先看android的宏定义的设计。 framework…

Android gpu_mem ebpf程序设计原理(二)

本篇我们继续以gpu_mem为例详细拆解eBPF程序组成。 三,DEFINE_BPF_PROG宏 从宏的字面意义上,我们可以看到,该宏定义了处理kernel内核事件被触发后的handler函数。这部分后面照葫芦画瓢写HelloWorld Demo的时候还会介绍。这里我们来先看android的宏定义的设计。 framework…

3.10 Android eBPF HelloWorld调试(四)

一,读取eBPF map的android应用程序示例 1.1 C++源码及源码解读 /system/memory/bpfmapparsed/hello_world_map_parser.cpp //基于aosp android12#define LOG_TAG "BPF_MAP_PARSER"#include <log/log.h> #include <stdlib.h> #include <unistd.h&g…

DTCC2023大会-DBdoctor-基于eBPF观测数据库-附所有PPT下载链接

DTCC2023大会-DBdoctor-基于eBPF观测数据库-附所有PPT下载链接 8月16日—18日,第14届中国数据库技术大会(DTCC-2023)在北京国际会议中心举行。聚好看在大会上首次发布基于eBPF观测数据库性能的产品DBdoctor&#xff0c;受到了业界广泛的关注。近期几位业内同仁过来要大会的PPT…

ebfp编程常用API介绍

目录 1 用户态API 1.1 加载prog 1.2 查询prog的信息 1.3 prog绑定到固定的dev上 1.4 创建MAP 1.5 查询MAP 1.6 Object Pinning&#xff08;钉住对象) 2 内核态API 2.1 内核总体API 2.2 bpf 加载 2.2.1 prog 加载 2.3 bpf map 操作 2.3.1 map 创建 2.3.2 map 查找…

ebpf简述

0 什么是ebpf&#xff1f; Ebpf可以简单的理解成在linux内核&#xff08;当然windows也已经支持&#xff09;里添加了一个虚拟机&#xff0c;开发者编写的代码可以安全地在内核虚拟机中运行&#xff0c;这样可以更高效地、安全地实现内核级程序的编写&#xff0c;ebpf 的map机…

最快的ebpf开发环境搭建方式

环境搭建 启动容器 sudo docker run --rm -it --privileged \-v /lib/modules:/lib/modules:ro \-v /sys:/sys:ro \-v /usr/src:/usr/src:ro \alpine:3.12 安装依赖 sed -i s/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g /etc/apk/repositoriesapk add bcc-too…

技术干货 | cilium 原理之sock_connect

1.背景 在集群网络使用cilium之后&#xff0c;最明显的情况就是&#xff1a;服务暴露vipport&#xff0c;在集群内怎么测试都正常&#xff0c;但集群外访问可能是有问题的。而这就在于cilium所使用的ebpf科技。 2.引子&#xff1a;curl请求的路程 相对底层一点的语言&#xf…

eBPF 入门开发实践教程九:捕获进程调度延迟,以直方图方式记录

eBPF (Extended Berkeley Packet Filter) 是 Linux 内核上的一个强大的网络和性能分析工具。它允许开发者在内核运行时动态加载、更新和运行用户定义的代码。 runqlat 是一个 eBPF 工具&#xff0c;用于分析 Linux 系统的调度性能。具体来说&#xff0c;runqlat 用于测量一个任…

eBPF 入门开发实践指南四:在 eBPF 中捕获进程打开文件的系统调用集合,使用全局变量过滤进程 pid

eBPF (Extended Berkeley Packet Filter) 是 Linux 内核上的一个强大的网络和性能分析工具&#xff0c;它允许开发者在内核运行时动态加载、更新和运行用户定义的代码。 本文是 eBPF 入门开发实践指南的第四篇&#xff0c;主要介绍如何捕获进程打开文件的系统调用集合&#xf…

5.2 Android BCC环境搭建(eadb版 上)

写在前面 eadb即eBPF Android Debug Bridge,它是基于adeb的重构。后者曾随aosp 10发布在platform/external目录下。 一,root权限 这里再HighLight下,当前整个专栏都是基于开发环境来展开的,也就是Android设备需要具有root权限。因此该专栏下每一篇博客都是默认了当前开发…

ebpf+perfetto实现调度延迟记录与展示

1.背景 需要分析生产环境的调度问题,如线程的调度延迟有多少,在哪些时间点延迟比较明显,影响其调度的主要原因是什么?其次,我们希望可以比较直观的展示调度延迟情况。最好能对接perfetto的UI和后处理,因为perfetto已经用于分析比较多的性能数据,可以和调度数据进行整合.我们…

eBPF BCC开源工具简介

目录 官方链接 编译安装 ubuntu版本 安装 examples tools hello_world.py demo 运行报错 网上目前的解决办法 错误分析过程 python版本检测 libbcc库检查 python3 bcc库检查 正常输出 监控进程切换 运行输出 监控CPU直方图 缓存命中率监控&#xff1a;caches…

BCC源码内容概览(4)

接前一篇文章&#xff1a;BCC源码内容概览&#xff08;3&#xff09; 本文参考官网中的Contents部分的介绍。 BCC源码根目录的文件&#xff0c;其中一些是同时包含C和Python的单个文件&#xff0c;另一些是.c和.py的成对文件&#xff0c;还有一些是目录。 跟踪&#xff08;Tr…

5.104 BCC工具之fileslower.py解读

一,工具简介 fileslower可以显示低于阈值的基于文件的同步读写情况。 此脚本使用内核对VFS接口上的同步读取和写入的动态跟踪,以识别任何文件系统的慢文件读取和写入。 它通过跟踪__vfs_read()和__vfs_write()函数,并过滤出同步I/O(通往new_sync_read()和new_sync_write…

BCC源码内容概览(2)

接前一篇文章&#xff1a;BCC源码内容概览&#xff08;1&#xff09; 本文参考官网中的Contents部分的介绍。 BCC源码根目录的文件&#xff0c;其中一些是同时包含C和Python的单个文件&#xff0c;另一些是.c和.py的成对文件&#xff0c;还有一些是目录。 跟踪&#xff08;Tr…

5.41 BCC工具之uthreads.py解读

一,工具简介 uthreads工具跟踪Java或原始(C)pthreads中的线程创建事件,并打印新创建线程的详细信息。对于Java线程,会打印线程名;对于pthreads,如果有符号信息可以解析,则会打印线程的启动函数。 二,代码示例 #!/usr/bin/pythonfrom __future__ import print_funct…

Learn runqlat in 5 minutes

内容预告 learn X in 5 系列第一篇. 本篇主要介绍进程时延统计方式和 rawtracepoint. runqlat "高负载场景下应用为何卡顿", "进程 A 为什么得不到调度". 当我们在工作生活中产生这样的疑问, 目标进程的调度时延是一个不错的观测切入点. runqlat 可以帮…

5.12 BCC工具之undump.py简介

一,工具简介 undump工具用于ump UNIX 套接字数据包。这需要对内核函数进行动态跟踪,并且需要更新以匹配内核的改动。 二,代码示例 #!/usr/bin/python # @lint-avoid-python-3-compatibility-imports #from __future__ import print_function from bcc import BPF from bc…

eBPF 入门实践教程七:捕获进程执行/退出时间,通过 perf event array 向用户态打印输出

eBPF (Extended Berkeley Packet Filter) 是 Linux 内核上的一个强大的网络和性能分析工具&#xff0c;它允许开发者在内核运行时动态加载、更新和运行用户定义的代码。 本文是 eBPF 入门开发实践指南的第七篇&#xff0c;主要介绍如何捕获 Linux 内核中进程执行的事件&#x…

bcc安装和基本工具使用说明

目录 0. bcc安装 0.1 yum 安装 0.2 源码安装 1. cachestat 2. cachetop 3. funccount 4. trace 4.1 trace 4.2 trace查看它的传入的参数 bcc 提供的所有工具就都安装到 /usr/share/bcc/tools 这个目录中了。不过这里提醒你&#xff0c;bcc 软件包默认不会把这些工具…

XDP类型的BPF程序

目录 1. Loading via iproute2 ip 2 bpf程序绑定 3 bpf程序触发 经过上一节的内容&#xff0c;bpf程序和map已经加载到内核当中了。什么时候bpf程序才能发挥它的作用呢&#xff1f; 这就需要bpf的应用系统把其挂载到适当的钩子上&#xff0c;当钩子所在点的路径被执行&#…

tc ebpf 实践

1. 用 tc 加载 BPF 程序 给定一个为 tc 编译的 BPF 对象文件 prog.o&#xff0c; 可以通过 tc 命令将其加载到一个网 络设备&#xff08;netdevice&#xff09;。但与 XDP 不同&#xff0c;设备是否支持 attach BPF 程序并不依赖驱动 &#xff08;即任何网络设备都支持 tc BPF…

eBPF 入门实践教程十二:使用 eBPF 程序 profile 进行性能分析

本教程将指导您使用 libbpf 和 eBPF 程序进行性能分析。我们将利用内核中的 perf 机制&#xff0c;学习如何捕获函数的执行时间以及如何查看性能数据。 libbpf 是一个用于与 eBPF 交互的 C 库。它提供了创建、加载和使用 eBPF 程序所需的基本功能。本教程中&#xff0c;我们将…

在 Andorid 上使用 eBPF 程序

本文主要记录了笔者在 Android Studio Emulator 中测试高版本 Android Kernel 对基于 libbpf 的 CO-RE 技术支持程度的探索过程、结果和遇到的问题。 测试采用的方式是在 Android Shell 环境下构建 Debian 环境&#xff0c;并基于此尝试构建 eunomia-bpf 工具链、运行其测试用例…

Linux: eBPF: bcc-tools:tcpdrop使用需要注意的问题

最近使用bcc-tools的时候注意到,bcc-tools(eBPF相关软件)的使用版本和内核的版本紧密程度非常高。因为要使用内核的函数或者结构体,所以就必须版本一致是必须的,不然会出现下面的警告或者错误: WARNING: tcp_drop() kernel function not found or traceable. The kernel …

5.86 BCC工具之tcpstates.py解读

一,工具简介 tcpstates工具将会打印 TCP 状态更改信息,包括在每个状态中持续的时间(以毫秒为单位)。它是一个用于监控和分析TCP连接状态变化的工具。它利用BPF程序来跟踪TCP连接的生命周期,并记录每个连接在不同状态(如SYN_SENT、SYN_RECV、ESTABLISHED、FIN_WAIT1、FIN…

Linux: eBPF实现简析

文章目录1. 前言2. 背景3. 什么 是 eBPF&#xff1f;4. eBPF 框架5. eBPF 范例5.1 编译5.1.1 编译环境搭建5.1.1.1 安装 eBPF 程序依赖的内核头文件5.1.1.2 安装 eBPF 程序编译套件5.1.1.3 安装用户程序依赖库5.1.2 编译 eBPF 程序5.1.3 编译 用户空间程序5.2 测试运行6. eBPF …

3.7 Android eBpf Hello World调试(一)

写在前面 tracepoint是Linux内核中预定义的静态探测点,分布于内核各个子系统中。每个tracepoint通常包含开关-enable,过滤器-filter等。如下是/sys/kernel/tracing/events/sched子系统中支持的各种tracepoint事件: coral:/sys/kernel/tracing/events/sched $ ls core_ctl_…

5.39 BCC工具之uobjnew.py解读

一,工具简介 uobjnew工具统计了新的对象分配事件,并打印出统计信息,包括哪些对象类型被频繁分配,以及该类型已分配了多少字节。这有助于诊断常见的分配路径,而这些路径又可能会导致大量的垃圾回收。 二,代码示例 #!/usr/bin/pythonfrom __future__ import print_funct…

使用 eBPF 在云中实现网络可观测性

可观测性是一种了解和解释应用当前状态的能力&#xff0c;也是一种知道何时出现问题的方法。随着在 Kubernetes 和 OpenShift 上以微服务形式进行云部署的应用程序越来越多&#xff0c;可观察性受到了广泛关注。许多应用程序都有严格的承诺&#xff0c;比如在停机时间、延迟和吞…

5.76 BCC工具之sofdsnoop.py解读

一,工具简介 sofdsnoop工具追踪通过 Unix 套接字传递的文件描述符(FDs)。 二,代码示例 #!/usr/bin/env pythonfrom __future__ import print_function from bcc import ArgString, BPF import os import argparse from datetime import datetime, timedelta# 参数 examp…

Rust的eBFP框架Aya(一) - Linux内核网络基础

前言 在我的Rust入门及实战系列文章中已经说明&#xff0c; Rust是一门内存安全的高性能编程语言&#xff0c;从它的这些优秀特性来看&#xff0c;就是一门专为系统开发而诞生的语言。至于很多使用Rust来进行web开发的行为&#xff0c;不能说它们不好&#xff0c;只能说是杀鸡…

5.78 BCC工具之sslsniff.py解读

一,工具简介 sslsniff工具可以用来追踪OpenSSL、GnuTLS和NSS的写入/发送和读取/接收函数。传递给这些函数的数据会以纯文本的形式打印出来。也就是用于捕获和分析 SSL/TLS 加密的网络流量。 二,代码示例 #!/usr/bin/env pythonfrom __future__ import print_function from…

ebpf代码编写小技巧

查看所有tracepoint perf list perf追踪tracepoint perf trace --no-syscalls --event net:*查看tracepoint的具体参数 sudo python3 /usr/share/bcc/tools/tplist -v net:napi_gro_receive_entry cat /sys/kernel/debug/tracing/events/net/netif_rx/format内核vmlinux.h生…

ply前端

ply 是 eBPF 的 front-end 前端工具之一&#xff0c;专为 embedded Linux systems 开发&#xff0c;采用 C 语言编写&#xff0c;只需 libc 和内核支持 BPF 就可以运行&#xff0c;不需要外部 kernel 模块&#xff0c;不需要 LLVM&#xff0c;不需要 python。 ply 由瑞典工程师…

5.52 BCC工具之dbslower.py解读

一,工具简介 dbslower工具用于追踪由 MySQL 或 PostgreSQL 服务器提供的查询,并打印出那些超过延迟(查询时间)阈值的查询。默认情况下,使用的阈值是 1 毫秒。 二,代码示例 #!/usr/bin/env pythonfrom bcc import BPF, USDT import argparse import re import subproce…

初识eBPF

eBPF 是一项革命性的技术&#xff0c;它能在操作系统内核中运行沙箱程序。被用于安全并有效地扩展内核的能力而无需修改内核代码或者加载内核模块。 从古至今&#xff0c;由于内核有监视和控制整个系统的特权&#xff0c;操作系统一直都是实现可观察性、安全性和网络功能的理想…

ebpf基础篇(二) ----- ebpf前世今生

bpf 要追述ebpf的历史,就不得不提bpf. bpf(Berkeley Packet Filter)从早(1992年)诞生于类Unix系统中,用于数据包分析. 它提供了数据链路层的接口,可以在数据链路层发送和接收数据.如果网卡支持混杂模式,所有的数据包都可以被接收,即使这些数据包的目的地址是其它主机. BPF最为…

差生文具多之(一)eBPF

前言 在问题排查过程中, 通常包含: 整体观测, 数据采集, 数据分析这几个阶段. 对于简单问题的排查, 可以跳过前两个步骤, 无需额外收集数据, 直接通过分析日志中的关键信息就可以定位根因; 而对于复杂问题的排查, 为了对应用的行为有更完整的了解, 可以通过以下形式收集更多的…

深入理解基于 eBPF 的 C/C++ 内存泄漏分析

对于 C/C 程序员来说&#xff0c;内存泄露问题是一个老生常谈的问题。排查内存泄露的方法有很多&#xff0c;比如使用 valgrind、gdb、asan、tsan 等工具&#xff0c;但是这些工具都有各自的局限性&#xff0c;比如 valgrind 会使程序运行速度变慢&#xff0c;gdb 需要了解代码…

5.36 BCC工具之ucalls.py解读

一,工具简介 ucalls工具总结了包括Java、Perl、PHP、Python、Ruby、Tcl和Linux系统调用在内的各种高级语言中的方法调用。它显示最常调用方法的统计信息,以及这些方法的延迟(持续时间)。 通过系统调用支持,ucalls可以提供关于进程与系统交互的基本信息,包括系统调用计数…

5.40 BCC工具之ustat.py解读

一,工具简介 ustat是一个类似于“top”的工具,用于监控高级语言中的事件。它为每个使用Java、Node、Perl、PHP、Python、Ruby和Tcl运行时的进程打印关于垃圾收集、方法调用、对象分配以及各种其他事件的统计信息。 二,代码示例 #!/usr/bin/pythonfrom __future__ import …

BCC源码内容概览(1)

接前一篇文章&#xff1a;BCC源码编译和安装 本文参考官网中的Contents部分的介绍。 BCC源码根目录的文件&#xff0c;其中一些是同时包含C和Python的单个文件&#xff0c;另一些是.c和.py的成对文件&#xff0c;还有一些是目录。 跟踪&#xff08;Tracing&#xff09; exam…

5.3 Android BCC环境搭建(eadb版 下)

四,BCC使用示例 这里以tcplife为例,来显示TCP会话的生命周期和吞吐量统计。 4.1 进入/bcc/tools目录 root@localhost:/bcc# cd tools/ root@localhost:/bcc/tools# ls CMakeLists.txt javacalls.sh rubystat_example.txt argdist.py javacalls_e…

5.29 BCC工具之reset-trace.sh解读

一,工具简介 从文件名就可以理解这个工具是用来reset trace状态的。 那么我们可能永远都不需要这个工具。如果你使用-9(以及其他信号,如SIGTERM)杀死bcc工具,或者bcc工具崩溃,那么内核跟踪可能会处于半启用状态。这听起来并不那么糟糕:可能只是向从未读取的环形缓冲区…

BCC源码下载

接前一篇文章&#xff1a;BCC介绍 1. GitHub地址 上一篇文章中已提到&#xff0c;BCC的github地址是&#xff1a;https://github.com/iovisor/bcc。 页面如下所示&#xff1a; 2. 源码下载 打开终端&#xff0c;创建好要存放BCC源码的目录&#xff0c;进入此目录。 然后&…

利用bftrace跟踪运行进程

利用bftrace跟踪运行进程 sudo bpftrace -e tracepoint:syscalls:sys_enter_execve,tracepoint:syscalls:sys_enter_execveat { printf("%-6d %-8s", pid, comm); join(args->argv);} scanscan-virtual-machine:/usr/src/linux-source-5.15.0/linux-source-5.15…

3.1 Android eBPF代码仓解读

写在前面 前面已经介绍,Android从9.0版本开始支持eBPF,并且主要用于网络及CPU性能的监控上。它包含一个eBPF加载器和库。加载器在Andoroid init启动/system/etc/bpf/下的所有eBPF程序,ebpf程序在完成加载后,内核ebpf程序进行verify和attach,顺利的话,最终,ebpf程序会被…

3.1 Android eBPF代码仓解读

写在前面 前面已经介绍,Android从9.0版本开始支持eBPF,并且主要用于网络及CPU性能的监控上。它包含一个eBPF加载器和库。加载器在Andoroid init启动/system/etc/bpf/下的所有eBPF程序,ebpf程序在完成加载后,内核ebpf程序进行verify和attach,顺利的话,最终,ebpf程序会被…

从 seccomp filter 学习内核 bpf 自定义 hook 点的设计实现

从 seccomp filter 学习内核 bpf 自定义 hook 点的设计 目录 从 seccomp filter 学习内核 bpf 自定义 hook 点的设计基线信息bpf hook 点如何注册到已有代码中&#xff1f;bpf 代码如何动态 attach 到执行入口中&#xff1f;bpf 代码的校验与翻译在哪里做&#xff1f;校验有哪些…

安装clang

安装clang: scanscan-virtual-machine:~$ clang -v Ubuntu clang version 14.0.0-1ubuntu1.1 Target: x86_64-pc-linux-gnu Thread model: posix InstalledDir: /usr/bin Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/11 Selected GCC installatio…

5.1 Android BCC环境搭建(adeb版,上)

写在前面 这个是几年前的一个项目,Google在Android10版本中将其添加发布到aesp的external目录中,但在Android12又将其移除。官方也未对该部分的移除做任何声明,但是我们还是可以从Android11或者github上获取该项目的全部代码和文档。 GoogleSrouce: https://android.goo…

1.1 什么是eBPF?(上)

大多数介绍eBPF的文章都是用“eBPF是一种革命性的内核技术”来描绘的。这样讲一点也不夸张。因为它允许在Linux的内核中执行沙盒程序,在不改变内核源码或加载内核模块的前提下直接地,安全地,快捷地扩展内核,并改变内核的行为。可以想像在运行时,将用户空间的eBPF程序加载到…

ebpf学习_incomplete

学习ebpf相关知识 参考资料: awesome-ebpf 文章目录 初识准备ebpf.io介绍cilium的介绍内核文档Brendan Greggs Blog 的介绍书籍Learning eBPFWhat is eBPF? 交互式环境视频 基础知识学习学习环境搭建书籍阅读 项目落地流程整理环境搭建内核编译bcc环境变量zliblibelflibbpflib…

解码eBPF可观测性:eBPF如何改变我们所知的观测性

让我们来看看eBPF——这项技术到底是什么&#xff0c;它如何影响观测性&#xff0c;它与现有的观测性实践有什么区别&#xff0c;未来可能会发生什么变化&#xff1f; 在过去的两年里&#xff0c;云原生社区一直在热烈讨论eBPF。eBPF曾是KubeCon、eBPF Days和eBPF Summit的主题…

基于XDP技术的高性能rtp媒体转发服务程序

在软交换中&#xff0c;经常有公网转发音频、视频媒体的需求&#xff0c;开源软件有rtpproxy、rtpengine之类&#xff0c;但性能并不是太好&#xff0c;经常有人说跑音、视频几百路就把机器CPU跑满了。 以前写过一篇“跨平台、高性能的媒体转发服务器实现”&#xff0c;本质上…

《BPF Performance Tools —— 洞悉Linux系统和应用性能》学习笔记 —— 第一章 介绍(1)

本章介绍了一些关键术语&#xff0c;概述了相关技术&#xff0c;并演示了一些BPF性能工具。这些技术将在以下章节中进行更详细的阐明。 1.1 BPF和eBPF是什么&#xff1f; BPF是Berkeley Packet Filter的缩写&#xff0c;一种于1992年首次开发的鲜为人知、晦涩难懂的技术&#…

eBPF 的发展历程及工作原理

目录 eBPF 是什么 掌握 eBPF 是不是得先成为内核开发者&#xff1f; eBPF 的发展历程是什么样的? eBPF 是怎么工作的? eBPF 是万能的吗? 小结 eBPF 是什么 eBPF 是什么呢&#xff1f; 从它的全称“扩展的伯克利数据包过滤器 (Extended Berkeley Packet Filter)” 来看…