基于ebpf的高性能存储栈跟踪工具
IO延时高/抖动是线上环境常见的一种问题,直接影响到业务的服务质量。随着ebpf技术的发展与普及,在内核跟踪领域出现了大量基于ebpf的跟踪分析工具。然而存储栈由于涉及模块较多,如何针对单个请求进行跨层跨模块跟踪,仍是一个挑战。ebpf虽然使用起来安全方便,可移植性高,但相比编写内核模块,其额外开销较高,如何降低开销也是目前亟待解决的问题。
本项目要求同学基于ebpf开发一个工具,跟踪IO请求在存储栈的处理过程,统计IO延时相关信息,并尽量降低开销。
-
跟踪IO请求在block层 + driver层(支持nvme,scsi,virtio)的延时。 计算并统计一段时间内,IO路径中各个阶段的平均耗时。 记录总IO延时大于阈值的请求,输出该请求详细信息及在IO路径中各个阶段的耗时。
-
支持进程,线程,容器(cgroup),磁盘维度过滤器。
-
统计跟踪开销(内存,cpu)并尽力优化。 使用perf或bpf相关性能分析功能,分析该工具运行时的overhead(包括内存和cpu),并尽力优化。输出性能分析报告。 提示:除了优化工具自身逻辑外,可分析ebpf所提供相关组件的差异,如数据结构,hook类型等。也可使用bpf CORE框架的相关特性进行优化。
环境要求:为避免内核版本不同造成差异,性能测试及分析统一在Linux 5.10进行
- 实现 fs + 调度 + block + driver + 中断 全链路IO栈跟踪
- virtio 支持guest到host 全链路跟踪
- 实现一个针对内核数据处理流程的通用跟踪框架,基于该框架可方便实现针对某个/某些数据结构(如 skb , page ...)在内核中的处理流程进行跟踪。可选择实现对网络包收发、内存分配/回收、进程调度等处理流程的跟踪与延时统计。
2022全国大学生操作系统比赛的“OS功能设计”赛道
- 以小组为单位参赛,最多三人一个小组,且小组成员是来自同一所高校的本科生(2022年春季学期或之后本科毕业的大一~大四的学生)
- 如学生参加了多个项目,参赛学生选择一个自己参加的项目参与评奖
- 请遵循“2022全国大学生操作系统比赛”的章程和技术方案要求
中
《bpf performance tools》
https://github.com/iovisor/bcc
完成基础功能和扩展功能的开发,并输出说明文档一篇。
注意:下面的内容是建议内容,不要求必须全部完成。选择本项目的同学也可与导师联系,提出自己的新想法,如导师认可,可加入预期目标
参考任务描述部分。