前言
ZFS被称为是世界上最后一个存储系统(emm),还有人说"完全填充ZFS的128位存储池所需的能量,实际上比煮沸海洋需要的更多"。不论是从扩展性还是从性能上讲ZFS都有着独特的优势,在用了几年ZFS之后,现在已经离不开这个文件系统了。
其实想整理这篇文章已经很久了,但是一直懒的动笔,今天终于下定决心来写一下了,整理了网上一些比较权威的实测数据,同时也从原理上来讲讲到底如何选择ZFS的阵列等级。
ZFS简介
以下内容直接摘抄自维基百科
ZFS是一个拥有逻辑卷管理功能的文件系统,最早源自于Oracle为Solaris操作系统开发的文件系统。ZFS具有可扩展性,并且包括大量保护措施防止数据损坏,支持高存储容量、高效数据压缩、集成文件系统、卷管理、快照和写时复制、连续完整性检查与自动修复、RAID-Z、原生NFSv4 ACL等功能,并且能被精确配置。ZFS有两个主要实现,分别来自Oracle和OpenZFS,它们之间极度相似,这使得ZFS在类Unix系统中广泛可用。
ZFS的特性
- 存储池 Pooled-storage
- 写入时复制 Copy-on-write
- 快照 Snapshots
- 数据完整性验证和自动修复
- RAID-Z
- 最大单个文件大小为 16 EB(1 EB = 1024 PB)
- 最大 256 千万亿(256*1015 )的 ZB(1 ZB = 1024 EB)的存储
以下内容翻译自John Paul的科普文有兴趣可以去看看英文原文
存储池 Pooled-storage
与大多数文件系统不同,ZFS结合了文件系统和卷管理器的功能。 这意味着与其他文件系统不同,ZFS可以创建跨一系列驱动器或池的文件系统。 不仅如此,您还可以通过添加另一个驱动器将存储添加到池中。 ZFS将处理分区和格式化。
写入时复制 Copy-on-write
写入时复制是另一个有趣的(很酷的)功能。 在大多数文件系统上,当数据被覆盖时,它会永远丢失。 在ZFS上,新信息将写入另一个块。 写入完成后,文件系统元数据将更新为指向新信息。 这样可以确保如果在写入过程中系统崩溃(或发生其他情况),则将保留旧数据。 这也意味着系统崩溃后无需运行fsck。
快照 Snapshots
写入时复制导致ZFS的另一个功能:快照。 ZFS使用快照来跟踪文件系统中的更改。 “快照包含文件系统的原始版本,实时文件系统包含自拍摄快照以来所做的任何更改。 没有使用额外的空间。 在将新数据写入实时文件系统时,将分配新块来存储此数据。” 如果删除了文件,也删除了快照引用。 因此,快照主要用于跟踪文件更改,但不能跟踪文件的添加和创建。
快照可以只读方式安装,以恢复文件的旧版本。 也可以将实时系统回滚到先前的快照。 自快照以来所做的所有更改都将丢失。
数据完整性验证和自动修复
每当将新数据写入ZFS时,它都会为该数据创建一个校验和。 读取该数据后,将校验和。 如果校验和不匹配,则ZFS知道已检测到错误。 ZFS然后将自动尝试纠正该错误。
RAID-Z
ZFS可以处理RAID,而无需任何其他软件或硬件。 毫不奇怪,ZFS具有自己的RAID实现:RAID-Z。 RAID-Z实际上是RAID-5的变体。 但是,它旨在克服RAID-5写孔错误,即“在意外重启后数据和奇偶校验信息变得不一致”。 要使用RAID-Z(RAID-Z1)的基本级别,您至少需要两个磁盘用于存储,一个磁盘用于奇偶校验。 RAID-Z2至少需要两个存储驱动器和两个用于奇偶校验的驱动器。 RAID-Z3至少需要两个存储驱动器和三个驱动器以实现奇偶校验。 将驱动器添加到RAID-Z池时,必须以两个的倍数添加它们。
巨大的存储潜力
创建ZFS时,它被设计为文件系统中的硬道理。 在大多数文件系统使用64位的时候,ZFS的创建者决定直接跳到128位以进行进一步验证。 这意味着ZFS“提供的容量为32或64位系统的160亿倍”。 实际上,创建者之一Jeff Bonwick说,为“完全填充128位存储池供电,实际上比煮沸海洋需要更多的能量”。
不同等级Level的ZFS阵列
在谈论RAID阵列的时候,最常被问到的问题是:“哪个等级的阵列是最好的?”实际上没有最好的选择,如何选择完全取决于想要实现的特性和愿意放弃的特性。 实际上我们最应该问自己的问题是:“我们的数据有多重要?”
不管是ZFS阵列还是常规的RAID阵列,都有三个非常重要的指标:性能、容量以及数据完整性(Performance, capacity and data integrity),脱离了任何一个指标的阵列都是无意义的。
但是对于不同盘位下的推荐ZFS等级,可以参考一下这个:
首先声明,一些抛开需求谈方案的都是耍流氓,所以最终还是要根据自己的具体需求选择阵列等级!问自己:“数据到底有多重要?”
#数据是否完全不重要(如游戏文件丢了重新下载即可) 完全不重要: 啥都别说直接Striped(RAID0) 重要: 继续下一个问题 #有多少块磁盘? 1: 1块没有组阵列的意义 2: ZFS Mirror (RAID1) 3-5: RAIDZ1 (RAID5) 6-10: 推荐RAIDZ1 x 2 (RAID50)或 在阵列总容量较小的条件下使用RAIDZ2(RAID6) 10-15: 推荐RAIDZ1 x 3(RAID50)或 在阵列总容量较小的条件下使用RAIDZ3(RAID7) 16-20: 推荐RAIDZ1 x 4
ZFS与RAID阵列等级划分
我们经常把ZFS阵列和RAID阵列的各个等级划等号,这里给尚不了解RAID阵列的同学补个课
JBOD ( Just a Bunch Of Disks )不是标准的 RAID 等级,它通常用来表示一个没有控制软件提供协调控制的磁盘集合。 JBOD 将多个物理磁盘串联起来,提供一个巨大的逻辑磁盘。 JBOD (如图 1 )的数据存放机制是由第一块磁盘开始按顺序往后存储,当前磁盘存储空间用完后,再依次往后面的磁盘存储数据。 JBOD 存储性能完全等同于单块磁盘,而且也不提供数据安全保护。它只是简单提供一种扩展存储空间的机制, JBOD 可用存储容量等于所有成员磁盘的存储空间之和。目前 JBOD 常指磁盘柜,而不论其是否提供 RAID 功能。
raid0或条带化阵列没有冗余,但是可提供最佳性能和附加存储。任何驱动器故障都会破坏整个阵列,因此raid 0根本不安全。如果您需要非常快的暂存空间来进行视频编辑,那么raid0会很好。
raid1或镜像只是在阵列中的每个驱动器上镜像相同的数据。这是极好的冗余,因为您可能会丢失除一个驱动器之外的所有驱动器,并且仍然可以访问数据。肯定的是,阵列中添加的每个驱动器都会提高RAID读取速度。最大的缺点是容量低和写入速度慢。无论团队中有多少驱动器,您都可以使用单个驱动器的总容量。由于每个驱动器都会获得相同文件的完整副本,因此速度会降低。镜像通常用于两(2)个驱动器,而不是像我们的测试中那样用于12和24的驱动器,因为存在大量的浪费空间。
raid 2,raid 3和raid 4未经过测试,因为IT行业不再使用它们。 Raid2使用相同数量的磁盘作为专用ECC驱动器。团队3和团队4使用单个专用的奇偶校验驱动器。由于可怕的随机读取和写入性能,这些袭击都不再用于生产。
raid5或raidz会与数据一起分发奇偶校验,并且在RAID失败之前可能会丢失一个物理驱动器。因为需要计算奇偶校验,所以raid 5比raid0慢,但是raid 5更安全。 RAID 5至少需要三个硬盘,其中一(1)个完整磁盘空间用于奇偶校验。
raid6或raidz2会与数据一起分配奇偶校验,并且可能会丢失两个物理驱动器,而不是像raid 5那样仅丢失一个物理驱动器。因为需要计算更多的奇偶校验,所以raid6比raid5慢,但是raid6更安全。 raidz2至少需要四个磁盘,并且将使用两(2)个磁盘空间进行奇偶校验。
raid7或raidz3就像raid 5和6一样分配奇偶校验,但是raid7会丢失三个物理驱动器。由于需要计算三重奇偶校验,因此raid 7比raid5和raid 6慢,但是raid 7是三个中最安全的。 raidz3至少需要四个磁盘,但应与至少五(5)个磁盘一起使用,其中三(3)个磁盘空间用于奇偶校验。
raid10或raid1 0是数据的镜像和条带化。最简单的raid10阵列有四个磁盘,由两对镜像组成。磁盘1和2是镜像,磁盘3和4分别是另一个镜像。然后,在两个镜像之间对数据进行条带化(考虑raid0)。您可以在每个镜像中丢失一个驱动器,并且数据仍然安全。您不能丢失组成一个镜像的两个驱动器,例如,驱动器1和2不能同时丢失。突袭10的优点是读取数据的速度很快。缺点是写入速度慢(多个镜像)并且容量低。
raid60或raid6 0是两个或更多raid6卷的条带。您将获得raid6安全性(每个raid6阵列丢失两个驱动器)和raid0条带化读取速度的优势。底片与raid10相同。
raid70或raid7 0是两个或更多raid7卷的条带。就像raid6一样,您可以利用raid7安全性和raid0条带化读取速度,但会失去容量。
ZFS不同磁盘数量 x 阵列等级下的性能对比
这里我们会给出性能实测,并在测试结果前面列出磁盘数量,RAID类型,容量和性能指标,以便于比较。速度显示“ w”表示写入,“ rw”表示重写,“ r”表示读取,吞吐量以兆字节/秒为单位。
下表是不同ZFS阵列等级在未压缩的条件下测速结果。 数据来源CALOMEL
ZFS Raid Speed Capacity and Performance Benchmarks (speeds in megabytes per second) 1x 4TB, single drive, 3.7 TB, w=108MB/s , rw=50MB/s , r=204MB/s 2x 4TB, mirror (raid1), 3.7 TB, w=106MB/s , rw=50MB/s , r=488MB/s 2x 4TB, stripe (raid0), 7.5 TB, w=237MB/s , rw=73MB/s , r=434MB/s 3x 4TB, mirror (raid1), 3.7 TB, w=106MB/s , rw=49MB/s , r=589MB/s 3x 4TB, stripe (raid0), 11.3 TB, w=392MB/s , rw=86MB/s , r=474MB/s 3x 4TB, raidz1 (raid5), 7.5 TB, w=225MB/s , rw=56MB/s , r=619MB/s 4x 4TB, 2 striped mirrors, 7.5 TB, w=226MB/s , rw=53MB/s , r=644MB/s 4x 4TB, raidz2 (raid6), 7.5 TB, w=204MB/s , rw=54MB/s , r=183MB/s 5x 4TB, raidz1 (raid5), 15.0 TB, w=469MB/s , rw=79MB/s , r=598MB/s 5x 4TB, raidz3 (raid7), 7.5 TB, w=116MB/s , rw=45MB/s , r=493MB/s 6x 4TB, 3 striped mirrors, 11.3 TB, w=389MB/s , rw=60MB/s , r=655MB/s 6x 4TB, raidz2 (raid6), 15.0 TB, w=429MB/s , rw=71MB/s , r=488MB/s 10x 4TB, 2 striped 5x raidz, 30.1 TB, w=675MB/s , rw=109MB/s , r=1012MB/s 11x 4TB, raidz3 (raid7), 30.2 TB, w=552MB/s , rw=103MB/s , r=963MB/s 12x 4TB, 6 striped mirrors, 22.6 TB, w=643MB/s , rw=83MB/s , r=962MB/s 12x 4TB, 2 striped 6x raidz2, 30.1 TB, w=638MB/s , rw=105MB/s , r=990MB/s 12x 4TB, raidz (raid5), 41.3 TB, w=689MB/s , rw=118MB/s , r=993MB/s 12x 4TB, raidz2 (raid6), 37.4 TB, w=317MB/s , rw=98MB/s , r=1065MB/s 12x 4TB, raidz3 (raid7), 33.6 TB, w=452MB/s , rw=105MB/s , r=840MB/s 22x 4TB, 2 striped 11x raidz3, 60.4 TB, w=567MB/s , rw=162MB/s , r=1139MB/s 23x 4TB, raidz3 (raid7), 74.9 TB, w=440MB/s , rw=157MB/s , r=1146MB/s 24x 4TB, 12 striped mirrors, 45.2 TB, w=696MB/s , rw=144MB/s , r=898MB/s 24x 4TB, raidz (raid5), 86.4 TB, w=567MB/s , rw=198MB/s , r=1304MB/s 24x 4TB, raidz2 (raid6), 82.0 TB, w=434MB/s , rw=189MB/s , r=1063MB/s 24x 4TB, raidz3 (raid7), 78.1 TB, w=405MB/s , rw=180MB/s , r=1117MB/s 24x 4TB, striped raid0, 90.4 TB, w=692MB/s , rw=260MB/s , r=1377MB/s
1x 256GB a single drive 232 gigabytes ( w= 441MB/s , rw=224MB/s , r= 506MB/s ) 2x 256GB raid0 striped 464 gigabytes ( w= 933MB/s , rw=457MB/s , r=1020MB/s ) 2x 256GB raid1 mirror 232 gigabytes ( w= 430MB/s , rw=300MB/s , r= 990MB/s ) 3x 256GB raid5, raidz1 466 gigabytes ( w= 751MB/s , rw=485MB/s , r=1427MB/s ) 4x 256GB raid6, raidz2 462 gigabytes ( w= 565MB/s , rw=442MB/s , r=1925MB/s ) 5x 256GB raid5, raidz1 931 gigabytes ( w= 817MB/s , rw=610MB/s , r=1881MB/s ) 5x 256GB raid7, raidz3 464 gigabytes ( w= 424MB/s , rw=316MB/s , r=1209MB/s ) 6x 256GB raid6, raidz2 933 gigabytes ( w= 721MB/s , rw=530MB/s , r=1754MB/s ) 7x 256GB raid7, raidz3 934 gigabytes ( w= 591MB/s , rw=436MB/s , r=1713MB/s ) 9x 256GB raid5, raidz1 1.8 terabytes ( w= 868MB/s , rw=618MB/s , r=1978MB/s ) 10x 256GB raid6, raidz2 1.8 terabytes ( w= 806MB/s , rw=511MB/s , r=1730MB/s ) 11x 256GB raid7, raidz3 1.8 terabytes ( w= 659MB/s , rw=448MB/s , r=1681MB/s ) 17x 256GB raid5, raidz1 3.7 terabytes ( w= 874MB/s , rw=574MB/s , r=1816MB/s ) 18x 256GB raid6, raidz2 3.7 terabytes ( w= 788MB/s , rw=532MB/s , r=1589MB/s ) 19x 256GB raid7, raidz3 3.7 terabytes ( w= 699MB/s , rw=400MB/s , r=1183MB/s ) 24x 256GB raid0 striped 5.5 terabytes ( w=1620MB/s , rw=796MB/s , r=2043MB/s )
题外话-关于压缩
ZFS使用最大为1024 KB的可变大小的块。如果启用了数据压缩(LZJB或LZ4),则使用可变块大小。如果可以压缩一个块以使其适合较小的块大小,则可以在磁盘上使用较小的大小以使用较少的存储并提高IO吞吐量,但代价是增加了用于压缩和解压缩操作的CPU使用量。
# The following Bonnie++ tests show the speeds of volumes with compression off # and then on with compression=lzjb and compression=lz4 of well compressed data. off 1x 2TB a single drive 1.8 terabytes ( w=131MB/s , rw= 66MB/s , r= 150MB/s ) lzjb 1x 2TB a single drive 1.8 terabytes ( w=445MB/s , rw=344MB/s , r=1174MB/s ) lz4 1x 2TB a single drive 1.8 terabytes ( w=471MB/s , rw=351MB/s , r=1542MB/s ) off 1x 256GB a single drive 232 gigabytes ( w=441MB/s , rw=224MB/s , r= 506MB/s ) SSD lzjb 1x 256GB a single drive 232 gigabytes ( w=510MB/s , rw=425MB/s , r=1290MB/s ) SSD off 2x 2TB raid1 mirror 1.8 terabytes ( w=126MB/s , rw= 79MB/s , r= 216MB/s ) lzjb 2x 2TB raid1 mirror 1.8 terabytes ( w=461MB/s , rw=386MB/s , r=1243MB/s ) lz4 2x 2TB raid1 mirror 1.8 terabytes ( w=398MB/s , rw=354MB/s , r=1537MB/s ) off 3x 2TB raid5, raidz1 3.6 terabytes ( w=279MB/s , rw=131MB/s , r= 281MB/s ) lzjb 3x 2TB raid5, raidz1 3.6 terabytes ( w=479MB/s , rw=366MB/s , r=1243MB/s ) lz4 3x 2TB raid5, raidz1 3.6 terabytes ( w=517MB/s , rw=453MB/s , r=1587MB/s ) off 5x 2TB raid5, raidz1 7.1 terabytes ( w=469MB/s , rw=173MB/s , r= 406MB/s ) lzjb 5x 2TB raid5, raidz1 7.1 terabytes ( w=478MB/s , rw=392MB/s , r=1156MB/s ) lz4 5x 2TB raid5, raidz1 7.1 terabytes ( w=516MB/s , rw=437MB/s , r=1560MB/s ) off 5x 256GB raid5, raidz1 931 gigabytes ( w= 817MB/s , rw=610MB/s , r=1881MB/s ) SSD lzjb 5x 256GB raid5, raidz1 931 gigabytes ( w= 515MB/s , rw=415MB/s , r=1223MB/s ) SSD off 7x 2TB raid7, raidz3 7.1 terabytes ( w=393MB/s , rw=169MB/s , r= 423MB/s ) lzjb 7x 2TB raid7, raidz3 7.1 terabytes ( w=469MB/s , rw=378MB/s , r=1127MB/s ) lz4 7x 2TB raid7, raidz3 7.1 terabytes ( w=507MB/s , rw=436MB/s , r=1532MB/s ) off 12x 2TB raid5, raidz1 19 terabytes ( w=521MB/s , rw=272MB/s , r= 738MB/s ) lzjb 12x 2TB raid5, raidz1 19 terabytes ( w=487MB/s , rw=391MB/s , r=1105MB/s ) lz4 12x 2TB raid5, raidz1 19 terabytes ( w=517MB/s , rw=441MB/s , r=1557MB/s ) off 17x 2TB raid5, raidz1 28 terabytes ( w=468MB/s , rw=267MB/s , r= 874MB/s ) lzjb 17x 2TB raid5, raidz1 28 terabytes ( w=478MB/s , rw=380MB/s , r=1096MB/s ) lz4 17x 2TB raid5, raidz1 28 terabytes ( w=502MB/s , rw=430MB/s , r=1473MB/s ) off 24x 2TB raid5, raidz1 40 terabytes ( w=528MB/s , rw=291MB/s , r= 929MB/s ) lzjb 24x 2TB raid5, raidz1 40 terabytes ( w=478MB/s , rw=382MB/s , r=1081MB/s ) lz4 24x 2TB raid5, raidz1 40 terabytes ( w=504MB/s , rw=431MB/s , r=1507MB/s ) off 24x 256GB raid0 stripe 5.5 terabytes ( w=1340MB/s , rw=796MB/s , r=2037MB/s ) SSD lzjb 24x 256GB raid0 stripe 5.5 terabytes ( w=1032MB/s , rw=844MB/s , r=2597MB/s ) SSD # The raw bonnie output 1x 2TB a single drive 1.8 terabytes # zfs set compression=lzjb tank Version 1.96 ------Sequential Output------ --Sequential Input- --Random- Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP calomel.org 80G 445544 78 344412 67 1174294 80 285.9 3 Latency 6118ms 5142ms 273ms 502ms 1x 2TB a single drive 1.8 terabytes # zfs set compression=lz4 tank Version 1.96 ------Sequential Output------ --Sequential Input- --Random- Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP zfsFBSD10 80G 471248 76 351900 61 1542189 88 14053 178 Latency 8638ms 9357ms 720ms 44143us 1x 256GB a single drive 232 terabytes SSD # zfs set compression=lzjb tank Version 1.96 ------Sequential Output------ --Sequential Input- --Random- Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP zfsSSD 80G 510613 88 425359 81 1290425 86 9716 140 Latency 509ms 553ms 277ms 13602us 2x 2TB raid1 mirror 1.8 terabytes # zfs set compression=lzjb tank Version 1.96 ------Sequential Output------ --Sequential Input- --Random- Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP calomel.org 80G 461530 83 386759 78 1243555 85 397.2 15 Latency 5031ms 4847ms 276ms 304ms 2x 2TB raid1 mirror 1.8 terabytes # zfs set compression=lz4 tank Version 1.96 ------Sequential Output------ --Sequential Input- --Random- Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP zfsFBSD10 80G 398572 67 354963 64 1537069 90 1157 14 Latency 10477ms 7119ms 795ms 76540us 3x 2TB raid5, raidz1 3.6 terabytes # zfs set compression=lzjb tank Version 1.96 ------Sequential Output------ --Sequential Input- --Random- Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP calomel.org 80G 479200 85 366110 75 1243482 87 260.8 3 Latency 3580ms 3717ms 500ms 342ms 3x 2TB raid5, raidz1 3.6 terabytes # zfs set compression=lz4 tank Version 1.96 ------Sequential Output------ --Sequential Input- --Random- Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP zfsFBSD10 80G 517140 87 453732 82 1587063 95 899.5 10 Latency 471ms 627ms 325ms 70999us 5x 2TB raid5, raidz1 7.1 terabytes # zfs set compression=lzjb tank Version 1.96 ------Sequential Output------ --Sequential Input- --Random- Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP calomel.org 80G 478755 87 392926 81 1156163 83 256.9 4 Latency 807ms 1269ms 338ms 417ms 5x 2TB raid5, raidz1 7.1 terabytes # zfs set compression=lz4 tank Version 1.96 ------Sequential Output------ --Sequential Input- --Random- Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP zfsFBSD10 80G 516294 88 437536 80 1560222 93 1190 14 Latency 522ms 2311ms 301ms 61362us 5x 2TB raid5, raidz1 931 gigabytes SSD # zfs set compression=lzjb tank Version 1.96 ------Sequential Output------ --Sequential Input- --Random- Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP zfsSSD 80G 515770 88 415428 79 1223482 85 9288 147 Latency 495ms 1192ms 87411us 12334us 7x 2TB raid7, raidz3 7.1 terabytes # zfs set compression=lzjb tank Version 1.96 ------Sequential Output------ --Sequential Input- --Random- Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP calomel.org 80G 469870 86 378324 78 1127670 81 260.9 5 Latency 1862ms 1055ms 210ms 371ms 7x 2TB raid7, raidz3 7.1 terabytes # zfs set compression=lz4 tank Version 1.96 ------Sequential Output------ --Sequential Input- --Random- Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP zfsFBSD10 80G 507960 88 436097 82 1532414 92 614.7 10 Latency 509ms 1576ms 187ms 61843us 12x 2TB raid5, raidz1 19 terabytes # zfs set compression=lzjb tank Version 1.96 ------Sequential Output------ --Sequential Input- --Random- Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP calomel.org 80G 487671 87 391920 81 1105113 83 248.9 4 Latency 503ms 1128ms 409ms 323ms 12x 2TB raid5, raidz1 19 terabytes # zfs set compression=lz4 tank Version 1.96 ------Sequential Output------ --Sequential Input- --Random- Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP zfsFBSD10 80G 517168 89 441478 81 1557655 93 1335 22 Latency 462ms 847ms 267ms 61475us 17x 2TB raid5, raidz1 28 terabytes # zfs set compression=lzjb tank Version 1.96 ------Sequential Output------ --Sequential Input- --Random- Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP calomel.org 80G 478964 87 380927 80 1096636 82 280.7 5 Latency 2051ms 802ms 179ms 363ms 17x 2TB raid5, raidz1 28 terabytes # zfs set compression=lz4 tank Version 1.96 ------Sequential Output------ --Sequential Input- --Random- Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP zfsFBSD10 80G 502536 88 430811 81 1473594 89 1217 14 Latency 489ms 726ms 261ms 58670us 24x 2TB raid5, raidz1 40 terabytes # zfs set compression=lzjb tank Version 1.96 ------Sequential Output------ --Sequential Input- --Random- Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP calomel.org 80G 478082 87 382614 79 1081919 80 278.9 6 Latency 990ms 1013ms 185ms 492ms 24x 2TB raid5, raidz1 40 terabytes # zfs set compression=lz4 tank Version 1.96 ------Sequential Output------ --Sequential Input- --Random- Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP zfsFBSD10 80G 504239 87 431002 81 1507097 90 1645 22 Latency 514ms 844ms 58128us 43527us 24x 2TB raid0 stripe 5.5 terabytes SSD # zfs set compression=off tank Version 1.96 ------Sequential Output------ --Sequential Input- --Random- Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP calomel.org 80G 587993 97 359645 65 1040082 61 7410 108 Latency 109ms 827ms 577ms 13935us 24x 2TB raid0 stripe 5.5 terabytes SSD # zfs set compression=lzjb tank Version 1.96 ------Sequential Output------ --Sequential Input- --Random- Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP calomel.org 80G 1032588 88 844972 82 2597192 85 10210 142 Latency 538ms 571ms 235ms 14151us
根据上面的数据可以看到随着物理磁盘数量的增加,压缩对性能的影响较小。 实际上,通过lz4压缩算法,在RAIDZ(等价RAID5)中使用三个磁盘就可以最大程度地提高读写速度。 因此建议是对所有阵列启用压缩,因为开启后节省的IO性能远远超过增加的一点点CPU使用率,并且可以压缩数据以节省空间。
Please quote the original link:https://www.liujason.com/article/743.html