BPF
  • 2024-11-08【linux内核】 BCC Tools命令汇总
    什么是BCCTools直接通过BPF指令编写BPF程序是非常繁琐的事情,尤其对于运维人员来说,花70%的时间来编写一个BPF程序来实现一个检查点,不如花70%的时间来熟悉别人已经写好的BPF程序,并且把别人的BPF程序有效的串联起来形成自己分析问题的套路,等有了闲暇时间再去尝试突破自己,写一些现
  • 2024-10-31bcc测量函数执行时间
    获取函数的执行时间对性能分析十分有益,这里给出一个示例来测量kernel函数的执行时间。kprobe可用来在函数执行的开始加入探测点,kretprobe可以在函数返回前加入探测点,分别在这个两个探测获取时间,其差值可以作为函数的执行时间。相对ftrace,这种方式要精确很多。下面是一个例子,测量
  • 2024-08-20使用cilium开发ebpf程序
    使用go开发ebpf程序最常见的一个框架就是cilium。开发前需要了解ebpf,了解go语言的基础知识。在本地安装go之后下载bpf2gogogetgithub.com/cilium/ebpf/cmd/bpf2go从最简单的开发框架开始下载示例源码gitclonehttps://github.com/cilium/ebpf.git在ebpf/examples下是官方
  • 2024-08-14(转)《eBPF 核心技术与实战》
    原文:https://fanlv.fun/2022/11/05/study-ebpf/概览eBPF 是什么呢?从它的全称“扩展的伯克利数据包过滤器(ExtendedBerkeleyPacketFilter)”来看,它是一种数据包过滤技术,是从 BPF(BerkeleyPacketFilter) 技术扩展而来的。BPF 提供了一种在内核事件和用户程序事件发
  • 2024-07-30基于BPF提升postgres可观测性的前提或条件
    最近看到一个新产品(dbdoctor)使用了eBPF技术,可实现对sql级别的监控,其涵盖了,cpu,内存,io,网络等,功能非常强大,目前mysql版本的已经开卖了。经过一番了解发现,该技术对于数据库的性能分析,故障排查方面很有用处。下面对了解到的内容总结一下。参考:Linux可观测性BPF&eBPF以及BCC&bpf
  • 2024-07-16eBPF bpf_redirect函数
    函数定义https://www.man7.org/linux/man-pages/man7/bpf-helpers.7.html网卡响应报文网卡要响应报文,不是经过该网卡就可以。报文必须进入这个网口才行,bpf_redirect表示进入这个网口(虚拟机网口除外,需要指定BPF_F_INGRESS才行)。因为网卡响应在tcingress之前,所以左侧流程虚拟
  • 2024-07-11eBPF 容器持久化map到宿主机上
    问题现象k8s上启动pod后,使用主机网络的容器,加载eBPF程序到网口上,持久化map只能保存在容器文件系统/sys/fs/bpf中。容器复位后,新容器与原来eBPF程序使用的不是同一个map。问题分析新容器使用新的文件系统,无法找回原来的/sys/fs/bpf挂载点,需要持久化到宿主机上。k8s挂载传播,实现
  • 2024-07-11eBPF 用户态和内核态基于ringbuf交互
    相比于perf_event_array,ringbuf优势在于1.读取数据是有序的,即提交顺序和消费顺序保持一致。2.避免数据复制,即提交数据到map和传递到用户态都不需要拷贝。内核态ringbuf/ringbuf.c#include"../headers/vmlinux.h"#include"../headers/bpf_endian.h"#include"../headers/b
  • 2024-05-19eBPF常用map类型
    map种类map类型特点HashMapBPF_MAP_TYPE_HASHhashmap。BPF_MAP_TYPE_PERCPU_HASHpercore的hashmap。BPF_MAP_TYPE_LRU_HASHmap塞满之后,继续插入,自动删除最近最少使用的entry。ArrayMapBPF_MAP_TYPE_ARRAY数组,key是整数。
  • 2024-05-05eBPF约束
    内核态约束1.内核态eBPF无法使用C语言标准库。因为不支持malloc,所以无法扩展skb空间且无法直接从内核态拷贝整个报文到用户态。2.内核态eBPF无法获取当前时间,bpf_ktime_get_ns函数返回系统启动后运行纳秒数,不包括系统暂停时间。https://www.man7.org/linux/man-pages/man7/bpf
  • 2024-04-24ebpf在Android安全上的应用:ebpf的一些基础知识(上篇)
    ebpf在Android安全上的应用:ebpf的一些基础知识(上篇)一、ebpf介绍eBPF是一项革命性的技术,起源于Linux内核,它可以在特权上下文中(如操作系统内核)运行沙盒程序。它用于安全有效地扩展内核的功能,而无需通过更改内核源代码或加载内核模块的方式来实现。(PS:介绍来源于https://ebpf.i
  • 2024-04-14eBPF指定网口丢弃icmp报文
    安装eBPF依赖#安装编译工具aptinstall-yllvmclang#确认内核具有BTF支持,路径存在,内核没有BTF支持,使用vmlinux.h无法通过编译ls/sys/kernel/btf#生成vmlinux.h#aptinstall-ylinux-tools-genericaptinstall-ylinux-tools-6.5.0-26-genericbpftoolbtfdump
  • 2024-04-11转载 ebpf sockmap/redirection 提升 socket 性能(2020)
    利用ebpfsockmap/redirection提升socket性能(2020)转自:https://arthurchiao.art/blog/socket-acceleration-with-ebpf-zh/译者序本文翻译自2020年的一篇英文博客 HowtouseeBPFforacceleratingCloudNativeapplications。原文标题非常宽泛,但内容其实很技术:展示了
  • 2024-04-08【Learning eBPF-3】一个 eBPF 程序的深入剖析
    从这一章开始,我们先放下BCC框架,来看仅通过C语言如何实现一个eBPF。如此一来,你会更加理解BCC所做的底层工作。在这一章中,我们会讨论一个eBPF程序被执行的完整流程,如下图所示。一个eBPF程序实际上是一组eBPF字节码指令。因此你可以直接使用这种特定的字节码来编写e
  • 2024-04-01【Learning eBPF-2】eBPF 的“Hello world”
    前一章讲了eBPF为什么这么吊,不理解没关系,现在开始,我们通过一个“Helloworld”例子,来真正入门一下。BCCPython框架是上手eBPF的最友好方式。来看。2.1BCC的HelloWorld下面的程序是一段BCC框架的HelloWorld程序。#!/usr/bin/python3frombccimportBPFpr
  • 2024-03-29Wireshark过滤基础语法简析
    1.简介Wireshark是一款强大的网络分析工具,它可以捕获和显示网络上的数据包,并提供多种过滤功能,让用户可以快速地找到自己感兴趣的数据包。Wireshark的过滤功能分为两种:捕获过滤和显示过滤。捕获过滤是在数据包进入Wireshark之前就对其进行筛选,只保留符合条件的数据包,从而减少捕
  • 2024-03-29【Learning eBPF-1】什么是 eBPF?为什么它很吊?
    本书中,eBPF被称为一种革命性的内核技术,被广泛应用于网络、观测和安全工具中。这种技术允许你在不重新编译内核的情况下,使能你的自定义工具,与内核数据进行交互。听起来很厉害。1.1追踪溯源,伯克利包过滤器eBPF的祖宗就是伯克利包过滤器,英文名:TheBerkeleyPacketFilter,
  • 2024-03-26BTF:实践指南
    BPF是Linux内核中基于寄存器的虚拟机,可安全、高效和事件驱动的方式执行加载至内核的字节码。与内核模块不同,BPF程序经过验证以确保它们终止并且不包含任何可能锁定内核的循环。BPF程序允许调用的内核函数也受到限制,以确保最大的安全性以防止非法的访问。尽管BPF为编写事件
  • 2024-03-19AOSP平台编写Android-ebpf程序(tracepoint)的一些map定义和使用问题,导致map和prog无法产生的原因。
     前言本片文章并不主要讲解在AOSP平台ebpf程序的整个编写流程,只是一些的map的定义使用问题,如有需要可查看,aosp平台的整个下载流程,以及简单的程序的编译和如何push到手机运行,这位up是我在ebpf领域探索的领路人,本站ID:LiujiaHuan13,如果有需要up本人后面会考虑写一篇aosp程序书写
  • 2024-03-07BPF BTF 详解
    1.介绍BTF(BPFTypeFormat)是内嵌在BPF(BerkeleyPacketFilter)程序中的数据结构描述信息。BPF原本是用于数据包过滤的编程语言,但随着eBPF(extendedBPF)的发展,它的用途已经扩展到多种内核子系统中,包括性能监测、网络安全和配置管理等。BTF是为了实现更复杂的eBPF程序而设计的。其
  • 2024-03-07使用BPF之前和之后生成直方图过程的对比
    以bitehist为例:使用BPF之前:1、在内核中:开启磁盘IO事件的插桩观测。2、在内核中,针对每个事件:向perf缓冲区写入一条记录。如果使用了跟踪点技术(推荐方式),记录中会包含关于磁盘IO的几个元数据字段。3、在用户空间:周期性地将所有事件的缓冲区内容复制到用户空间4。在用户空间:
  • 2024-03-06Linux超能力BPF技术介绍及学习分享(转)
    Linux超能力BPF技术介绍及学习分享版权属于原作者,地址 https://cloud.tencent.com/developer/article/1698426 文章被收录于专栏:大卫李的技术分享​​背景介绍近两年BPF技术跃然成为了一项热门技术,在刚刚结束的KubeCon2020Europe会议上有7个关于BPF的
  • 2024-02-20eBPF demo
    ubuntuserver23.10eBPF介绍eBPF(ExtendedBerkeleyPacketFilter,扩展的伯克利数据包过滤器)前身是BPF(BerkeleyPacketFilter,伯克利数据包过滤器)。BPF合入linuxkernel,在tcpdump中应用。eBPF应用广泛,eBPF程序由两类源文件组成,一类是运行于内核态的eBPF程序的源代码文件(
  • 2024-02-04eBPF程序如何跟内核进行交互
    一个完整的eBPF程序通常包含用户态和内核态两部分。其中,用户态负责eBPF程序的加载、事件绑定以及eBPF程序运行结果的汇总输出;内核态运行在eBPF虚拟机中,负责定制和控制系统的运行状态。对于用户态程序来说,它们与内核进行交互时必须要通过系统调用来完成。而对应到eBPF程序
  • 2024-02-01eBPF是如何工作的
    eBPF全称“扩展的伯克利数据包过滤器(ExtendedBerkeleyPacketFilter)”来看,它是一种数据包过滤技术,是从BPF(BerkeleyPacketFilter)技术扩展而来的。BPF提供了一种在内核事件和用户程序事件发生时安全注入代码的机制,这就让非内核开发人员也可以对内核进行控制。随着内核