返回 登录
0

TFS:新一代开源文件系统

原文:https://github.com/redox-os/tfs#design-goals/
翻译:王江平

译者注:这篇文章主要对TFS的设计目标和一些常见的问题进行了描述,结尾部分提供了部分与TFS相关的资源供读者参考。

TFS是一款模块化,快速且功能丰富的新一代文件系统,采用现代技术使其具有高性能,高空间使用率和高扩展性,代码托管在Github上。

TFS是由于需要一个用于Redox OS的现代文件系统而被创建的,作为ZFS的替代品,由于其集成设计思想而被证明不会很快的实现。灵感来源于ZFS,同时它的目标是模块化和易于实现。

TFS与terminalcloud的同名文件系统无关。

设计目标

TFS 的设计目标如下:

并发

 TFS 包含很少的锁,目的是尽可能适用于多线程系统。它利用多个真正的并发结构来管理数据,并按核心的数量进行线性扩展。这也许是 TFS 最重要的特性。

异步

 TFS 是异步的:操作可以独立进行, 并且从磁盘写入和读取不需要阻塞。

全磁盘压缩

 TFS是第一个通过我们称之为RACC(随机访问集群压缩)的方案来集成的全盘压缩的文件系统。这意味着每个群集都被压缩, 只会略微影响性能。据估计,可以获得60-120%的可用空间。

修订记录

 TFS存储每个文件的修订历史记录,而不会增加额外的开销。 这意味着你可以将任何文件还原到较早的版本,自动备份系统,而不会造成复制的开销。

即写即拷语义(写时复制语义)

 与Btrfs和ZFS类似,TFS使用CoW语义,这意味着不会直接覆盖集群,而是复制并写入新的集群。

(1) 递归拷贝

 与一些文件系统一样,TFS 可以在不变的时间内执行递归拷贝,但是还有一个独特的补充: TFS 即使在突变之后也不会复制。 那是怎样工作的呢?它单独维护文件的各个部分, 这样只需要复制更新的段。

保证原子性

 系统永远不会进入不一致状态 (除非硬件出现故障), 这意味着意外断电不会损坏系统。

缓存改进

 TFS在缓存磁盘时提高了磁盘访问的速度。它使用机器学习方式来学习模式和预测未来的使用, 以减少缓存遗漏的数量。TFS 还压缩内存中的缓存,,减少了所需的内存量。

更好的文件监控

 CoW非常适合高性能,可扩展的文件监控,但不幸的是,只有很少的文件系统包含在内。 TFS是其中之一。

所有内存安全

 TFS只使用在Rust中编写的组件。 因此,内存不安全只能在标记为不安全的代码中进行,这是非常仔细的检查。

全面覆盖测试

 TFS旨在全面覆盖测试。 通过立即显示大类的错误,这对正确性提供了相对较强的保证。

SSD友好设计

 TFS试图通过重新定位死区来避免SSD中的写入限制。

改进的垃圾回收

 TFS使用Bloom过滤器进行空间高效和快速的垃圾回收。 TFS允许FS垃圾回收器在后台运行,而不会阻塞文件系统的其余部分。

常见问题

为什么使用SPECK作为默认密码?

 SPECK是一个相对较新的密码,但它已经受到了很多 (无效) 的密码分析,所以它是相对安全的。它有非常棒性能和简单的实现。可移植性是 TFS 设计的一个重要部分, 真正可移植的 AES 实现没有旁道攻击, 这比许多人想象的要难 (特别是,大多数便携实现中都存在 SubBytes 问题)。SPECK没有这个问题,因此可以通过最小的努力安全地实现移植。

TFS 和 ZFS 的相似程度?

 实际上并不那么相似,它们有许多基本的思想类似,但除此之外,它们本质上是不相干的。但ZFS的设计对TFS的形成起了很大的助推作用 。

TFS是否只有Redox-only?

 不,它从来没有计划仅仅是 Redox-only。

整个磁盘压缩如何工作?

 根据我的了解,全盘压缩是TFS专有的。它通过将多个“页面”(虚拟数据块)收集到“集群”(分配单元)中起作用。这样,可以通过简单地解压缩各个集群来读取页数据。

为什么 ZMicro 这么慢?它会影响 TFS 的性能吗?

 ZMicro这么慢的原因是因为它在一定程度上起作用,为性能提供了出色的压缩比。这种可怕的缓慢性能是由减少写入次数为代价的。事实上,ZMicro的50%以上的分配只会写入一个扇区,而不是3个。其次,无论磁盘的速度有多快,它都不会接近 ZMicro 的性能,因为磁盘操作本质上是缓慢的,从这点来看, 压缩的表现确实不重要。

可扩展哈希或B+树?

都不是。 TFS使用树和哈希表的组合:嵌套的哈希表,一种哈希树的形式。 其思想是,在Bucket(译者注:可理解为容器)中创建一个新的子表,而不是重新分配。

设计资源

一些关于 tfs 设计的文章:

规范

完整的规范可以在specification.tex中找到。若要呈现它,请安装 pdflatex, 然后运行。

  pdflatex --shell-escape specification.tex 

然后打开名为 specification.pdf 的文件。

评论