FUSE(Filesystem in Userspace)是一个允许用户在用户态创建自定义文件系统的接口,诞生于 2001 年。FUSE 的出现大大降低了文件系统开发的门槛,使得开发者能够在不修改内核代码的情况下实现创新的文件系统功能。JuiceFS 就是基于 FUSE 构建的高性能分布式文件系统,充分发挥了 FUSE 的灵活性和扩展性。
为了更好地理解 FUSE 的设计理念,我们将首先回顾内核文件系统以及网络文件系统(如 NFS)的发展历程,这些技术的演进为 FUSE 实现用户空间文件系统功能奠定了重要基础。
在文章的最后,将介绍 JuiceFS 在使用 FUSE 过程中的实践。由于 FUSE 需要进行用户态与内核态之间的切换,这会带来一定的开销,并可能导致 I/O 延迟,因此许多人对其性能存在顾虑。从我们的实践经验来看,FUSE 在大多数 AI 场景下能能够满足性能需求,相关细节将在文章中阐述。
01 单机文件系统:内核态与 VFS
文件系统作为操作系统中的核心底层组件,负责频繁操作存储设备,因此最初的设计完全在内核空间中进行。“内核”这一概念的提出,是随着计算机硬件和软件日益复杂化,操作系统将底层资源管理的代码与用户程序进行分离的产物。
内核是拥有超级权限的代码,负责管理计算机的核心资源(如 CPU、内存、硬盘、网络等)。当内核代码运行时,程序进入内核态,可以完全访问和操作这些底层设备。由于内核态权限极高,其代码必须经过严格测试和验证,普通用户无法随意修改。
而与内核空间形成对应的是用户空间(User space),这部分代码就是我们平时常见的各种应用程序,像浏览器、游戏等。在用户空间里,程序的权限是受到严格限制的,不能直接访问底层的重要资源。

如果应用程序需要使用文件系统,必须通过操作系统设计好的接口来进行访问,比如我们常用的 OPEN、READ、WRITE 等,这些就是所谓的系统调用。系统调用的作用是搭建起用户空间和内核空间的桥梁。现代操作系统常常定义了数百个系统调用,每个调用都有自己明确的名称、编号和参数。
当应用程序调用系统调用时,它就会进入一段内核空间代码,等执行完毕后,再把结果返回给用户空间。值得注意的是,这个从用户态到内核态,然后再返回用户态的整个过程,它都属于同一个进程范畴。

在了

最低0.47元/天 解锁文章
932

被折叠的 条评论
为什么被折叠?



