第二次采访 Reiser4 FS 的开发者 Eduard Shishkin

对 Reiser4 文件系统开发人员 Eduard Shishkin 的第二次采访已发布。

首先,请提醒读者您在哪里工作以及为谁工作。

我在华为德国研究中心担任首席存储架构师。在虚拟化部门,我负责处理数据存储的各个方面。我的活动与特定操作系统无关。

您目前是否致力于主内核分支?

很少,而且只有在我的雇主需要时才这样做。上一次是大约三年前,我发送补丁来提高使用 9p 协议(该业务的另一个名称是 VirtFS)的主机上共享存储的吞吐量。这里必须指出一个重要的事实:虽然我已经使用 Linux 很长时间了,但我从来都不是它的粉丝,也就是说,我和其他一切一样“呼吸均匀”。特别是,如果我发现一个缺陷,我最多可以指出一次。这样你就可以跟随某人并说服他们 - 这不会发生。

我记得上次,十年前,您对内核开发风格相当批评。从您(或者也许是公司)的角度来看,有什么变化吗?社区是否变得更加敏感?如果不是,你认为该怪谁?

我从未看到任何变得更好的变化。社会的主要问题是用政治技术、人际关系、多数意见、民粹主义、“内心声音”的建议、腐烂的妥协以及除了科学之外的一切来取代科学。无论人们怎么说,计算机科学首先是一门精确的科学。如果有人开始在“Linux way”旗帜下或在其他旗帜下宣称自己的 2x2 价值(与 4 不同),那么这除了伤害之外不太可能带来任何其他好处。

所有的麻烦主要是由于决策者的无能和缺乏教育造成的。如果管理者无能,他就无法做出客观、充分的决策。如果他也没有文化,他就无法找到一位有能力的专家来给他正确的建议。很有可能,选择会落在那些说“看似正确的事情”的骗子身上。腐败的环境总是围绕着无能的孤独领导人而发展。而且,历史在这方面没有例外,社区就是对此最明确的证实。

您如何评价 Btrfs 的开发进展?这个FS摆脱了童年疾病吗?您如何将其定位为“家庭”或企业用途的 FS?

我没有摆脱它。我11年前提到的一切今天仍然适用。 Btrfs 不适合严重需求的问题之一是可用空间问题。我什至没有谈论这样一个事实:在任何其他 FS 都会在分区上显示大量可用空间的情况下,用户被要求运行到存储中以获取新磁盘。由于缺乏可用空间而无法完成逻辑卷上的操作也不是最糟糕的事情。最糟糕的是,非特权用户几乎总是可以绕过任何磁盘配额,在相当短的时间内剥夺每个人的可用空间。

它看起来像这样(针对 Linux 内核 5.12 进行测试)。在新安装的系统上启动一个脚本,该脚本循环在主目录中创建具有特定名称的文件,在特定偏移处向它们写入数据,然后删除这些文件。运行该脚本一分钟后,没有任何异常情况发生。五分钟后,分区占用空间略有增加。两到三个小时后,电量达到 50%(初始值为 15%)。经过五六个小时的工作后,脚本崩溃并出现错误“分区上没有可用空间”。此后,您将无法再向分区写入 4K 文件。

出现了一个有趣的情况:您最终没有向分区写入任何内容,并且所有可用空间(大约 85%)都消失在某个地方。对遭受此类攻击的部分进行分析将发现许多树节点仅包含一个项目(配备密钥的对象),大小为几个字节。也就是说,之前占据磁盘空间15%的内容结果被均匀地“涂抹”在整个分区上,这样就没有地方可以写入新文件了,因为它的密钥比所有现有的都大,而且空闲的文件也没有地方可以写。分区上的块已用完。

此外,这一切都已经发生在基本的 Btrfs 配置上(没有任何快照、子卷等),并且无论您决定如何在该 FS 中存储文件体(作为树中的“片段”,或作为范围),都无关紧要。未格式化的块) - 最终结果将是相同的。

您将无法让其他上游文件系统遭受此类攻击(无论他们告诉您什么)。我很早之前就解释过问题的原因:这是对Btrfs中B树概念的彻底歪曲,这使得它有可能自发或故意退化。特别是,在某些负载下,您的文件系统在运行过程中将不断“崩溃”,无需外部帮助。显然,各种“紧迫”的后台进程只能在单个桌面上挽救局面。

在集体服务器上,攻击者总是能够“领先”他们。系统管理员甚至无法判断到底是谁欺负了他。在 Btrfs 中解决此问题的最快方法是恢复常规 B 树的结构,即重新设计磁盘格式并重写 Btrfs 代码的重要部分。这将需要 8-10 年的时间,包括调试,前提是开发人员严格遵循原始文章中相关算法和数据结构,并且不玩“破手机”游戏,就像“Linux 中”习惯(和鼓励)的那样。方式”。

这里我们还需要添加开发人员理解这一切所需的时间。这就是事情变得更加困难的地方。无论如何,十年的时间,也不足以让他们明白。好吧,在那之前你不能指望奇迹发生。它不会以“你和我不知道的”安装选项的形式发生,也不会以“只是业务问题”需要准备的补丁的形式发生。对于每一次这样仓促的“修复”,我都会呈现一个新的退化场景。 B 树是我最喜欢的主题之一,我必须说这些结构本身不允许自由!

我如何为自己定位 Btrfs?作为绝对不能称为文件系统的东西,更谈不上使用。因为,根据定义,FS 是一个操作系统子系统,负责有效管理“磁盘空间”资源,而在 Btrfs 中我们看不到这一点。好吧,想象一下,你来商店买一块手表,以免上班迟到,但他们没有卖给你手表,而是给你卖了一个带定时器的电烤架,最多可以烤 30 分钟。所以,Btrfs 的情况更糟。

浏览邮件列表时,我经常遇到这样的说法:由于驱动器便宜,有效管理磁盘空间不再相关。这完全是无稽之谈。如果没有有效的磁盘空间管理器,操作系统将变得脆弱且无法使用。无论您计算机上的磁盘容量有多大。

我想就 RHEL 中停止支持 Btrfs 征求意见。

这里没有什么特别要评论的,一切都很清楚。他们还将其作为“技术预览”。所以,我没有经历这个非常“预览”的过程。别让这个标签永远挂在身上!但他们无法在全力支持下推出有缺陷的设计产品。 RHEL 是一个企业,即规定的商品-货币关系。红帽不能像在 Btrfs 邮件列表上那样欺凌用户。想象一下这样的情况:一位客户花了辛苦赚来的钱购买了磁盘,并支付了您的支持,他想了解在他没有写下任何内容后他的磁盘空间去了哪里。对此你会怎样回答他呢?

更远。红帽的客户包括知名大型银行和交易所。想象一下,如果他们受到基于 Btrfs 中提到的漏洞的 DoS 攻击,会发生什么。您认为这件事该由谁负责?对于那些想要指责 GPL 许可证上写着作者不承担任何责任的人,我会立即说:“把它藏起来!”红帽会回答,但方式似乎还不够!但我知道红帽不会面临此类问题,因为他们拥有特别强大的 QA 工程师团队,我曾有机会与他们密切合作。

为什么一些公司继续在其企业产品中支持 Btrfs?

请注意,产品名称中的前缀“企业”没有多大意义。企业是与客户的合同关系中嵌入的责任衡量标准。据我所知,只有一家基于 GNU/Linux 的企业——RHEL。其他一切,在我看来,都只是作为一个企业呈现出来,而不是一个企业。最后,如果对某物有需求,那么总会有供应(在我们的例子中,这就是提到的“支持”)。绝对一切都有需求,包括。以及无法使用的软件。这种需求如何形成以及由谁推动是另一个话题。

因此,在 Facebook 有传言称其服务器上部署了 Btrfs 后,我不会急于下任何结论。此外,出于上述原因,我建议仔细保密这些服务器的地址。

为什么最近要花这么多精力来清理 XFS 代码?毕竟,最初这是一个第三方文件系统,并且 ext4 已经稳定了很长时间,并且与之前同样稳定的版本具有连续性。红帽对 XFS 有什么兴趣?积极开发两个用途相似的文件系统(ext4 和 XFS)是否有意义?

我不记得是什么动机了。该倡议很可能来自红帽客户。我记得进行过这样的研究:在上游的一些文件系统上,在新一代的高端驱动器上创建了大量对象。根据结果​​,XFS 的表现优于 ext4。因此他们开始将其宣传为最有前途的。无论如何,我不会在这里寻找任何耸人听闻的东西。

对我来说,就像他们用肥皂代替了锥子。开发 ext4 和 XFS 没有任何意义。既可以并行也可以任意选择。这不会有什么好处。虽然,在自然界中经常存在有很大的增长潜力,但没有增长空间的情况。在这种情况下,各种怪异丑陋的新生长物出现了,每个人都将矛头指向它们(“哦,看,你这辈子看不到的东西!”)。

您认为随着 ext4、F2FS(更不用说 Btrfs 中的 RAID)中加密功能的出现,层违规问题已经得到解决(从负面意义上来说)吗?

一般来说,任何级别的引入以及关于其不违规的决定通常是一个政策问题,我不承诺在这里评论任何内容。任何人都对层违规的客观方面不太感兴趣,但我们可以使用“从上面”违规的例子来考虑其中的一些,即在 FS 中实现块层上已经存在的功能。这种“违规”是合理的,只有极少数例外。对于每个这样的情况,您必须首先证明两件事:确实需要它,并且这样做不会损害系统的设计。

例如,镜像传统上是块层的活动,但在文件系统级别实现是有意义的。由于不同的原因。例如,磁盘驱动器上会发生“静默”数据损坏(位腐烂)。这是当设备正常工作时,但由于遥远类星体等发射的硬伽马量子的影响,块数据意外损坏。最糟糕的是,如果这个块最终是一个 FS 系统块(超级块、位图块、存储树节点等),因为这肯定会导致内核恐慌。

请注意,块层(所谓的 RAID 1)提供的镜像不会让您避免这个问题。好吧,真的:有人应该检查校验和并读取副本以防失败?此外,不仅镜像所有内容,而且仅镜像元数据也是有意义的。一些重要数据(例如关键应用程序的可执行文件)可以存储为元数据。在这种情况下,他们得到同样的安全保证。将剩余数据的保护委托给其他子系统(甚至可能是用户应用程序)是有意义的 - 我们已经为此提供了所有必要的条件。

这种“经济”的镜像有存在的权利,并且它们只能在文件系统级别进行有效组织。否则,分层违规会为了一些微观的好处而用重复的代码使子系统变得混乱。一个显着的例子是使用 FS 实施 RAID-5。此类解决方案(在文件系统中拥有自己的 RAID/LVM)在架构方面杀死了后者。这里还应该指出的是,分层违规行为是由各种营销骗子“投放”的。在没有任何想法的情况下,将长期在相邻级别实现的功能添加到子系统中,这被视为一个非常有用的新功能并被积极推动。

Reiser4 被指控“自下而上”违反了这些标准。基于文件系统不像所有其他文件系统那样是整体式的,而是模块化的这一事实,做出了一个未经证实的假设,即它执行上面级别 (VFS) 应该执行的操作。

是否可以谈论 ReiserFS v3.6 和 JFS 等产品的消亡?最近,他们的核心几乎没有受到关注。它们已经过时了吗?

这里我们需要定义一个软件产品的消亡意味着什么。一方面,它们被成功使用(毕竟,这就是它们被创建的目的),这意味着它们还活着。另一方面,我不能代表JFS(我了解不多),但ReiserFS(v3)很难适应新趋势(经过实践检验)。这意味着未来开发者关注的不是它,而是那些更容易适配的。从这一面来看,唉,从建筑角度来看,它已经死了。我根本不会操纵“道德过时”的概念。例如,它很适用于衣柜,但不适用于软件产品。某事物有一个自卑和优越的概念。我绝对可以说,ReserFS v3 现在在所有方面都不如 Reiser4,但在某些类型的工作负载中,它优于所有其他上游 FS。

您了解 FS Tux3 和 HAMMER/HAMMER2 (FS for DragonFly BSD) 的开发吗?

是的,我们知道。在Tux3中我曾经对他们的快照技术(所谓的“版本指针”)感兴趣,但在Reiser4中我们很可能会走不同的路线。我长期以来一直在考虑支持快照,但尚未决定如何为简单的 Reiser4 卷实现它们。事实上,Ohad Rodeh 提出的新型“惰性”引用计数器技术仅适用于 B 树。我们没有。对于Reiesr4中使用的那些数据结构,没有定义“惰性”计数器——要引入它们,需要解决某些算法问题,而目前还没有人解决这一问题。

据HAMMER报道:我读了作者的一篇文章。没兴趣。再次,B 树。这种数据结构已经完全过时了。我们在上个世纪就放弃了它。

您如何评估对 CephFS/GlusterFS 等网络集群 FS 不断增长的需求?这种需求是否意味着开发者的优先重点转向网络FS而对本地FS的关注不够?

是的,优先事项已经发生了这种转变。本地文件系统的发展已经停滞。唉,现在要做一些对本地销量有意义的事情相当困难,并不是每个人都能做到。没有人愿意投资于他们的发展。这与要求商业组织为数学研究分配资金差不多——他们会毫无热情地问你如何通过一个新定理赚钱。现在,本地 FS 神奇地“开箱即用”并且“应该始终有效”,如果它不起作用,则会引起未解决的抱怨,例如:“是的,他们在想什么!”

因此,尽管在该领域仍有大量工作要做,但对当地金融服务缺乏关注。是的,每个人都转向了分布式存储,它是建立在现有本地文件系统的基础上的。现在很时尚。 “大数据”这个词让许多人肾上腺素激增,将其与会议、研讨会、高薪等联系在一起。

在内核空间而不是用户空间实现网络文件系统原则上有多合理?

这是一个非常合理的方法,但尚未在任何地方实施。总的来说,网络文件系统应该在什么空间实现的问题是一把“双刃剑”。好吧,让我们看一个例子。客户端在远程机器上记录数据。它们以脏页的形式落入她的页面缓存中。这是内核空间中“瘦网关”网络文件系统的工作。然后操作系统迟早会要求您将这些页面写入磁盘以释放它们。然后IO转发(发送)网络FS模块就发挥作用了。它决定这些页面将转到哪台服务器机器(服务器节点)。

然后网络堆栈接管(并且,正如我们所知,它是在内核空间中实现的)。接下来,服务器节点接收带有数据或元数据的数据包,并指示后端存储模块(即在内核空间中运行的本地文件系统)记录所有这些内容。因此,我们将问题简化为“发送”和“接收”模块应该在哪里工作。如果这些模块中的任何一个在用户空间中运行,这将不可避免地导致上下文切换(由于需要使用内核服务)。此类开关的数量取决于实现细节。

如果这样的交换机很多,那么存储吞吐量(I/O性能)就会下降。如果您的后端存储由慢速磁盘组成,那么您不会注意到显着的下降。但如果您有快速磁盘(SSD、NVRAM 等),那么上下文切换已经成为“瓶颈”,并且通过节省上下文切换,可以显着提高性能。省钱的标准方法是将模块移至内核空间。例如,我们发现将 9p 服务器从 QEMU 移至主机上的内核可使 VirtFS 性能提高三倍。

这当然不是网络FS,但它充分体现了事物的本质。这种优化的缺点是可移植性问题。对于某些人来说,后者可能至关重要。例如,GlusterFS 内核中根本没有模块。因此,它现在可以在许多平台上运行,包括 NetBSD。

本地FS可以借鉴网络FS的哪些概念,反之亦然?

如今,网络FS通常比本地FS有附加组件,所以我不太明白如何从后者借用一些东西。好吧,事实上,让我们考虑一家有 4 名员工的公司,每个人都做自己的事情:一个分发,另一个发送,第三个接收,第四个存储。而这个问题,即公司可以从存储它的员工那里借什么,听起来有点不正确(它已经拥有了很长一段时间可以从他那里借的东西)。

但本地FS有很多值得网络FS学习的地方。首先,您应该向他们学习如何在高层聚合逻辑卷。现在所谓的“高级”本地文件系统专门使用从 LVM 借用的“虚拟设备”技术(与 ZFS 中首次实现的相同的传染性分层违规)来聚合逻辑卷。换句话说,虚拟地址(块号)到实际地址的转换发生在低级别(即,在文件系统发出 I/O 请求之后)。

请注意,向布置在块层上的逻辑卷(不是镜像)添加和删除设备会导致此类“功能”的供应商对此保持沉默。我说的是真实设备上的碎片,它可以达到可怕的值,而在虚拟设备上一切都很好。然而,很少有人对虚拟设备感兴趣:每个人都对真实设备上发生的事情感兴趣。但类似 ZFS 的 FS(以及与 LVM 结合的任何 FS)仅适用于虚拟磁盘设备(从空闲磁盘设备中分配虚拟磁盘地址,对这些虚拟设备进行碎片整理等)。他们不知道真实设备上发生了什么!

现在想象一下,虚拟设备上的碎片为零(也就是说,那里只有一个巨大的盘区),您将一个磁盘添加到逻辑卷中,然后从逻辑卷中删除另一个随机磁盘,然后重新平衡。还有很多次。不难想象,在虚拟设备上你仍然可以拥有同样程度的生活,但在真实设备上你不会看到任何好的东西。

最糟糕的是,你甚至无法纠正这种情况!您在这里唯一能做的就是要求文件系统对虚拟设备进行碎片整理。但她会告诉你,那里的一切都很棒——只有一个范围,碎片为零,而且再好不过了!因此,按块级别排列的逻辑卷不适合重复添加/删除设备。一种好的方式是,您只需在块级别组装一次逻辑卷,将其交给文件系统,然后无需对其执行任何其他操作。

此外,独立FS+LVM子系统的组合不允许考虑聚合逻辑卷的驱动器的不同性质。事实上,假设您已经从 HDD 和固态设备组装了一个逻辑卷。但前者需要碎片整理,而后者则不需要。对于后者,您需要发出丢弃请求,但对于前者,则不需要,等等。然而,在这种组合中,很难证明这种选择性。

请注意,在文件系统上创建自己的 LVM 后,情况并没有好转。此外,通过这样做,你实际上就结束了未来不断改进它的前景。这真是太糟了。不同类型的驱动器可以存在于同一台机器上。如果文件系统不区分它们,那么谁会区分呢?

另一个问题就在于所谓的等待。 “Write-Anywhere”文件系统(如果您在挂载期间指定了适当的事务模型,这还包括 Reiser4)。此类文件系统必须提供前所未有的强大碎片整理工具。低级卷管理器在这里无济于事,只会造成阻碍。事实上,使用这样的管理器,您的 FS 将仅存储一个设备(虚拟设备)的空闲块映射。因此,您只能对虚拟设备进行碎片整理。这意味着您的碎片整理程序将在巨大的单个虚拟地址空间上工作很长一段时间。

如果有很多用户进行随机覆盖,那么这种碎片整理程序的有用效果将减少到零。你的系统将不可避免地开始变慢,你只能在令人失望的诊断“损坏的设计”面前束手无策。在同一地址空间上运行的多个碎片整理程序只会相互干扰。如果您为每个真实设备维护自己的空闲块地图,那就完全是另一回事了。这将有效地并行化碎片整理过程。

但这只有在您拥有高级逻辑卷管理器的情况下才能完成。具有此类管理器的本地文件系统以前并不存在(至少我不知道)。只有网络文件系统(例如 GlusterFS)才有这样的管理器。另一个非常重要的示例是卷完整性检查 (fsck) 实用程序。如果您为每个子卷存储自己独立的空闲块映射,则检查逻辑卷的过程可以有效地并行化。换句话说,具有高级管理器的逻辑卷可以更好地扩展。

此外,使用低级别的卷管理器,您将无法组织完整的快照。使用 LVM 和类似 ZFS 的文件系统,您只能拍摄本地快照,而不能拍摄全局快照。本地快照允许您立即回滚仅常规文件操作。并且没有人会回滚逻辑卷操作(添加/删除设备)。让我们看一个例子。在某个时间点,当您拥有包含 100 个文件的两个设备 A 和 B 的逻辑卷时,您会拍摄系统 S 的快照,然后创建另外 XNUMX 个文件。

之后,将设备 C 添加到卷中,最后将系统回滚到快照 S。 问题:回滚到 S 后,您的逻辑卷包含多少个文件和设备?正如您可能已经猜到的那样,将有 100 个文件,但将有 3 个设备 - 这些是相同的设备 A、B 和 C,尽管在创建快照时系统中只有两个设备(A 和 B) )。添加设备 C 操作没有回滚,如果您现在从计算机中删除设备 C,它会损坏您的数据,因此在删除之前您需要首先执行昂贵的操作以从重新平衡逻辑卷中删除该设备,这会将所有数据从设备 C 分散到设备 A 和 B。但是,如果您的 FS 支持全局快照,则不需要进行此类重新平衡,并且在即时回滚到 S 后,您可以安全地从计算机中删除设备 C。

因此,全局快照很好,因为它们可以让您避免从具有大量数据的逻辑卷(到逻辑卷)中昂贵地删除(添加)设备(当然,如果您记得对系统进行“快照”)在正确的时间)。让我提醒您,创建快照并将文件系统回滚到快照是即时操作。可能会出现这样的问题:如何才能立即回滚逻辑卷上花了三天时间的操作?但这是可能的!前提是您的文件系统设计正确。我三年前就提出了这种“3D快照”的想法,去年我为这项技术申请了专利。

本地文件系统应该向网络文件系统学习的下一件事是将元数据存储在单独的设备上,就像网络文件系统将元数据存储在单独的机器(所谓的元数据服务器)上一样。有些应用程序主要使用元数据,通过将元数据放置在昂贵的高性能存储设备上可以大大加速这些应用程序的速度。使用 FS+LVM 组合,您将无法展示这种选择性:LVM 不知道您传递给它的块上有什么(那里的数据或元数据)。

与 FS+LVM 组合相比,在 FS 中实现您自己的低级 LVM 不会获得太多好处,但您可以做的很好的事情就是使 FS 变得混乱,以便以后无法使用其代码。 ZFS 和 Btrfs 等虚拟设备的出现,都是分层违规如何从架构角度杀死系统的明显例子。那么,为什么我会这样呢?而且,无需在文件系统中安装您自己的低级LVM。相反,您需要将设备聚合到较高级别的逻辑卷中,就像某些网络文件系统对不同机器(存储节点)所做的那样。确实,由于使用了糟糕的算法,他们的做法令人厌恶。

绝对糟糕的算法的例子是 GlusterFS 文件系统中的 DHT 转换器和 Ceph 文件系统中所谓的 CRUSH 映射。我所看到的算法在简单性和良好的可扩展性方面都没有令我满意。所以我必须记住代数并自己发明一切。 2015 年,在尝试通过哈希函数进行捆绑时,我想出了一些适合我的东西并申请了专利。现在我可以说,将这一切付诸实践的尝试是成功的。我认为新方法在可扩展性方面没有任何问题。

是的,每个子卷都需要一个单独的结构,例如内存中的超级块。这很可怕吗?一般来说,我不知道谁会“煮沸海洋”并在一台本地计算机上创建数十万或更多设备的逻辑卷。如果有人可以向我解释这一点,我将非常感激。与此同时,对我来说,这是营销废话。

内核块设备子系统的变化(例如blk-mq的出现)如何影响FS实现的要求?

没有任何影响。我不知道块层上会发生什么,从而需要设计一个新的文件系统。这些子系统的交互接口很差。从驱动程序方面来看,FS应该只受到新型驱动器出现的影响,首先调整块层,然后是FS(对于reiser4,这意味着新插件的出现)。

新型介质(例如 SMR 或无处不在的 SSD)的出现是否意味着文件系统设计面临全新的挑战?

是的。而这些都是FS发展的正常诱因。挑战可能会有所不同并且完全出乎意料。例如,我听说过一些驱动器,其中 I/O 操作的速度高度依赖于数据块的大小及其偏移量。在Linux中,FS块的大小不能超过页面大小,这样的驱动器默认情况下不会显示其全部功能。但是,如果您的文件系统设计正确,那么就有机会从中获得更多好处。

除了您之外,目前还有多少人在使用 Reiser4 代码?

比我想要的要少,但我也没有遇到资源严重短缺的情况。我对 Reiser4 的发展速度非常满意。我不会“赶马”——这不是正确的区域。在这里,“如果你开车更安静,你就会继续前进!”现代文件系统是最复杂的内核子系统,错误的设计决策可能会毁掉人类随后几年的工作。

通过提供志愿者来实施某件事,我总是保证这些努力一定会带来正确的结果,这可能是迫切需要的。如您所知,不可能同时有很多这样的保证。同时,我也无法忍受那些无耻地宣传明显无法使用的软件的“功能”的“人物”,欺骗数百名用户和开发者,同时在内核峰会上坐着微笑。

有公司表示愿意支持Reiser4的开发吗?

是的,有这样的建议,包括。并来自主要供应商。但为此我不得不搬到另一个国家。可惜我已经不再是30岁了,我不能在哨声一响就挣脱而去。

Reiser4 目前缺少哪些功能?

简单卷没有“调整大小”功能,类似于 ReiserFS(v3) 中的功能。此外,使用 DIRECT_IO 标志的文件操作也不会造成损害。接下来,我希望能够将一个卷分成“语义子卷”,这些子卷没有固定的大小,并且可以作为独立卷安装。这些问题对于想要尝试“真正的事情”的初学者来说是有好处的。

最后,我希望拥有具有简单实现和管理的网络逻辑卷(现代算法已经允许这样做)。但Reiser4绝对不会有RAID-Z、擦除、可用空间缓存、128位变量和其他在某些文件系统开发人员缺乏创意的背景下出现的营销废话。

所有可能需要的东西都可以通过插件来实现吗?

如果我们只谈论实现它们的接口和插件(模块),那么就不是一切。但是,如果您还在这些接口上引入关系,那么除其他外,您将拥有更高层次多态性的概念,您已经可以掌握这些概念了。想象一下,假设您冻结了一个面向对象的运行时系统,更改了指令指针的值以指向实现相同 X 接口的另一个插件,然后解冻系统以使其继续执行。

如果最终用户没有注意到这样的“替换”,那么我们就说系统在 X 接口中具有零阶多态性(或者系统在 X 接口中是异构的,这是同一回事)。如果现在您不仅拥有一组接口,而且还拥有它们之间的关系(接口图),那么您可以引入更高阶的多态性,这将表征系统在任何接口的“邻域”中已经存在的异构性。我很早以前就介绍过这样的分类,但不幸的是,它从未发生过。

因此,借助插件和此类更高的多态性,您可以描述任何已知的功能,以及“预测”那些从未被提及的功能。我还没能严格证明这一点,但我也不知道有反例。总的来说,这个问题让我想起了菲利克斯·克莱因的“埃尔兰根计划”。有一次,他试图将所有几何学表示为代数(特别是群论)的一个分支。

现在主要问题是——Reiser4 升级到主核心的进展如何?您在上次采访中谈到过有关此文件系统架构的出版物吗?从您的角度来看,这个问题有多重要?

总的来说,我们已经要求纳入主分支三年了。 Reiser 在提出拉取请求的公共线程中的最后评论仍未得到答复。因此,所有进一步的问题都不适合我们。我个人不明白为什么我们需要“合并”到特定的操作系统中。在 Linux 上,光线不会像楔子一样会聚。因此,有一个单独的存储库,其中有针对不同操作系统的多个分支端口。任何需要它的人都可以克隆相应的端口并用它做任何你想做的事(当然,在许可证范围内)。好吧,如果有人不需要它,那不是我的问题。至此,我建议考虑解决“升级到Linux主内核”的问题。

关于 FS 架构的出版物是相关的,但到目前为止,我只找到时间来研究我的新结果,我认为这是一个更高的优先级。另一件事是,我是一名数学家,数学领域的任何出版物都是定理及其证明的总结。在没有证据的情况下发表任何东西都是低品味的表现。如果我彻底证明或反驳任何关于FS架构的说法,那么结果将是一堆堆很难理解的东西。谁需要它?这可能就是为什么一切都继续保持原来的形式——源代码和注释。

过去几年 Reiser4 有哪些新变化?

期待已久的稳定终于实现了。最后出现的一个错误是导致目录“不可删除”的错误。困难在于,它仅在名称哈希冲突的背景下以及目录记录在树节点中的特定位置出现。但是,我仍然不推荐将 Reiser4 用于生产:为此,您需要与生产系统管理员进行积极交互。

我们终于实现了我们长期以来的想法——不同的交易模型。此前,Reiser4 仅运行一种硬编码的 Macdonald-Reiser 模型。这造成了设计问题。特别是,快照在这样的事务模型中是不可能的——它们将被称为“OVERWRITE SET”的原子组件损坏。 Reiser4目前支持三种事务模型。在其中之一(Write-Anywhere)中,原子组件 OVERWRITE SET 仅包括系统页面(磁盘位图的图像等),无法“拍照”(先有鸡还是先有蛋的问题)。

所以现在可以以最好的方式实现这些图片。在另一个事务模型中,所有修改的页面仅进入覆盖集(也就是说,它本质上是纯日记)。该模型适合那些抱怨 Reiser4 分区快速碎片化的人。现在,在此模型中,您的分区碎片化速度不会比 ReiserFS (v3) 快。所有三个现有模型(有一些保留)都保证操作的原子性,但是失去原子性并仅保留部分完整性的模型也可能有用。此类模型可用于所有类型的应用程序(数据库等),这些应用程序已经承担了其中一些功能。将这些模型添加到Reiser4中非常容易,但我没有这样做,因为没有人问我,而且我个人也不需要它。

元数据校验和出现了,我最近用“经济”镜像”(仍然不稳定的材料)补充了它们。如果任何块的校验和失败,Reiser4立即从副本设备读取相应的块。请注意,ZFS 和 Btrfs 无法执行此操作:设计不允许这样做。在那里,您必须运行一个名为“scrub”的特殊后台扫描过程,并等待它到达有问题的块。程序员形象地将此类事件称为“拐杖”。

最后,异构逻辑卷出现了,它提供了 ZFS、Btrfs、块层以及 FS+LVM 组合原则上无法提供的一切 - 并行扩展、O(1) 磁盘地址分配器、子卷之间的透明数据迁移。后者还具有用户界面。现在,您可以轻松地将最热的数据移动到卷上性能最高的驱动器。

此外,还可以将任何脏页紧急刷新到此类驱动器,从而显着加快经常调用 fsync(2) 的应用程序的速度。我注意到,称为 bcache 的块层功能根本不提供这种操作自由。新的逻辑卷是基于我的算法(有相应的专利)。该软件已经相当稳定,完全可以尝试、测量性能等。唯一的不便之处在于,目前您需要手动更新卷配置并将其存储在某处。

到目前为止,我已经能够实现我的想法 10%。然而,我已经成功地完成了我认为最困难的事情 - 将逻辑卷与执行 reiser4 中所有延迟操作的闪存过程连接起来。这一切仍然在实验性的“format41”分支中。

Reiser4 通过 xfstests 了吗?

至少在我准备最后一个版本时是这样。

原则上是否可以使用插件使Reiser4成为网络(集群)FS?

这是可能的,甚至是必要的!如果您基于正确设计的本地文件系统创建网络文件,结果将非常令人印象深刻!在现代网络文件系统中,我对使用任何本地文件系统实现的后端存储级别的存在不满意。这种级别的存在完全没有道理。网络FS必须直接与块层交互,而不是要求本地FS创建任何其他服务文件!

一般来说,将文件系统分为本地和网络是邪恶的。它源于三十年前使用的算法的不完善,并且尚未提出任何替代方案。这也是大量不必要的软件组件(各种服务等)出现的原因。一种好的方式是,每台机器上应该只安装一个内核模块形式的 FS 和一组用户实用程序 - 一个集群节点。这个FS既是本地的又是网络的。仅此而已!

如果 Linux 上的 Reiser4 没有任何效果,我想为 FreeBSD 提供一个 FS(引用之前的采访:“...FreeBSD...具有学术根源...这意味着我们很有可能将找到与开发人员的共同语言”)?

因此,正如我们刚刚发现的那样,Linux 上的一切都已经完美地进行了:有一个单独的工作 Reiser4 端口,以我们存储库的 master 分支的形式。我没有忘记 FreeBSD!提供!我已经准备好与那些熟悉 FreeBSD 内部结构的人密切合作。顺便说一句:我真正喜欢他们社区的一点是,那里的决定是由更新的独立专家委员会做出的,这与政府欺骗一个常任理事国无关。

您如何评价当今的 Linux 用户社区?它变得更加“流行”了吗?

鉴于我的工作性质,我很难评估这一点。大多数用户都会向我提出错误报告并请求修复该部分。用户就是用户。有些人更精明,有些人则不那么精明。每个人都受到同样的待遇。好吧,如果用户忽略我的指令,那么请原谅:我也会输入忽略命令。

是否可以预测未来五到十年文件系统的发展?您认为 FS 开发人员可能面临的主要挑战是什么?

是的,做出这样的预测并不困难。上游已经很久没有开发文件系统了。仅创建这样的外观。本地文件系统的开发人员遇到了与不良设计相关的问题。这里需要注意一下。我不认为代码的所谓“存储”、“舔”和移植就是开发和开发。我不会将称为“Btrfs”的误解归类为一种发展,原因我已经解释过了。

每个补丁只会让问题变得更糟。出色地。总有各种各样的“传道者”,对他们来说“一切都有效”。基本上,这些都是小学生和逃课的学生。想象一下:这对他有效,但教授却无效。这是多么令人肾上腺素激增啊!在我看来,最大的危害是那些“工匠”们热衷于将Btrfs的美妙特性“拧”到systemd、docker等各种层上。 - 这已经类似于转移。

现在让我们尝试对五到十年进行预测。我已经简要列出了我们将在 Reiser4 中做什么。来自上游的本地 FS 开发人员面临的主要挑战将是(是的,它已经成为)无法获得一份体面的薪水工作。在数据存储领域没有任何想法的情况下,他们会继续尝试修补这些不幸的VFS、XFS和ext4。在这种背景下,VFS 的情况显得特别滑稽,让人想起一家没有厨师、也不期望有厨师的餐厅的疯狂现代化。

现在,VFS 代码无任何条件地同时锁定多个内存页并邀请底层 FS 对它们进行操作。引入这一点是为了提高 Ext4 在删除操作上的性能,但很容易理解,这种并发锁定与高级事务模型完全不兼容。也就是说,您将无法简单地在内核中添加对某些智能文件系统的支持。我不知道Linux其他领域的情况如何,但就文件系统而言,这里的任何开发都不太可能与Torvalds在实践中奉行的政策相兼容(学术项目被踢出,骗子们不知道什么是B树,发放了无尽的信任信用)。因此,我们设定了缓慢衰退的路线。当然,他们会极力冒充“发展”。

此外,文件系统的“托管人”意识到仅靠“存储”赚不到多少钱,因此会尝试从事更有利可图的业务。通常,这些是分布式文件系统和虚拟化。也许他们会将流行的 ZFS 移植到它还不存在的其他地方。但它和所有来自上游的FS一样,就像一棵新年树:如果你可以在上面挂一些其他小东西,那么你就无法再深入了。我承认基于 ZFS 构建一个严肃的企业系统是可能的,但既然我们现在正在讨论未来,我只能悲伤地说 ZFS 在这方面是无望的:通过他们的虚拟设备,这些家伙已经切断了氧气为了自己和子孙后代的进一步发展。 ZFS 已成为过去。而ext4和XFS连前天都没有。

值得单独一提的是“下一代Linux文件系统”这个耸人听闻的概念。可以说,这是一个完全政治和营销的项目,旨在为 Linux 中“将文件系统的未来固定在特定字符后面”提供机会。事实上,Linux 曾经“只是为了好玩”。但现在它主要是一个赚钱机器。它们是在一切可能的情况下制作的。例如,创建一个好的软件产品是非常困难的,但聪明的“开发者”早就意识到根本不需要紧张:你可以成功地销售在各种公共场合宣布和推广的不存在的软件事件 - 最主要的是演示幻灯片应该包含更多“功能”。

文件系统非常适合此目的,因为您可以放心地在十年内就结果讨价还价。好吧,如果后来有人抱怨缺少这个结果,那么他根本就不了解文件系统!这让人想起金融金字塔:最顶端的是引发这场混乱的冒险家,以及少数“幸运”的人:他们“撤回了股息”,即获得发展资金、获得高薪经理工作、在会议上“露面”等等。

接下来是那些“不幸”的人:他们会计算损失,处理将无法使用的软件产品部署到生产中的后果,“等等。还有很多。嗯,在金字塔的底部有大量开发人员“锯切”无用的代码。他们是最大的输家,因为浪费的时间无法挽回。这样的金字塔对托瓦尔兹和他的同伙来说极其有利。这些金字塔越多,对他们来说就越好。为了供给这样的金字塔,任何东西都可以被带入核心。当然,在公开场合他们的说法恰恰相反。但我不是通过言语而是通过行动来判断。

因此,“Linux 文件系统的未来”是另一个备受推崇但几乎不可用的软件。在 Btrfs 之后,这样一个“未来”的位置大概率会被 Bcachefs 取代,这是用文件系统跨越 Linux 块层的又一次尝试(坏榜样是会传染的)。典型的是:存在与 Btrfs 相同的问题。我怀疑了很长一段时间,然后不知怎的,我忍不住查看了代码——这是真的!

Bcachefs 和 Btrfs 的作者在创建他们的文件系统时,积极使用了其他人的资源,但对其了解甚少。这种情况很容易让人想起孩子们的游戏“破手机”。我可以大致想象这段代码将如何包含在内核中。事实上,没有人会看到“耙子”(稍后大家都会踩到它们)。在对代码风格、对不存在的违规行为的指控等进行无数次争论之后,将得出关于作者的“忠诚度”、他与其他开发人员“互动”的程度以及这一切如何成功的结论。然后卖给企业。

最终结果不会引起任何人的兴趣。二十年前,也许我会感兴趣,但现在提出的问题不同了:是否有可能推广这一点,以便在未来十年内让某些人就业。而且,唉,人们并不习惯对最终结果感到好奇。

一般来说,我强烈建议不要从头开始重新发明文件系统。因为即使是重大的金融投资也不足以在十年内获得有竞争力的东西。当然,我说的是严肃的项目,而不是那些打算“推入”内核的项目。所以,更有效的表达自己的方式就是加入真正的发展,就像我们一样。当然,这并不容易做到——但任何高级项目都是如此。

首先,你需要独立解决我将提出的问题。之后,我确信你的意图是认真的,我将开始提供帮助。传统上,我们只使用我们自己的开发成果。压缩算法和一些哈希函数除外。我们不会派开发人员去参加会议,然后我们不会像大多数初创公司那样坐下来结合其他人的想法(“也许会发生什么”)。

我们自己开发所有算法。我目前对数据存储科学的代数和组合方面感兴趣。特别是有限域、渐进、不等式证明。普通程序员也有工作,但我必须立即警告您:所有“查看另一个 FS 并执行相同操作”的建议都将被忽略。旨在通过 VFS 与 Linux 更紧密集成的补丁也将发布到那里。

所以,我们没有耙子,但我们了解我们需要向何处移动,并且我们相信这个方向是正确的。这种理解并不是以来自天上的吗哪的形式出现的。让我提醒您,我们拥有 29 年的开发经验,两个从头开始编写的文件系统。以及相同数量的数据恢复实用程序。这很多!

来源: opennet.ru

添加评论