mycat 实施指南
在本文中,我们将了解XFS,这是SGI的免费的Linux 64位高性能文件系统。 首先,我将解释XFS与ext3和ReiserFS的比较,并描述XFS在内部使用的许多技术,然后在下一篇文章中 ,我还将指导您完成在自己的系统上设置XFS的过程。作为XFS调优技巧和有用的XFS功能(如ACL(访问控制列表)和扩展属性支持)的封面。
XFS简介
XFS最初由Silicon Graphics,Inc.在90年代初期开发。 当时,SGI发现他们现有的文件系统(EFS)很快变得不适合应对当今的极端计算挑战。 为了解决这个问题,SGI决定设计一个全新的高性能64位文件系统,而不是尝试调整EFS以执行从未设计过的事情。 因此,XFS诞生了,并在1994年IRIX 5.3发行时供计算机公众使用。直到今天,它仍被用作SGI所有基于IRIX的产品(从工作站到超级计算机)的基础文件系统。 现在,XFS也可用于Linux。 XFS for Linux的到来令人兴奋,主要是因为它为Linux社区提供了一个健壮,完善,功能非常丰富的文件系统,该文件系统能够扩展以满足最严峻的存储挑战。
XFS,ReiserFS和ext3性能
到目前为止,选择合适的下一代Linux文件系统非常简单。 那些寻求原始性能的人通常倾向于ReiserFS,而对细致的数据完整性功能更感兴趣的人则首选ext3。 但是,随着Linux版XFS的发布,事情突然变得更加混乱。 特别是,现在还不清楚ReiserFS仍然是下一代性能领导者。
最近,我进行了一系列测试,试图弄清楚XFS,ReiserFS和ext3在原始性能方面的比较。 在分享结果之前,必须了解我的结果仅强调在单处理器系统上轻载时的一般文件系统性能趋势,这一点很重要,而不是绝对地衡量某个文件系统是否比另一个更好。 尽管如此,我的结果应该有助于您了解哪种文件系统最适合特定任务。 同样,我的结果不应被认为是结论性的; 最好的测试始终是在每个文件系统下尝试特定的应用程序,以查看其性能。
结果
在测试中,我发现XFS通常非常快。 XFS始终赢得了涉及操纵大文件的所有测试,这是可以预料的,因为经过多年的精心设计和调整,XFS才能做到这一点。 我还发现XFS有一个独特的性能怪癖:它不会很快删除文件;它不会很快删除文件。 ReiserFS和ext3在这方面很容易击败它。 根据SGI文件系统软件的首席工程师Steve Lord所说,刚刚编写了一个补丁程序来解决此问题,并且应该很快就可以使用。
除此之外,XFS的性能非常接近ReiserFS,并且通常超过ext3。 关于XFS的最好的事情之一是,像ReiserFS一样,它不会产生很多不必要的磁盘活动。 XFS尝试在内存中缓存尽可能多的数据,并且通常仅在内存压力表明需要这样做时才将内容写到磁盘。 当将数据刷新到磁盘时,其他IO操作似乎基本不受影响。 相反,当ext3(默认为“数据=有序”模式)将数据刷新到驱动器时,它可能导致大量额外的查找,并且取决于IO负载,甚至会导致一些不必要的磁盘抖动。
我的性能和调优测试主要集中在从RAM磁盘提取未压缩的内核源压缩文件到测试文件系统,然后将新的源树递归复制到同一文件系统上的新目录。 XFS很好地完成了这些任务,尽管最初,XFS的性能比ReiserFS稍差。 但是,在为测试XFS文件系统调整了mkfs.xfs
和mount
选项之后,在处理中等大小的文件(例如在内核源代码树中找到的文件)时,我能够使XFS的性能比ReiserFS稍好。 也就是说,除了删除; 至少到目前为止,ReiserFS和ext3都比XFS更快地删除文件。
表现摘要
希望我对您可以对XFS期望的性能有一个大致的了解; 我的结果表明,如果需要处理大文件,XFS是最好的文件系统。 对于中小型文件,如果使用某些性能增强选项创建和挂载XFS文件系统,则XFS可能具有竞争力,有时甚至比ReiserFS更快。 “ data = journal”模式下的Ext3提供了良好的性能,但是由于ext3从以前的测试中将数据刷新到磁盘的方式明显不规则,因此很难获得一致的性能数字,这将导致某些磁盘崩溃。
XFS设计
在纸“的XFS文件系统可扩展性”(见相关主题在本文后面)在USENIX '96功能,SGI的工程师解释说,XFS的设计采用了一个主要的想法:“大处着眼”。 实际上,XFS旨在消除传统文件系统中的限制。 现在,让我们看一下XFS背后的一些有趣的设计功能。
介绍分配组
创建XFS文件系统时,基础块设备将分为八个或更多相等大小的线性区域。 您可以将它们视为“块”或“线性范围”,但是在XFS术语中,每个区域都称为“分配组”。 分配组是唯一的,因为每个分配组管理自己的inode和可用空间,实际上将它们变成了一种子文件系统,该子文件系统透明地存在于XFS文件系统中。
分配组和可伸缩性
那么,为什么XFS确实具有分配组? 首先,XFS使用分配组,以便它可以有效地处理并行IO。 由于每个分配组实际上是其自己的独立实体,因此内核可以同时与多个分配组进行交互。 如果没有分配组,则XFS文件系统代码可能成为性能瓶颈,迫使IO繁忙的进程“排队”进行inode修改或执行其他类型的元数据密集型操作。 多亏分配组,即使其中许多线程和进程在同一文件系统上执行非平凡的IO,XFS代码也将允许多个线程和进程继续并行运行。 因此,将XFS与某些高端硬件匹配,您将获得高端结果,而不是文件系统瓶颈。 分配组还有助于优化多处理器系统上的并行IO性能,因为可以同时“传输”多个元数据更新。
到处都是B +树
在内部,分配组使用有效的B +树来跟踪重要数据,例如自由空间的范围(也称为“范围”)以及inode。 实际上,每个分配组都有两个 B +树用于跟踪可用空间; 一个存储按大小排序的可用空间范围,另一棵树按其在块设备上的起始物理位置排序的区域。 快速找到可用空间区域的能力对于最大化写入性能至关重要,这是XFS擅长的。
对于inode的管理,XFS也非常有效。 每个分配组按需要分配64个一组的inode。分配组通过使用B +树记录自己的inode,B +树记录可以在磁盘上找到每个特定inode编号的位置。 您会发现XFS由于其出色的性能和巨大的可伸缩性而尽可能多地使用B +树。
日志记录
当然,XFS是日记文件系统,可以在意外重启后进行快速恢复。 像ReiserFS一样,XFS使用逻辑日志。 也就是说,它不记录ext3之类的文字文件系统块,而是使用高效的磁盘格式记录元数据更改。 对于XFS,逻辑日志记录非常适合; 在高端硬件上,日志通常是整个文件系统中最有争议的资源。 通过使用节省空间的逻辑日志,可以将日志的争用最小化。 此外,XFS允许将日记存储在另一个块设备上,例如另一个磁盘上的分区。 此功能很好地用于进一步提高XFS文件系统性能。
与ReiserFS一样,XFS仅记录元数据,并且不采取任何特殊的预防措施来确保在写入元数据之前将数据写入磁盘。 这意味着使用XFS(就像ReiserFS一样),如果意外重新启动,则最近修改的数据可能会丢失。 但是,XFS日志的几个属性使此问题不及ReiserFS常见。
使用ReiserFS,意外重启可能导致最近修改的文件包含先前删除的文件的一部分。 除了明显的数据丢失,从理论上讲,这也可能构成安全威胁。 相反,XFS确保在重播XFS日志时在重新启动时将所有未写入的数据块清零 。 因此,丢失的块将填充为空字节,从而消除了安全漏洞-一种更好的方法。
现在,数据丢失问题本身如何处理? 通常,由于XFS通常比ReiserFS更频繁地将挂起的元数据更新写入磁盘,特别是在磁盘活动频繁的时期,因此使用XFS可以最大程度地减少此问题。 因此,在锁定的情况下,与ReiserFS相比,您丢失的最新元数据修改通常会少一些。 当然,这不能直接解决不及时写入数据块的问题,但是更频繁地写入元数据确实会鼓励更频繁地写入数据。
延迟分配
我们将通过研究XFS独有的延迟分配来完成XFS的技术概述。 您可能知道,术语分配是指查找可用空间区域以用于存储新数据的过程。
XFS通过将分配分为两个步骤来处理分配。 首先,当XFS接收要写入的新数据时,它将在RAM中记录待处理的事务,并仅在基础文件系统上保留适当数量的空间。 但是,尽管XFS为新数据保留了空间, 但它尚未决定将使用哪些文件系统块来存储数据 ,至少目前还没有。 XFS拖延了这一决定,将这一决定推迟到了最后可能的时刻,就在此数据实际写入磁盘之前。
通过延迟分配,XFS获得了许多优化写性能的机会。 当需要将数据写入磁盘时,XFS现在可以以优化文件系统性能的方式智能分配可用空间。 特别是,如果将一堆新数据附加到单个文件中,则XFS可以在磁盘上分配单个连续区域来存储此数据。 如果XFS没有延迟其分配决定,它可能在不知不觉中将数据写入多个不连续的块中,从而大大降低了写入性能。 但是,由于XFS延迟了其分配决定,因此它能够一口气写入数据,从而提高了写入性能并减少了整个文件系统的碎片。
延迟分配还具有另一个性能优势。 在创建许多短暂的临时文件的情况下,XFS可能根本不需要将这些文件写入磁盘。 由于从未分配任何块,因此无需取消分配任何块,甚至根本不会触及底层文件系统元数据。
结论
我希望您喜欢阅读XFS的性能和技术特性,XFS是Linux强大的下一代文件系统之一。 当我向您展示如何在系统上启动和运行XFS时,请加入我的下一篇文章。 在我的下一篇文章中,我们还将介绍XFS的一些高级功能,例如ACL和扩展属性。 那一会儿见!
翻译自: https://www.ibm.com/developerworks/opensource/library/l-fs9/index.html
mycat 实施指南