2个版本
使用旧的Rust 2015
0.1.1 | 2017年3月27日 |
---|---|
0.1.0 | 2017年3月26日 |
#1493 在 文件系统 中
3KB
TFS已被RedoxFS取代,不再维护,TFS的大部分功能已集成到RedoxFS中
TFS:下一代文件系统
TFS是一个模块化、快速且功能丰富的下一代文件系统,采用现代技术以实现高性能、高空间效率和高度可扩展性。
由于ZFS的单一设计导致其实施速度慢,因此TFS是为了满足Redox OS对现代文件系统的需求而创建的,作为ZFS的替代品。
TFS受到了ZFS理念的启发,但同时也旨在实现模块化,并更容易实现。
TFS与terminalcloud的文件系统同名无关。
尽管许多组件已完成,但TFS本身尚未准备好使用。
设计目标
TFS的设计考虑了以下目标
- 并发
TFS包含非常少的锁,并力求尽可能适用于多线程系统。它使用多个真正的并发结构来管理数据,并按核心数量线性扩展。 这可能是TFS最重要的特性。
- 异步
TFS是异步的:操作可以独立进行;从磁盘的写入和读取不需要阻塞。
- 全盘压缩
TFS是第一个通过我们称为RACC(随机访问集群压缩)的方案实现完整全盘压缩的文件系统。这意味着每个集群都进行了压缩,只会略微影响性能。估计您可以获得60-120%的更多可用空间。
- 修订历史
TFS存储了每个文件的修订历史,而不增加额外开销。这意味着您可以将任何文件回滚到早期版本,自动备份系统,而无需从复制中产生额外开销。
- 数据完整性
与ZFS一样,TFS存储文件的完整校验和(不仅仅是元数据),而且是在父块上完成的。这意味着几乎所有的数据损坏都会在读取时被检测到。
- 写时复制语义
类似于Btrfs和ZFS,TFS使用写时复制语义,这意味着集群永远不会被直接覆盖,而是复制并写入到新的集群。
- O(1)递归复制
与其他一些文件系统一样,TFS可以在常数时间内进行递归复制,但有一个独特的附加功能:TFS在修改后也不会复制。如何做到?它单独维护文件的各个部分,因此只需要复制更新的部分。
- 保证原子性
系统永远不会进入不一致的状态(除非有硬件故障),这意味着意外的断电永远不会损坏系统。
- 改进的缓存
版本控制系统TFS在缓存磁盘方面投入了大量精力以提高磁盘访问速度。它利用机器学习来学习模式和预测未来使用,以减少缓存未命中次数。TFS还压缩内存缓存,减少所需的内存量。
- 更好的文件监控
写时复制(CoW)非常适合高性能、可扩展的文件监控,但遗憾的是,只有少数文件系统采用了这一特性。TFS就是其中之一。
- 全部内存安全
TFS仅使用用Rust编写的组件。因此,只有在标记为unsafe的代码中才可能出现内存不安全,这将受到额外的仔细检查。
- 全面测试覆盖
TFS的目标是在测试方面实现全面覆盖。这通过立即揭示大量错误类别,为正确性提供了相对较强的保证。
- SSD友好
TFS通过重新定位已死亡扇区来避免SSD的写限制。
- 改进的垃圾回收
TFS使用Bloom过滤器进行高效且快速的垃圾回收。TFS允许文件系统垃圾回收器在后台运行,而不会阻塞文件系统的其余部分。
常见问题解答(FAQ)
为什么将SPECK作为默认加密算法?
- SPECK是一种相对较新的加密算法,但它已经遭受了很多(无效的)密码分析,因此它相对安全。它具有真正良好的性能和简单的实现。可移植性是TFS设计的重要部分,而真正没有侧信道攻击的可移植AES实现比许多人想象的要困难得多(特别是,大多数可移植实现中存在SubBytes的问题)。SPECK没有这个问题,因此可以以最小的努力安全且可移植地实现。
TFS和ZFS有多相似?
- 实际上并不相似。它们共享许多基本思想,但除此之外,它们基本上是无关的。但ZFS的设计在很大程度上塑造了TFS。
TFS仅限于Redox吗?
- 不是,它从未计划仅限于Redox。
整盘压缩是如何工作的?
- 据我所知,整盘压缩是TFS独有的。它通过将尽可能多的“页面”(虚拟数据块)收集到一个“簇”(分配单元)中来实现。通过这样做,可以简单地通过解压缩相应的簇来读取页面。
为什么ZMicro如此慢?这会影响TFS的性能吗?
- ZMicro如此慢的原因是因为它在位级别上工作,以牺牲性能的代价提供了优秀的压缩比。这种可怕的慢速性能通过减少写入次数得到了回报。实际上,使用ZMicro的超过50%的分配只需要写入一个扇区,而不用3个扇区。其次,无论你的磁盘有多快,它都无法接近ZMicro的性能,因为磁盘操作本质上是慢的,而且从整体来看,压缩的性能实际上并不重要。
可扩展哈希或B+树?
- 都不是。TFS使用树和哈希表的组合:嵌套哈希表,这是一种哈希树的形式。其想法是在桶中创建一个新的子表,而不是重新分配。
设计资源
我写过一些关于TFS设计的文章。
- SeaHash:解释 - 这描述了为TFS设计的默认校验和算法。
- 关于随机访问压缩 - 这篇文章描述了用于随机访问压缩的算法。
- 三进制作为预测残留码 - 这种使用与创建良好的自适应(无头)熵压缩器有关。
- LZ4是如何工作的 - 这描述了LZ4压缩算法的工作原理。
- 嵌套哈希表中的碰撞解决方法 - 这描述了我们在目录结构中使用的嵌套哈希表方法。
- 原子哈希表 - 这描述了并发、内存中的哈希表/键值存储。
规范
完整的规范可以在 specification.tex
中找到,要渲染它请安装 texlive
或其他带有 XeTeX 的发行版,并运行
xelatex --shell-escape specification.tex
然后打开名为 specification.pdf
的文件