Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
5 of 8 tasks
helight opened this issue Oct 13, 2023 · 4 comments
Open
5 of 8 tasks

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

helight opened this issue Oct 13, 2023 · 4 comments
Assignees

Comments

@helight
Copy link
Member

helight commented Oct 13, 2023

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的测试用例 add tinyfs and the test case of fusedemo #556
  2. 修改了原本的fusedemo的README.md文档 modify the README.md of fusedemo #559
  3. add Makefile of fusedemo #571

TODO

  • 为现有 fusedemo 代码添加注释
    fusedemo注释及分析 #580
  • 增加测试用例——fusedemo
  • 自动化流水线缺失,需要添加好自动化流水线
    fast_fuse:修改fusedemo的流水线 #670 补充好了fusedemo的流水线
  • 向合适内核版本中适配extfuse
    适配环境:ubuntu 22.04 ,linux-5.10.0
  • 给出测试性能等结果分析
  • read、write 方法优化 ,即文件数据块的快速路径
  • 实现用户态缓冲区以及相关机制:回写机制、预读机制、数据淘汰
  • 将fuse原本调用底层文件系统进行读写的方法进行改写(用户态实现的文件系统中实现,即fusedemo中)
    1.对open功能进行改写修改open添加测试语句 #690
@13186379707 13186379707 self-assigned this Oct 20, 2023
@liuslient liuslient pinned this issue Oct 20, 2023
@chenamy2017 chenamy2017 unpinned this issue Oct 20, 2023
@linuxkerneltravel linuxkerneltravel deleted a comment from 13186379707 Oct 24, 2023
@linuxkerneltravel linuxkerneltravel deleted a comment from sf1999817 Nov 10, 2023
@linuxkerneltravel linuxkerneltravel deleted a comment from liuslient Nov 10, 2023
@linuxkerneltravel linuxkerneltravel deleted a comment from sf1999817 Nov 10, 2023
@liuslient
Copy link
Contributor

刘田本周工作:

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

尚凡本周工作:

  1. 学习了fusedemo的代码

@linuxkerneltravel linuxkerneltravel deleted a comment from 13186379707 Nov 17, 2023
@linuxkerneltravel linuxkerneltravel deleted a comment from 13186379707 Nov 17, 2023
@linuxkerneltravel linuxkerneltravel deleted a comment from liuslient Nov 17, 2023
@sf1999817
Copy link
Contributor

sf1999817 commented Nov 17, 2023

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

@sf1999817
Copy link
Contributor

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

  • 在Linux上搭建了Mi O对象存储服务器的环境

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

@liuslient
Copy link
Contributor

open功能添加 #655

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants