内容简介: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(译者注:可理解为容器)中创建一个新的子表,而不是重新分配。
设计资源
规范
完整的规范可以在specification.tex中找到。若要呈现它,请安装 pdflatex,然后运行。
然后打开名为 specification.pdf的文件。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- C++中头文件和源文件详细介绍
- 理解 C++ 中的头文件和源文件的作用
- 构建 – 如何使用CMake收集源文件?
- 惰性编译资源仓库中的源文件
- 即使路径正确,javascript – grunt-contrib-less也找不到源文件
- 新一代缓存-Caffeine
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JUnit Recipes中文版
陈浩等译 / 电子工业 / 2006-9 / 69.00元
《JUnit Recipes中文版:程序员实用测试技巧》主要介绍了在Java开发中使用JUnit进行单元测试的各种方法、原则、技巧与实践。本书出自开发一线专家之手,本着实用的原则,涵盖各类Java开发中应用JUnit的实用技巧,内容丰富、全面深入;无论对于需要应用JUnit进行单元测试的一线Java开发人员,还是JUnit入门、进阶者,本书都是一本不可多得的实用指南。这本书介绍了大量的JUnit实......一起来看看 《JUnit Recipes中文版》 这本书的介绍吧!