当前位置: 首页 > news >正文

eBPF试一下(TODO)

eBPF程序跟踪linux内核软中断

eBPF (Extended Berkeley Packet Filter) 是一种强大的 Linux 内核技术,最初用于网络数据包过滤,但现在它已经扩展到了多个领域,如性能监控、安全性、跟踪等。eBPF 允许用户在内核中执行代码(以一种安全且高效的方式),而无需修改内核源代码或重新编译内核。通过这种方式,eBPF 可以在不改变内核代码的前提下,提供动态功能扩展。

eBPF 可以被用于以下几种场景:

  1. 网络数据包过滤:处理传入或传出的网络流量。
  2. 性能监控和分析:跟踪函数调用、系统调用、进程执行等,帮助调试和分析系统性能。
  3. 安全性增强:例如,用于实现安全策略,如限制特定进程的系统调用。
  4. 跟踪和日志记录:收集系统和应用程序的性能数据。

一个简单的 eBPF 示例:跟踪系统调用

下面是一个使用 eBPF 追踪 Linux 系统调用的简单例子,借助 bpftrace 工具:

1. 安装 bpftrace

在支持 eBPF 的系统上,你首先需要安装 bpftrace,它是一个非常流行的 eBPF 工具集,用于跟踪和分析。

sudo apt-get install bpfcc-tools bpftrace
2. 使用 eBPF 跟踪 open 系统调用

假设我们想要跟踪所有进程调用 open 系统调用(即打开文件)时的行为,可以使用以下的 bpftrace 脚本:

bpftrace -e 'tracepoint:syscalls:sys_enter_open { printf("open() called by PID %d with filename: %s\n", pid, str(args->filename)); }'

这个脚本的含义是:

  • tracepoint:syscalls:sys_enter_open 是一个 tracepoint,它指示进入 open 系统调用时触发。
  • { printf("open() called by PID %d with filename: %s\n", pid, str(args->filename)); } 是触发事件后的动作,打印调用 open 系统调用的进程 ID 和文件名。
3. 运行脚本

运行该脚本后,系统会开始输出每次调用 open 时的信息:

open() called by PID 1234 with filename: /etc/passwd
open() called by PID 5678 with filename: /home/user/file.txt
...
4. 停止跟踪

当你不再需要跟踪时,可以按 Ctrl+C 停止脚本。

解释

  • tracepoint:eBPF 提供了多个预定义的 tracepoint,允许我们监听内核和应用程序的不同事件。
  • sys_enter_open:这是一个与 open 系统调用相关的 tracepoint,它会在进程执行 open() 系统调用时触发。
  • args->filename:是系统调用的参数,这里我们获取文件名。

进一步的应用

eBPF 可以通过以下几种方式进行扩展:

  • XDP (eXpress Data Path):用于高速网络包过滤,通常用于防火墙和负载均衡。
  • eBPF 追踪:可以用来追踪内核中其他事件、函数调用和网络活动。
  • cgroup BPF:可以控制进程的行为,如资源限制、网络访问等。

通过 eBPF,用户可以不改变内核代码或模块的情况下,动态地向内核注入功能,非常适合需要高性能、低开销的场景,如性能分析和网络监控。

http://www.lryc.cn/news/507088.html

相关文章:

  • 【数据安全】如何保证其安全
  • [创业之路-196]:华为成功经验的总结与教训简单总结
  • 使用 NVIDIA DALI 计算视频的光流
  • 【UE5】pmx导入UE5,套动作。(防止“气球人”现象。
  • vue预览和下载 pdf、ppt、word、excel文档,文件类型为链接或者base64格式或者文件流,
  • 前端如何实现大文件上传
  • 如何评估并持续优化AI呼入机器人的使用效果
  • 找不同,找原因
  • OpenCV 学习记录:首篇
  • Java项目常见基础问题汇总
  • git 删除鉴权缓存及账号信息
  • Windows中运行Linux(WSL)
  • 一键尺寸测量仪:磁芯尺寸测量的优选方案
  • [创业之路-197]:华为的发展路径启示
  • 【计算机网络】lab2 Ethernet(链路层Ethernet frame结构细节)
  • 路径规划之启发式算法之二十:麻雀搜索算法(Sparrow Search Algorithm,SSA)
  • 音频开发中常见的知识体系
  • 【返璞归真】score检验:似然比的得分检验(Likelihood Ratio Score Test)
  • 三维重建(六)——3D Representation Methods: A Survey(北大总结三维表征--2024.10出版)
  • html基础-认识html
  • UE5 跟踪能力的简单小怪
  • Ubantu22系统安装Miniconda3
  • 130、java中在使用new ArrayList<>(),在参数中传入一个集合的作用
  • Mybatis-plus-Join--分页查询
  • 对BG兼并点的理解-不断刷新版
  • python的游标是什么
  • 硬件---14---PCB学习:PCB封装库及布局操作
  • 什么是MyBatis
  • 开发技术-Java改变图片格式
  • 基于DockerCompose搭建Redis主从哨兵模式