Skip to content

Latest commit

 

History

History
64 lines (39 loc) · 2.99 KB

proj-ebpf-tracing-tools.md

File metadata and controls

64 lines (39 loc) · 2.99 KB

proj2-Ebpf tracing tools for IO stack

项目名称

基于ebpf的高性能存储栈跟踪工具

项目描述与背景

IO延时高/抖动是线上环境常见的一种问题,直接影响到业务的服务质量。随着ebpf技术的发展与普及,在内核跟踪领域出现了大量基于ebpf的跟踪分析工具。然而存储栈由于涉及模块较多,如何针对单个请求进行跨层跨模块跟踪,仍是一个挑战。ebpf虽然使用起来安全方便,可移植性高,但相比编写内核模块,其额外开销较高,如何降低开销也是目前亟待解决的问题。

本项目要求同学基于ebpf开发一个工具,跟踪IO请求在存储栈的处理过程,统计IO延时相关信息,并尽量降低开销。

功能描述

基础功能:

  1. 跟踪IO请求在block层 + driver层(支持nvme,scsi,virtio)的延时。 计算并统计一段时间内,IO路径中各个阶段的平均耗时。 记录总IO延时大于阈值的请求,输出该请求详细信息及在IO路径中各个阶段的耗时。

  2. 支持进程,线程,容器(cgroup),磁盘维度过滤器。

  3. 统计跟踪开销(内存,cpu)并尽力优化。 使用perf或bpf相关性能分析功能,分析该工具运行时的overhead(包括内存和cpu),并尽力优化。输出性能分析报告。 提示:除了优化工具自身逻辑外,可分析ebpf所提供相关组件的差异,如数据结构,hook类型等。也可使用bpf CORE框架的相关特性进行优化。

环境要求:为避免内核版本不同造成差异,性能测试及分析统一在Linux 5.10进行

扩展功能:

  1. 实现 fs + 调度 + block + driver + 中断 全链路IO栈跟踪
  2. virtio 支持guest到host 全链路跟踪
  3. 实现一个针对内核数据处理流程的通用跟踪框架,基于该框架可方便实现针对某个/某些数据结构(如 skb , page ...)在内核中的处理流程进行跟踪。可选择实现对网络包收发、内存分配/回收、进程调度等处理流程的跟踪与延时统计。

所属赛道

2022全国大学生操作系统比赛的“OS功能设计”赛道

参赛要求

  • 以小组为单位参赛,最多三人一个小组,且小组成员是来自同一所高校的本科生(2022年春季学期或之后本科毕业的大一~大四的学生)
  • 如学生参加了多个项目,参赛学生选择一个自己参加的项目参与评奖
  • 请遵循“2022全国大学生操作系统比赛”的章程和技术方案要求

项目导师

尹欣 [email protected]

难度

参考资料

《bpf performance tools》

https://github.com/iovisor/bcc

License

预期目标

完成基础功能和扩展功能的开发,并输出说明文档一篇。

注意:下面的内容是建议内容,不要求必须全部完成。选择本项目的同学也可与导师联系,提出自己的新想法,如导师认可,可加入预期目标

参考任务描述部分。