1、eBPF&内核模块在Linux诊断中的应用第二届 eBPF开发者大会w w w.e b p f t r a v e l.c o m中 国 西 安银河雷神特大型特大型自研操作系统作者-谢宝友eBPF&内核模块优劣势1、第二届 eBPF开发者大会w w w.e b p f t r a v e l.c o m中 国 西 安eBPF案例2、内核模块案例3、高安全性严格验证:确保无死循环、非法内存访问、栈溢出、除数为0等不安全操作,不会崩溃,不会对系统造成损害。隔离:与内核其他组件隔离,防止未经授权访问内核内存、数据结构和内核源代码。有限操作:一个受限的指令集。限制可以执行的操作,降低了安全漏洞的风险。
2、高性能针对特定硬件优化:生成硬件专用指令集,作为本机机器代码运行。无上下文切换:在内核运行,直接访问内核数据结构和资源。事件驱动:仅在响应事件时运行,不是一直运行。高扩展性TCP 拥塞算法:BPF_PROG_TYPE_STRUCT_OPSextFUSE:用户空间文件系统扩展框架调度器:BPF_PROG_TYPE_SCHED高可移植性BPF CO-RE(Compile Once Run Everywhere),BTF为内核而设计,帮助eBPF程序兼容不同的内核版本。第 二 届 e B P F 开 发 者 大 会eBPF优势1、受限于linux及较新内核内核版本低于4.14将无法运行部分新特性在较
3、高版本才支持,并不断演进中 访问操作系统功能是有限的eBPF的安全性是通过限制程序可访问资源来实现的其访问操作系统的功能受限 不保证精确计数 不宜用于频繁执行的函数第 二 届 e B P F 开 发 者 大 会eBPF劣势1、自由调用内核API,甚至私有函数 性能更高 代码尺寸不受限制,可以实现复杂功能 更灵活的挂接钩子 几乎可以用于所有内核版本第 二 届 e B P F 开 发 者 大 会内核模块优势1、第 二 届 e B P F 开 发 者 大 会内核模块劣势1、需要小心的编写代码,稳定性验证周期长 版本适配工作更繁琐 稳定性责任划分问题 人才问题eBPF&内核模块优劣势1、第二届 eBP
4、F开发者大会w w w.e b p f t r a v e l.c o m中 国 西 安eBPF案例2、内核模块案例3、BCC等工具在实践中的缺点部署时需携带Clang和LLVM等基础库运行时编译BPF代码,耗费CPU资源,开销高需发布源码 解决方案采用BPF CO-RE技术,在本地主机上预编译BPF程序只需编译机安装Clang和LLVM等基础库,目标机无需部署避免了运行时编译开销高的缺点无需源码发布需要特定版本的内核,并打开相关配置选项不一样的libbpftools/lib/bpf、tools/bpf第 二 届 e B P F 开 发 者 大 会如何避免编译eBPF?2、核心思想:eBPF所
5、有操作均封装在动态库(.so)中,需要时可以动态获取将eBPF程序的load和attach一系列操作流程进行封装,对用户仅暴露必要、最少接口注意放宽内核版本匹配 优点:避免了eBPF代码的暴露使用简便,对用户更友好避免安装基础库,引起版本冲突并触发生产故障第 二 届 e B P F 开 发 者 大 会如何避免暴露eBPF代码?2、按进程PID,诊断块设备的IO操作的延迟情况支持用户指定时间阈值记录堆栈、进程、io、延迟等信息基于kprobe、tracepoint第 二 届 e B P F 开 发 者 大 会eBPF应用案例 -IO延迟2、第 二 届 e B P F 开 发 者 大 会eBPF应
6、用案例 -IO延迟2、跟踪所有进程的io延迟情况 -stress模拟诊断系统内存直接回收的延时。支持用户设定时间阈值,记录进程堆栈、进程ID、延迟时间等。基于tracepoint第 二 届 e B P F 开 发 者 大 会eBPF应用案例 -直接内存回收延迟诊断2、第 二 届 e B P F 开 发 者 大 会eBPF应用案例 -直接内存回收延迟诊断2、stress 模拟触发直接内存回收按进程PID统计 CPU 缓存的reference和miss情况。支持用户设定采样周期、