linuxkerneltravel / lmp

LMP provides an eBPF Supermarket for developers, including eBPF tools, open-source projects based on eBPF, eBPF learning materials, Linux kernel learning materials, and more.
https://linuxkerneltravel.github.io/lmp/
Apache License 2.0
616 stars 173 forks source link

fast_fuse项目:使用eBPF优化FUSE read/write 等方法性能 #544

Open helight opened 1 year ago

helight commented 1 year ago

fast_fuse 项目:使用eBPF优化FUSE read/write 等方法性能 背景 FUSE(Filesystem in Userspace)是一个常用的用户空间文件系统框架,它允许用户空间程序实现自己的文件系统,并且可以通过内核的VFS(Virtual File System)接口进行挂载和管理。但是,FUSE存在性能瓶颈,其中之一就是在文件读取时存在内存拷贝,特别是在大量的小文件读取场景。 eBPF(Extended Berkeley Packet Filter)是Linux内核提供的一种强大的动态追踪和过滤技术,它可以使用户空间程序在不修改内核代码的情况下,对内核执行的系统调用、网络数据包等进行监控和处理。近年来,eBPF已经成为了Linux系统中优化性能和安全的重要工具之一。 本题目旨在探索使用eBPF技术优化FUSE文件系统的read性能,并在某一个场景下验证,例如大量小文件拷贝场景等,可与社区导师商榷后确定。

运行要求: ● 运行系统: ubuntu22.4 以上 ●使用标准fuse库开发简易文件系统,可以在 ubuntu22.4 以上的内核进行运行,至少实现 open,read,write,close 等方法。 ●对比标准fuse库开发的简易文件系统,实现某一特定场景下性能提升,比如 read 或者 write。 ●提供准确的验证测试报告。

技术要求: ●熟练掌握Linux系统编程和网络编程相关知识; ●熟悉FUSE框架的基本原理和使用方法; ●熟悉eBPF技术的基本原理和使用方法; ●具备C/C++编程能力,在Linux环境下独立完成项目开发和调试。

PR提交

  1. 提交了tinyfs的代码,增加了fusedemo的测试用例 https://github.com/linuxkerneltravel/lmp/pull/556
  2. 修改了原本的fusedemo的README.md文档 https://github.com/linuxkerneltravel/lmp/pull/559
  3. https://github.com/linuxkerneltravel/lmp/pull/571

TODO

liuslient commented 1 year ago

刘田本周工作:

  1. 学习了fuse的基本知识,分析了libfuse库的hello示例
  2. 学习了libbpf-bootstrap中的kprobe的示例代码

尚凡本周工作:

  1. 学习了fusedemo的代码
sf1999817 commented 1 year ago

刘田:本周注释并分析了fusedemo的一些代码并提交了pr。 廉洋洋:本周使用uprobe跟踪了一下libc库中的read函数,即uprobe_read代码;在此基础上发现传统的ebpf可能无法实现拦截用户请求,使其在用户态进行处理得功能,因此目前正在寻找可以实现的合适工具中。 尚凡:对项目还很陌生,还在学习阶段,下周提交pr

sf1999817 commented 11 months ago

刘田:完成了代码的格式化,并给所有的核心代码添加了英文注释,将open.py改写为libbpf,打印部分信息,但后面还需要完善,准备考试后在完善 廉洋洋: -在LMP仓库中新增了一个Issue:fs_watcher,用于监测文件系统的性能指标   链接:https://github.com/linuxkerneltravel/lmp/issues/619

尚凡:在学习fusedemo里面有关函数的实现,目前正在学习,没提pr

liuslient commented 10 months ago

open功能添加 #655