《张子恒--基于eBPF的进程生命周期画像工具.pdf》由会员分享,可在线阅读,更多相关《张子恒--基于eBPF的进程生命周期画像工具.pdf(26页珍藏版)》请在三个皮匠报告上搜索。
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 一旦运行数据类型及
7、格式输出固定,无法多元素地进行可视化为了解决这些问题,eBPF_proc_image 工具结合 pin map:l 支持预先按需挂载,以满足在高负载场景下直接使用l 使用时激活,可动态调整数据采集策略,满足了多元素可视化的需求第 二 届 中 国 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工具框架图第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m
8、基于 Prometheus 和 Grafana 的可视化平台第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m数据可视化设计进程上下CPU可视化设计:进程资源使用情况可视化设计:第 二 届 中 国 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 meBPF_proc_image actiondata-visu
9、aleBPF程序控制器step onestep twostep three工具介绍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 b p f t r a v e l.c o m系统处于空闲状态下的测试性能测试工具:UnixBench第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m系统处于高负载状态下的测试性能测试工具:UnixBench 压测工具:
10、stress-ng工具介绍1、第二届 eBPF开发者大会w w w.e b p f t r a v e l.c o m中 国 西 安工具设计与实现2、性能测试3、测试案例4、未来展望5、测试逻辑:执行 while 循环实现每上一次 CPU 睡眠一秒,这一秒代表阻塞时间第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m进程阻塞原因的定位可视化结果:offcpu调用栈信息:测试场景:通过 stress-ng 工具启动与主机 CPU 核心数相同数量的 CPU 密集型进程,以使 CPU 被充分利用测试对象:监测 top 进程的调度延迟信
11、息可视化结果:第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m进程调度延迟的实时监控stress-ngstress-ng异常进程的模拟:l CPU 密集型进程 使用stress-ng工具的-c参数模拟高CPU利用率进程l mem 密集型进程 使用stress-ng工具的-vm参数模拟高内存利用率进程l write 密集型进程 使用stress-ng工具的-iomix和-iomix-bytes参数模拟高速写入进程l read 密集型进程 使用dd工具模拟高速读取进程第 二 届 中 国 e B P F 开 发 者 大 会W W W
12、.e b p f t r a v e l.c o m进程资源使用情况的异常检测实验结果:工具介绍1、第二届 eBPF开发者大会w w w.e b p f t r a v e l.c o m中 国 西 安工具设计与实现2、性能测试3、成果展示4、未来展望5、l 在真实的应用场景下进行完善和优化l 进行更加生动的进程画像l 结合 bpftool 工具,实现更加灵活的 eBPF_proc_image 工具的使用l 加入异常检测模块,以及时准确的发现异常l 结合 bpftime 工具,针对进程异常行为设置热补丁第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m未来展望感谢各位专家的倾听THANKS第 二 届 中 国 e B P F 开 发 者 大 会W W W.e b p f t r a v e l.c o m