ZFS与RAID:八个Ironwolf磁盘,两个文件系统,一个赢家

2020-05-19 02:39:01

这已经有很长一段时间在制作测试结果的时间了。要真正了解计算机存储的基本原理,研究各种传统RAID(廉价磁盘冗余阵列)拓扑对性能的影响非常重要。了解ZFS是什么以及它是如何工作的也很重要。但在某种程度上,人们(特别是互联网上的计算机爱好者)想要数字。

首先,快速说明一下:这项测试自然是建立在这些基础之上的。当我们在这里探索ZFS拓扑时,我们将大量吸取经验教训。如果您还不完全了解池和vdevs之间的区别,或者asft和recordsize意味着什么,我们强烈建议您在潜入测试和结果之前重新查看这些解释。

尽管每个人都喜欢看到原始数据,但我们敦促大家额外关注这些数字之间的相互关系。我们的所有图表都将大小为2到8个磁盘的ZFS池拓扑的性能与单个磁盘的性能相关联。如果您更改磁盘的型号,您的原始数字将相应更改-但在大多数情况下,它们与单个磁盘性能的关系不会改变。

我们在本次测试中使用了2019夏季存储热棒中的八个空托架。它拥有大量的RAM和足够的CPU马力,可以毫不费力地完成这些存储测试。

Storage HotRod还配备了专用的LSI-9300-8i主机总线适配器(HBA),该适配器只用于测试中的磁盘。机箱的前四个托架上有我们自己的备份数据-但它们在这里的所有测试期间都处于空闲状态,并且连接到主板的SATA控制器,与我们的测试阵列完全隔离。

一如既往,我们使用FIO来执行所有的存储测试。我们在热棒上本地运行它们,并使用三种基本的随机访问测试类型:读、写和同步写。每个测试都使用4K和1M的块大小运行,我运行测试时使用的是单个进程和ioDeep=1,还有八个进程的ioDepth=8。

对于所有测试,我们都使用Linux 0.7.5上的ZFS,这可以在Ubuntu18.04LTS的主要存储库中找到。值得一提的是,Linux 0.7.5上的ZFS现在已经有两年的历史了--更新版本的OpenZFS有0.7.5中没有的特性和性能改进。

我们还是用0.7.5进行了测试-这让至少一位非常资深的OpenZFS开发人员很恼火-因为当我们运行测试时,18.04是最新的Ubuntu LTS,也是最新的稳定发行版之一。在本系列的下一篇文章中-关于ZFS调优-我们将在Linux 0.8.3上更新到全新的Ubuntu20.04LTS和更新的ZFS。

当我们测试mdadm和ext4时,我们并没有真正使用整个磁盘-我们在每个磁盘的头部创建了一个1TiB分区,并使用了这些1TiB分区。我们还必须调用晦涩难懂的参数-mkfs.ext4-E lazy_able_init=0,lazy_Journal_init=0-以避免ext4的预分配污染我们的结果。

使用这些相对较小的分区而不是整个磁盘是一种实际需要,因为ext4需要遍历整个创建的文件系统并分散预分配的元数据块。如果我们使用了全部磁盘,八磁盘RAID6拓扑上的可用空间将大约为65TiB-格式化将需要几个小时,每个测试的拓扑都需要类似的痛苦等待。

令人高兴的是,ZFS既不需要也不想预分配元数据块--它会在需要时动态创建元数据块。因此,我们完整地为ZFS提供了每个12TB的Ironwolf磁盘,我们不需要等待漫长的格式化过程-每个拓扑,即使是最大的拓扑,在创建后一两秒就可以使用了,不需要特殊的参数。

传统RAID阵列是位于文件系统和一组磁盘之间的简单抽象层。它将整个阵列呈现为虚拟磁盘设备,从文件系统的角度来看,该设备与实际的单个磁盘没有什么区别-即使它比最大的单个磁盘大得多。

ZFS是一种完全不同的东西,它包含的功能在传统的类Unix型系统中通常可能占据三个不同的层。它是一个逻辑卷管理器、一个RAID系统和一个文件系统。像这样合并传统层让许多高级管理人员义愤填膺,但这是有很好的理由的。

ZFS提供了绝对丰富的功能,强烈鼓励不熟悉这些功能的用户查看我们2014年对下一代文件系统的报道,以获得基本概述,以及我们最近的ZFS 101文章,以获得更全面的解释。

与上一篇文章一样,我们这里的性能度量单位是千兆字节(KiB)和兆字节(MIB)。千比字节是1,024字节,兆字节是1,024千比字节,依此类推-与千字节(1,000字节)和兆字节(1,000千字节)形成对比。

Kibibytes和它们的大兄弟一直是计算机存储的标准单位。在20世纪90年代之前,计算机专业人士只是将它们称为K和M--当他们拼写出它们时,会使用不准确的公制前缀。“但是,任何时候你的操作系统指的是GB、MB或KB--无论是在可用空间、网络速度还是RAM大小方面--它实际上指的是GiB、MIB和KiB。

不幸的是,存储供应商最终抓住了指标之间的差异,将其作为以更低成本生产GB驱动器和TB驱动器的一种方式-因此,一个500 GB的固态硬盘实际上只有465GiB,而像我们今天重新测试的12TB硬盘每个实际上只有10.9TiB。