207. eBFP
简介
- 基于寄存器的虚拟机,使用自定义的 64 位 RISC 指令集,能够在 Linux 内核内运行即时本地编译的 “BPF 程序”,并能访问内核功能和内存的一个子集
- 基于内核的虚拟机(KVM),是一个模块,目的是使 Linux 能够作为其他虚拟机的管理程序
- JIT(Just In Time)的中文意思是 即时编译,主要为了解决虚拟机运行中间码时效率不高的问题
安装
- Linux 内核:由于eBPF是内核技术,因此您需要具备较新版本的Linux内核(建议至少在 5.15 以上),以支持eBPF功能。建议使用最新的 Ubuntu 版本(例如 Ubuntu 23.10)以获得最佳的学习体验,较旧的内核 eBPF 功能支持可能相对不全。
- LLVM 和 Clang:这些工具用于编译eBPF程序。
eBPF程序开发流程
- 使用 C 语言开发一个 eBPF 程序;
- 借助 LLVM 把 eBPF 程序编译成 BPF 字节码;
- 通过 bpf 系统调用,把 BPF 字节码提交给内核;
- 内核验证并运行 BPF 字节码,并把相应的状态保存到 BPF 映射中;
- 用户程序通过 BPF 映射查询 BPF 字节码的运行状态。
两种一般eBPF程序的开发方式
- BCC 全称为 BPF Compiler Collection, (python 库) 包含了完整的编写、编译、和加载 BPF 程序的工具链,以及用于调试和诊断性能问题的工具
- 可以在 BCC 上使用 Python、Lua 等高级语言进行编程。
- 只需要使用 C 来设计内核中的 BPF 程序,其余包括编译、解析、加载等工作在内,均可由 BCC 完成。
- BCC通常用在开发复杂的eBPF程序中,其内置的各种小工具也是目前应用最为广泛的eBPF小程序。不过,BCC也不是完美的,它依赖于LLVM和内核头文件才可以动态编译和加载eBPF程序。
BCC工具包
性能优化
出现卡顿等问题
- 网络
- 性能
难点
- 如何找到性能瓶颈, 即如何找到问题
流程
- 获取数据
- 处理数据: 可视化
- 根据数据优化
优化工具
封装: 加一层
自动化工程
处理重复低效的动作: 集成成一条命令
优化思想
调度管理
处理函数间的同步关系, 即依赖关系: a的输出为b的输入
优化函数
找到最忙的函数, 即性能决定性函数, 优化它
函数调用栈->函数的调用流程
找到关键分支并搞懂, 然后解决问题, 其他的分支等遇到后再具体分析
优化核
充分利用未利用核资源
注意采样频率, 频率越低, 则精度越差, 从而可能导致误判
冗余调用
函数耗时
- 太高: 优化, 因为收益较高
- 太低: 优化, 想一下是否有存在的意义
cache
- cache
选择好工具
应用
- 软件源码
- 编译器
系统
- 运行时环境
- 功能库
架构
- 操作系统
- 指令集 流水先/缓存
工艺
- cpu
关于工具
开源工具
对诉求难以响应
查找工具
如何快速找到合适的工具, 以及如何快速了解工具的功能, 从而判定是否符合自己的需求
- 请教大佬, 看有没有合适的, 和问了解知识的人, 从而了解工具的核心功能
- 华为知识库
系统学习方法
- 经验
- 思维导图, 脉络, 逻辑, 软能力, 结构化思维方式, 头脑风暴
- 梯子型->纵深->拓展
思维方法
在解决问题中学习到了什么方法
搜->看论文->看有没有一样的和类似的->如果没有, 就问导致
问题转换->大->小: 抽象能力, 分解转换
定制
能力
项目要求低
学习新知识新业务的能力
基础理论知识