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

eBPF系列:开发流程

简介

eBPF程序分为用户态程序和内核态程序,其中内核态程序是运行在eBPF虚拟机(内核中)上的;

eBPF内核态程序是需要采用C语言编写,通过BCC编译器,编译成eBPF字节码,然后才能从用户态加载到内核中的eBPF虚拟机里运行;

eBPF虚拟机就是将eBPF字节码转换成机器码,以便在主机内核中运行;为了提升运行性能,eBPF内集成了JIT(及时编译),可以在字节码程序首次运行之前,即时编译成可以在硬件上直接运行的机器码,之后就无需再进行翻译,可以直接运行一直编译好的机器码;

BPF应用程序包含一个或多个BPF程序(这些程序相互协作或完全独立)、BPF maps和全局变量;

BPF全局变量可以在所有BPF程序之间共享;

eBPF的用户态程序和内核态程序的数据交互是通过一种eBPF特有的map数据结构来实现的;

eBPF map是位于内核态,采用键值存储模式,可以持久化存储,可以被多个不同BPF程序访问,具有全局性,支持很多不同的数据类型,例如数组,哈希表,队列,栈,环形缓存等;

eBPF内核态程序字节码是通过系统调用bpf操作,加载到内核态的;

eBPF map的数据结构的创建也是通过系统调用bpf来完成的;

用户态程序通过一个整型句柄fd来操作map数据,句柄fd与BPF文件系统是一一对应的,

BPF 文件系统可以将每个map数据映射到文件系统上,方便多个eBPF程序通过文件获取句柄fd,来操作


http://www.kler.cn/a/321570.html

相关文章:

  • BILSTM法律网站用户提问自动分类
  • MySQL:数据库的约束
  • 工作和学习遇到的技术问题
  • 当你想要conda安装遇到UnavailableInvalidChannel: HTTP 404 NOT FOUND for channel的问题
  • 如何在python中模拟重载初始化函数?
  • MySQL与Oracle对比及区别
  • 【HarmonyOS】鸿蒙仿iOS线性渐变实现
  • 如何像专家一样修复任何 iPhone 上的“iPhone 已禁用”错误
  • 【Go】Go语言切片(Slice)深度剖析与应用实战
  • chsharp文件如何查找在unity中使用的 位置?
  • 【React】组件通信
  • docker windows下清理后,磁盘空间未释放原因及解决方法
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-27
  • Linux之我不会
  • 【stm32】TIM定时器输出比较-PWM驱动LED呼吸灯/舵机/直流电机
  • 使用Ruby进行视频内容的自动化分析
  • springboot+大数据基于数据挖掘的招聘信息可视化大屏系统【内含源码+文档+部署教程】
  • 调用飞书接口导入供应商bug
  • 高级java每日一道面试题-2024年9月26日-运维篇[分布式篇]-如何保证每个服务器的时间都是同步的?
  • 【vue-media-upload 升级玩法】一个页面用两个Uploader,一个上传图片,一个上传视频(分开传,容易分开设置和展示图片和视频)
  • 解决远程连接AlpineLinux Mysql/MariaDB 无法连接的问题
  • FortiGate 无线组网
  • 深度学习:卷积神经网络CNN
  • css div固定位置 div固定高度 文本固定高度 超出滚动
  • liunxcentos7下 跟目录空间不足docker load镜像报错空间不足
  • 泛型(Java)