#fuse #path #directory #translation #multi-threading #higher-level

fuse_mt

一个支持多线程和inode->path转换的高级FUSE文件系统库

14 个版本

0.6.1 2023年9月19日
0.6.0 2022年7月12日
0.5.1 2020年8月17日
0.5.0 2019年5月11日
0.3.0 2017年2月1日

#225 in 文件系统

Download history 74/week @ 2024-04-06 37/week @ 2024-04-13 51/week @ 2024-04-20 98/week @ 2024-04-27 41/week @ 2024-05-04 720/week @ 2024-05-11 114/week @ 2024-05-18 32/week @ 2024-05-25 58/week @ 2024-06-01 64/week @ 2024-06-08 128/week @ 2024-06-15 54/week @ 2024-06-22 59/week @ 2024-06-29 50/week @ 2024-07-06 98/week @ 2024-07-13 28/week @ 2024-07-20

每月下载 241 次
5 Crates 中使用 (直接使用 4 个)

MIT/Apache

65KB
1.5K SLoC

FUSE-MT

Build Status Crates.io

文档

此代码是对 Rust FUSE crate 的封装,增加了以下功能

  • 在多个线程上调度系统调用,例如,I/O 不会阻塞目录列出。
  • 将inode转换为路径,以简化文件系统实现。

fuser crate 提供了对 FUSE 内核 API 的最小、低级访问,而此 crate 则更高级,类似于 FUSE C API。

它包括一个示例文件系统,该文件系统使用此 crate 将所有系统调用传递给任意路径的另一个文件系统。

这是一个正在进行中的项目。欢迎提交错误报告、拉取请求和其他反馈!

关于实现的一些随机笔记

  • 文件系统将实现的特质称为 FilesystemMT,并且与 FUSE crate 传统的无返回值方法和包含“回复”参数不同,这些方法返回它们的值。这对我来说感觉更自然。它们还接受 &Path 参数而不是inode数字。
  • 目前,以下调用被调度到其他线程
    • 读取
    • 写入
    • 刷新
    • fsync
  • 其他调用在主线程上同步运行,因为它们预计会很快完成,或者它们需要修改 InodeTranslator 的内部状态,我希望避免在那里需要加锁。
  • inode/path 转换始终在主线程上执行。
  • 限制并发读/写操作的数量可能是一个好主意。我还没有确定 FUSE 会发出多少个挂起的读/写请求,所以这可能不是一个问题。

依赖关系

~1.8–2.8MB
~48K SLoC