带你了解不同级别的RAID性能 2023-02-03 服务器 暂无评论 1769 次阅读 选择RAID级别是一个平衡许多因素的过程,包括成本、可靠性、容量,当然还有性能。 RAID性能是很难理解的,尤其是不同的RAID级别使用不同的技术,在实际操作中表现相当不同。在这篇文章中,我想探讨一下常见的RAID 0、5、6和10等RAID级别,看看它们之间的性能有何不同。 在本文中,RAID 1将被假定为RAID 10的一个子集。 这通常是一种方便的方式,将RAID 1简单地认为是一个只有单一镜像对成员的RAID 10阵列。由于RAID 1是真正的单对RAID 10,并且表现为单对RAID 10,这使得RAID性能非常容易理解。它简单地映射到RAID 10性能曲线中。 #RAID的读和写 所有存储都要看两种性能:读和写。就RAID而言,读是非常容易的,而写则相当复杂。读取性能在所有类型中有效稳定。然而,写则不然。 为了便于讨论性能,我们需要定义一些术语,因为我们将使用一些公式。在我们的讨论中,我们将使用 “N “代表阵列中的驱动器总数。我们将使用 “X “来代表每个驱动器的性能。这使得我们可以用相对性能作为影响硬盘性能的一个因素来讨论。我们可以抽象出RAID阵列,而不必考虑原始IOPS(每秒输入/输出操作)。这一点很重要,因为IOPS通常很难定义。但是,我们可以通过与阵列中的单个驱动器的关系来有意义地比较性能。 同样重要的是要记住,我们只是在讨论阵列本身的性能,而不是整个存储子系统。诸如内存缓存和固态缓存这样的优化会对存储系统的整体性能起到惊人的作用。但它们不会从根本上改变阵列本身的性能。没有一个简单的公式来确定不同的缓存选项将如何影响整体性能。我只想说,它可以是非常戏剧性的,不仅取决于缓存选择本身,而且还很大程度上取决于工作负载。即使是最大、最快、最强大的缓存选项也无法改变阵列的长期、持续的性能。 RAID很复杂,影响最终性能的因素很多。其中之一是系统本身的实现,一个不好的实现可能会造成延迟,或者它可能无法使用可用的驱动器(例如RAID 1阵列只能从单个磁盘读取,而不是同时从两个磁盘读取!) 。没有简单的方法来解释具体实现中的缺陷。我们必须假设所有的工作都在规范的限制范围内。任何企业级的RAID系统都会这样做。在这方面存在问题的主要是业余和消费级的RAID系统。 #CPU在RAID性能中的作用 有些类型的RAID也有剧烈的计算开销,而有些则没有。主要是,RAID的奇偶性校验需要大量的处理以处理写操作,不同级别的每个操作所需的计算量不同。这就引入了延迟,但不会缩减吞吐量。然而,这种延迟将根据RAID级别的实现以及系统的处理能力而变化。 硬件RAID将使用通用CPU(通常是Power或ARM RISC处理器)或定制的ASIC来处理这个问题。软件RAID将此工作交给服务器自己的CPU来处理。通常情况下,服务器CPU在这里实际上更快,但会消耗系统资源。ASIC可以非常快,但生产成本很高。这种延迟会影响存储性能,但很难预测,可以从非常微小到剧烈变化。所以我将提到每个RAID级别的相对延迟影响,但不会尝试测量它。在大多数RAID性能计算中,这种延迟被忽略了。然而,它仍然存在。根据阵列的配置,它可能会对工作负载产生明显的影响。 值得一提的是,由于磁盘本身数据存储分布位置的不同,会对读操作的性能产生微小的影响。奇偶性校验的RAID会在磁盘上读取一部分校验数据,在阵列健康的情况下的读取操作中是无用的,但不能被加速。这实际上会导致它的速度稍慢。但这种影响小得可笑,一般情况下是不会测量的,所以可以忽略。 当然,条带大小等因素也会影响性能。但是,由于这是可配置的,而不是任何级别的内在因素,我将在这里忽略它。它不是选择RAID级别本身的因素,而只是在选择了RAID级别后进行配置时的因素。 #存储的读写比率 最后我想提到的因素是存储操作的读写比。有些RAID阵列几乎纯粹用于读操作,有些几乎只用于写操作。大多数会使用两者的混合,可能是百分之八十左右的读和百分之二十地写。这个比例对于了解特定阵列的性能和了解每个RAID级别对你的影响是非常重要的。我将其称为读/写混合。 我们主要以IOPS来衡量存储性能。IOPS代表Input/Output Operations Per Second。我进一步用RIOPS代表Read IOPS,WIOPS代表Write IOPS,BIOPS代表混合IOPS,会有80/20或其他什么比例。很多人用一个单一的IOPS数字来谈论存储性能。当这样做时,他们通常意味着混合IOPS为50/50。然而,很少有任何工作负载以50/50的比例运行,所以这个数字可能会产生极大的误导性。我们需要两个数字,RIOPS和WIOPS来理解性能。我们可以将这两个数字结合起来使用,可以找到任何我们需要的IOPS混合。 例如,50/50混合就是简单的(RIOPS * 0.5)+(WIOPS * 0.5)。更常见的80/20混合是(RIOPS * 0.8)+(WIOPS * 0.2)。 现在我们已经建立了一些标准和背景了解,我们将深入研究我们的RAID级别本身,并看看它们之间的性能差异。 对于所有的RAID级别,我们用 NX 计算Read IOPS数值。当然,这并不涉及我上面提到的名义开销。这是一个 “最佳情况 “的数字。但实际情况下的数字非常接近,所以简单地使用这个公式是非常实用的。简单地将磁盘数量(N)乘以单个驱动器的IOPS性能(X)。请记住,驱动器通常具有不同的读取和写入性能。因此,请务必使用驱动器的读取IOPS额定值或测试速度来计算读取IOPS,并使用写入IOPS速率或测试速度来计算写入IOPS。 #RAID 0 性能 RAID 0是最容易理解的级别,因为实际上不用担心开销,因为不会消耗任何资源,而且一直能够使读写得到每一个磁盘的充分利用。所以对于RAID 0来说,我们的写性能公式非常简单:NX 。RAID 0永远是性能最高的级别。 一个例子是一个8个磁盘的RAID 0阵列。如果阵列中的单个驱动器提供125 IOPS,那么 N = 8,X = 125,得到 8 * 125 产生 1,000 IOPS。这里的读和写IOPS都是一样的。因此,这是非常简单的,因为我们得到1K RIOPS,1K WIOPS和1K的任何混合,非常简单。如果我们不知道单个主轴的绝对IOPS,我们可以将8个主轴的RAID 0称为提供8倍混合IOPS。 #RAID 10 性能 RAID 10的计算是第二简单的级别。因为RAID 10是由镜像组组成的RAID 0条带,所以我们不用担心条带的开销,但是每个镜像都要写两次相同的数据才能创建镜像。这样一来,我们的写入性能就比同样数量硬盘的RAID 0阵列降低了一半。给我们的写入性能公式为简单的:NX/2 或 0. 5NX 。 我们应该注意到,在相同的容量下,而不是在相同的磁盘数量下,RAID 10的写入性能与RAID 0相同,但读取性能是RAID 0的两倍 — 这只是因为它需要两倍的磁盘来匹配相同的容量。 因此,一个八块磁盘的RAID 10阵列将是 N = 8 和 X = 125,我们的计算结果是 (8 * 125)/2,即 500 WIOPS 或 4X WIOPS。50/50混合的结果是750个混合IOPS(1000个读IOPS和500个写IOPS)。 这个公式同样适用于RAID 1、RAID 10、RAID 100和RAID 01。 不常见的选项,如RAID 10中的三重镜像,会改变这种写入惩罚。例如,带有三重镜像的RAID 10的写入性能将是 NX/3 。 #RAID 5 性能 RAID 5已经被废弃,永远不应该在新阵列中使用。我在这里包括它,是因为它是一个众所周知的、常用的RAID级别,它的性能需要被理解。RAID 5是现代奇偶性RAID级别中最基本的级别。RAID 2、3和4已经在生产系统中不再出现,所以我们在这里不研究它们的性能。RAID 5虽然目前不推荐使用,但它是其他现代奇偶性RAID级别的基础,所以了解它很重要。 奇偶校验 RAID增加了一个有点复杂的需求,即每次写入磁盘时都要验证和重写奇偶校验。这意味着一个RAID 5阵列将不得不读取数据,读取奇偶校验,写入数据,最后写入奇偶校验。每次有效的操作有四次。这样一来,我们在RAID 5上的写入惩罚为4次。所以RAID 5写性能的公式是 NX/4 。 因此,按照8个磁盘的例子,单个磁盘的写入IOPS是125,我们将得到以下计算。(8 * 125)/4 或 2X 的写入IOPS,即250 WIOPS。在50/50混合的情况下,这将导致625混合IOPS。 #RAID 6 性能 RAID 6,仅次于RAID 10,可能是目前最常见和最有用的RAID级别。然而,RAID 6是基于RAID 5的,并且有另一个级别的奇偶性。这使得它比RAID 5更安全,这是非常重要的,但同时也带来了巨大的写入惩罚。每一次写入操作都需要磁盘读取数据,读取第一个奇偶校验,读取第二个奇偶校验,写入数据,写入第一个奇偶校验,最后再写入第二个奇偶校验。这样一来,就有了6倍的写入惩罚,这是很戏剧性的。所以我们的公式是 NX/6 。 继续我们的例子,我们得到了 (8 * 125)/6 ,即约 167 个写入IOPS 或 1.33X。在我们50/50混合的例子中,这是一个583.5混合IOPS的性能。正如你所看到的,奇偶校验写入会导致写入性能的快速下降,混合性能也会有明显的下降。 #RAID 7 (RAID 5.3 或 RAID 7.3) 性能 RAID 7是一个有点非标准的级别,在现有的RAID 5的单奇偶校验和RAID 6的双奇偶校验的基础上增加了三重奇偶校验。目前唯一实现RAID 7的是ZFS的RAIDZ3。因为RAID 7包含了RAID 5和RAID 6的所有开销,再加上第三奇偶校验的额外开销,我们的写入惩罚达到了惊人的8倍。所以我们计算RAID 7写入性能的公式是 NX/8 。 在我们的例子中,这意味着 (8 * 125)/8 将达到 125写IOPS或1X。因此,在我们的阵列中,如果有八个驱动器,我们将只获得单个独立驱动器的写入性能。这是巨大的开销。我们的混合50/50 IOPS将仅为562.5。 #复杂RAID的性能 复杂的RAID级别或嵌套的RAID级别,如RAID 50、60、61、16等,都可以通过上述信息找到。您可以将RAID分解为其组成部分,并应用上面提供的公式。这些级别没有简单的公式,因为它们有不同的配置。有必要将它们分解为其组成部分,并多次应用公式。 RAID 60有12个驱动器,两组6个驱动器,每个驱动器是150 IOPS,将用两个RAID 6来完成。这将是RAID 0的NX,其中N是两个(对于两个RAID 6阵列),X是每个RAID 6的结果性能。 每个RAID 6组将是 (6150)/6 。所以完整的阵列将是 2 * ((6150)/6)。结果是 300 写IOPS。 同样的例子,但是配置为RAID 61,一对镜像的RAID 6阵列,每个RAID 6阵列的性能是一样的,但是应用到RAID 1的公式是 NX/2 (其中X是每个RAID阵列的结果性能)。所以最终的公式是 2 * ((6 * 150)/6)/2,来自12个驱动器的150写IOPS。 #性能作为能力的一个因素 当我们在制作RAID性能公式时,我们会根据磁盘的数量来考虑这些问题,这是非常合理的。这对于确定一个推荐的阵列甚至是一个现有的阵列的性能是非常有用的,因为在那里不可能进行测量,并且允许我们比较不同的选项之间的相对性能。正是在这些方面,我们普遍靠认为的RAID性能。 然而,这并不总是一个好的方法,因为通常我们把RAID看成是一个容量的因素,而不是性能或磁盘数量的因素。很少有人会考虑使用8个硬盘的RAID 6阵列,而不是8个硬盘的RAID 10阵列,但这当然是可能的。这种情况偶尔会发生,因为机箱的限制或其他类似的原因。但通常我们是从阵列总容量(例如我们可以使用的容量)的角度来看待RAID阵列,而不是磁盘数量、性能或任何其他因素。因此,很奇怪的是,我们竟然转而将RAID性能看作是磁盘数的函数。 如果我们改变我们的观点,将容量作为共同的因素,同时仍然假设单个驱动器的容量和性能(X)在比较器之间保持不变,那么我们就会得到一个完全不同的性能景观。例如,我们可以看到,RAID 0不再是性能最强的RAID级别,读取性能也不是恒定不变的,而是有很大的变化。 能力是个变幻莫测的东西,但我们可以将其提炼为达到理想能力所需的磁盘数量。这样一来,讨论起来就容易多了。因此,我们的第一步是确定我们原始容量所需的主轴数。例如,如果我们需要10TB的容量,并且使用1TB的硬盘,我们将需要10个硬盘。或者,如果我们需要3.2TB的容量,并且使用600GB的硬盘,我们将需要6个硬盘。与之前不同的是,我们将把我们的硬盘数量称为 “R”。和以前一样,各个驱动器的性能用 “X “来表示。(这里用 “R “表示这是原始容量数,而不是硬盘总数)。 RAID 0依然简单。由于没有额外的驱动器,性能仍然是 RX 。读和写IOPS都是简单的 NX 。 RAID 10 有 RX 写IOPS,但 2RX 读IOPS。这很有戏剧性。突然间,当我们把性能看作是稳定容量的一个因素时,我们发现 RAID 10 的读取性能是 RAID 0 的两倍! RAID 5变得稍微棘手。写入IOPS表示为 ((R + 1) * X)/4 。读取IOPS表示为 ((R+1)*X) 。 RAID 6,正如我们所期望的,遵循RAID 5的模式。RAID 6的写IOPS为 ((R + 2) * X)/6 。而读IOPS表示为 ((R+2)*X) 。 RAID 7正好符合这个标准。RAID 7 写入 IOPS 将是 ((R + 3) * X)/8 , 而读的IOPS是 ((R + 3) * X) 。 这个有利的观点改变了我们对性能的看法,当单纯地看读取性能时,RAID 0 变成了最慢的RAID级别,而不是最快的,而RAID 10则变成了读写最快的,不管 R 和 X 的值是多少。 让我们以现实世界为例,10块2TB硬盘要达到20TB的可用容量,每块硬盘有100 IOPS的性能,并假设50/50混合。结果是:RAID 0有1,000个混合IOPS RAID 10有1,500个混合IOPS (2,000 RIOPS / 1,000 WIOPS), RAID 5有687. 5 混合IOPS (1,100 RIOPS / 275 WIOPS),RAID 6与700 混合IOPS (1,200 RIOPS / 200 WIOPS),最后RAID 7以731.25 混合IOPS (1,300 RIOPS / 162.5 WIOPS)。RAID 10在这里是一个戏剧性的赢家。 #延迟和软RAID的系统影响 正如我前面所说,RAID 0和RAID 10实际上没有系统开销需要考虑。镜像操作基本上不需要任何计算工作,而且,就所有意图和目的而言,它是不可估量的小。奇偶性RAID确实有计算开销,这导致了存储层的延迟和系统资源的消耗。当然,如果我们使用的是硬件RAID,这些资源是专门用于RAID阵列的。它们没有其它任何功能,只能在这个角色中被消耗掉。但是,如果我们使用的是软件RAID,这些是通用的系统资源(主要是CPU),是为了RAID阵列的处理而消耗的。 即使是一个非常小的系统,使用大量的RAID,对系统的影响也是非常小的,但它是可以衡量的,如果只是轻描淡写,也应该考虑。延迟和系统影响是直接相关的。 对于不同级别的延迟和系统影响,没有一个简单的方式来说明。这里我们可以用一种方式来说明。 RAID 0和RAID 10实际上没有延迟或影响。 RAID 5有一些延迟和影响 RAID 6的计算延迟和影响大约是RAID 5的两倍 RAID 7的计算延迟和影响大约是RAID 5的三倍。 在许多情况下,这种延迟和系统影响将非常小,以至于无法用标准的系统工具来测量。随着现代处理器的功能越来越强大,延迟和系统影响将继续减少。自2001年以来,即使是低端的商用硬件,对RAID 5和RAID 6系统的影响也被认为可以忽略不计。在具有大量奇偶性RAID活动的高负载系统上,RAID子系统和其他需要系统资源的进程之间可能会发生争夺。 转自https://zhuanlan.zhihu.com/p/537173152 标签: raid 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。