1、基于eBPF的进程生命周期画像工具第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m中 国 西 安工具开发者&汇报人:张子恒(西安邮电大学)第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m个人介绍张子恒,西安邮电大学陈莉君教授研二的学生,研究方向Linux内核,内核之旅社区成员,曾获得2023年全国大学生计算机系统能力大赛全国三等奖,2023年开源之夏结项证书l GitHub主页:https:/ CSDN主页:https:/ eBPF_proc_image项目地
2、址:https:/ eBPF开发者大会w w w.e b p f t r a v e l.c o m中 国 西 安工具设计与实现2、性能测试3、测试案例4、未来展望5、第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m工具背景工具简介缺陷top数据来源于proc文件系统毫秒级的时间粒度可扩展性差无法提供进程行为数据高负载环境下常常失效ps.strace利用ptrace系统调用来监视并记录正在运行的进程的系统调用功能非常局限文本格式的输出导致处理和分析复杂传统的进程监测工具:eBPF_proc_image 工具旨在清晰地展示出一个
3、进程从创建到终止的完整生命周期,并加入更多的可视化元素和交互方式,使得整个进程画像更加直观、易于理解eBPF_proc_image 工具是一款基于 eBPF 技术开发的进程生命周期监测工具,可以展示出的进程生命周期信息类别包括关键时间点信息、持有锁信息、资源使用信息、调度信息、系统调用信息等,该工具具有以下特点:1.监控对象可以是单个线程 或 线程组 或 系统中的全部线程2.基于函数级的细粒度数据采集3.多类别多元素的进程数据展示4.结合系统相关信息作为参考和对比5.支持预先按需挂载,使用时激活,可动态调整数据采集策略6.基于 Prometheus 和 Grafana 的可视化平台,数据存储支
4、持动态可扩展的表头第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m工具简介第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m工具简介proc_image:挂载函数,等待输出controller:控制数据采集策略工具介绍1、第二届 eBPF开发者大会w w w.e b p f t r a v e l.c o m中 国 西 安工具设计与实现2、性能测试3、成功展示4、未来展望5、进程数据采集时序图:第 二 届 中 国 e B P F 开 发 者 大 会W W W.e
5、 b p f t r a v e l.c o m采集指标进程的数据可归为5种类型:关键时间点信息、持有锁信息、资源使用信息、调度信息、系统调用信息第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m细粒度的时间信息采集时间信息是进程生命周期中最重要的信息时间信息的采集统一采用 bpf_ktime_get_ns(),以实现纳秒级的粒度以采集进程的执行时间为例,相比与基于proc文件系统的传统工具,如下图所示:第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m技术选择内
6、核模块libbpf在功能实现方面可以直接访问内核资源,以实现复杂的功能 虽然存在一些限制,但足以满足进程数据采集的要求 在安全性方面内核提供的保护机制和错误处理机制不足以发现和应对所有的bug严格的代码逻辑验证与内核其他组件隔离在可移植性方面不同的内核版本适配工作很繁琐BPF CO-RE(Compile Once Run Everywhere)在工具编程方面繁琐复杂框架简单易上手 针对进程生命周期数据的采集:一般的eBPF程序执行流程:load-attach-collect-outputl 一键式运行,可能导致在高负载场景下存在较大运行延迟l 不支持动态修改数据采集的策略l 一旦运行数据类型及