介绍
本博客文章的目的是帮助您更好地了解存储性能。我想讨论一些基本原理,无论您有什么特殊需要。
这将帮助您更好地了解存储空间,并可能为进一步学习提供一个支架。
如果您完全在云中运行应用程序/工作负载,则此信息可能会过时或不相关。
但是,由于云只是其他人的计算和存储,因此有关存储的知识可能仍然很重要。云提供商公开了存储性能指标供您监视,这可能有助于您理解它们。
概念
输入输出
I / O是单个读/写请求。该I / O被发布到存储介质(如硬盘驱动器或固态驱动器)。
可以要求从磁盘读取特定文件。也可以是将一些数据写入现有文件的请求。读取或写入文件可能会导致多个I / O请求。
I / O请求大小
I / O请求具有大小。该请求可以很小(如1千字节),也可以很大(几兆字节)。不同的应用程序工作负载将发出具有不同请求大小的I / O操作。I / O请求大小可能会影响延迟和IOPS数字(我们将在稍后讨论两个指标)。
IOPS
IOPS代表每秒I / O操作。这是一种性能指标,在存储世界中经常使用(和滥用)。它告诉我们存储(对于特定的工作负载)每秒可以处理多少个I / O请求。
警告:没有延迟数字,该指标毫无意义。我们将在稍后讨论延迟。
带宽或吞吐量
如果将IOPS数字乘以(平均)I / O请求大小,则会获得带宽或吞吐量。我们以每秒兆字节和千兆字节为单位声明存储带宽。
举个例子:如果我们发出1000 IOPS的工作量,请求大小为4千字节,那么我们将获得1000 x 4 KB = 4000 KB的吞吐量。这大约是每秒4 MB。
潜伏
延迟是指完成I / O请求所需的时间。我们从发出请求到存储层的那一刻开始测量,并在获取请求的数据或确认数据已存储在磁盘上时停止测量。
在大多数情况下,延迟是关注存储性能时最重要的单个指标。
对于硬盘驱动器,在10到20毫秒之间的平均等待时间被认为是可以接受的(20毫秒是上限)。
对于固态驱动器,根据工作负载,它永远不应超过1-3毫秒。在大多数情况下,工作负载的等待时间少于1ms。
IOPS和延迟
这是一个非常重要的概念。如果没有有关延迟的说明,则IOPS指标毫无意义。您必须了解每个I / O操作将花费多长时间,因为延迟决定了各个I / O操作的响应能力。
如果存储解决方案可以达到10,000 IOPS,但平均延迟时间为50毫秒,则可能导致非常差的应用程序性能。如果我们要达到10 ms的较高延迟目标,则存储解决方案可能仅能达到2,000 IOPS。
有关此主题的更多详细信息,我将推荐该博客和该博客。
访问方式
顺序访问
顺序数据传输的一个示例是将一个大文件从一个硬盘复制到另一个硬盘。从源驱动器读取大量顺序的(通常是相邻的)数据块并将其写入另一个驱动器。备份作业还会导致顺序访问模式。
实际上,此访问模式显示了最高的吞吐量。
硬盘驱动器很容易,因为它们不必花费很多时间来移动读/写磁头,而可以花费大多数时间来读/写实际数据。
随机访问
I / O请求以看似随机的方式发布到存储介质。数据可以存储在存储介质上的各个区域中。这种访问模式的一个示例是使用大量数据库的服务器或运行许多虚拟机(所有虚拟机同时运行)的虚拟化主机。
硬盘驱动器将不得不花费大量时间来移动其读/写磁头,而仅花费很少的时间来传输数据。吞吐量和IOPS都会下降(与顺序访问模式相比)。
实际上,大多数常见的工作负载(例如正在运行的数据库或虚拟机)会导致存储系统上出现随机访问模式。
队列深度
队列深度是介于1到〜128之间的数字,它表示平均有多少I / O请求(在运行中)排队。拥有队列是有益的,因为队列中的请求可以以优化的方式(通常是并行方式)提交给存储子系统。队列以延迟为代价提高了性能。
如果您有某种存储性能监视解决方案,那么队列深度过长可能表明存储子系统无法处理工作负载。您可能还会观察到高于正常延迟的数字。只要等待时间数字仍在容许的范围内,就不会有问题。
存储介质性能特征
硬盘驱动器
硬盘驱动器(HDD)的是类似于机械设备唱机。
他们有一个带有读/写头的手臂,数据存储在(多个)盘片上。
硬盘驱动器必须物理地移动读/写磁头才能满足读/写请求。与固态驱动器(我们将在稍后介绍)相比,这种机械特性使它们相对较慢。
特别是随机访问工作负载会导致硬盘驱动器花费大量时间在正确的时间将读/写磁头移动到正确的位置,因此实际数据传输的时间更少。
要了解硬盘驱动器,最重要的一点是从性能角度(关注延迟)来看,更高的主轴速度会降低平均延迟。
转速RPM
访问延迟(毫秒)
IOPS
5400
17-18
50-60
7200
12-13
75-85
10,000
7-8
120-130
15,000
5-6
150-180
由于单个I / O请求的等待时间会降低具有较高RPM的驱动器,因此您可以在相同的时间内发出更多此类请求。这就是IOPS数也增加的原因。
较早的Western Digital Velociraptor 10,000 RPM驱动器的延迟和IOPS:
注意“队列深度= 1”列中的延迟和IOPS。
来源用于验证自己的研究。
关于顺序吞吐量,我们可以说相当老的硬盘驱动器可以维持每秒100-150兆字节的吞吐量。具有更高容量的更现代的硬盘驱动器通常可以维持每秒200-270兆字节的速度。
重要说明:顺序传输速度不是恒定的,并且取决于硬盘驱动器盘片上数据的物理位置。随着驱动器装满,吞吐量会下降。吞吐量可能下降百分之五十以上! 1。
因此,如果要计算传输特定(大型)数据集所需的时间,则需要考虑到这一点。
固态硬盘
固态驱动器(SSD)没有活动部件,它们基于闪存(芯片)。SSD可以更快地处理I / O,从而显着降低延迟。
鉴于我们以毫秒(千分之一秒)为单位来衡量HDD的平均I / O延迟,而以微秒(百万分之一秒)为单位来衡量SSD I / O操作的延迟。
由于减少了每个I / O请求的等待时间,因此SSD在各种可能的方式上均胜过HDD。即使是廉价的消费类SSD,也只能以0.15毫秒(150纳秒)的延迟至少维持约5000+ IOPS。该延迟比企业15K RPM硬盘的最佳延迟大约高40倍。
固态驱动器通常可以并行处理I / O请求。这意味着,在运行中有更多I / O请求的较大队列深度可以显示出更高的IOPS,而延迟却有有限的增加(但并非微不足道)。
较旧的SATA消费类SSD的随机I / O性能
更现代的企业级固态硬盘显示出更好的延迟和IOPS。SATA接口似乎是主要瓶颈。
企业SATA SSD的随机I / O性能
在所有相关指标上,SSD的性能均优于HDD,但价格与容量相关。
重要说明: SSD 不适用于数据的归档存储。数据作为电荷存储在芯片中,这些电荷会随着时间的流逝而减少。尽管最合适的存储方法可能是磁带,但是即使硬盘驱动器也更适合脱机归档。
SSD实际性能与广告性能
宣传许多SSD的性能数字为80,000-100,000 IOPS,且延迟相当大。根据工作负载,您可能只会观察到部分性能。
这些较高的80K-100K IOPS数据大多数是通过对非常高的队列深度(16-32)进行基准测试而获得的。SSD可以从此类队列深度中受益,因为它可以并行处理许多这些I / O请求。
请注意:如果您的工作负载不适合这种模式,则可能会看到较低的性能数字。
如果我们看一下上面的Intel SSD图表,我们可能会注意到随着队列深度的增加,IOPS的数字如何才开始接近标榜的80K + IOPS。因此,了解您自己的工作负载的特征很重要。
袭击
如果将多个硬盘驱动器组合在一起,则可以创建RAID阵列。RAID阵列是一种虚拟存储设备,其容量和性能超过单个硬盘驱动器。这样可以在单个计算机的范围内扩展存储。
RAID还用于(或有人说主要用于)通过确保冗余(驱动器故障不会导致数据丢失)来确保可用性。但对于本文,我们重点关注其性能特征。
SSD可以实现令人印象深刻的连续吞吐速度,每秒可达到数GB。单个硬盘永远无法达到这些速度,但是如果将许多硬盘组合在一起形成RAID阵列,则速度可能会非常接近。例如,我自己的NAS可以使用24个驱动器来达到这样的速度。
RAID还提高了随机访问模式的性能。RAID阵列中的硬盘驱动器可以协同工作以服务那些I / O请求,因此RAID阵列的IOPS明显高于单个驱动器。更多的驱动器意味着更多的IOPS。
带有8个7200 RPM驱动器的RAID 5
下图显示了1 TB 7200 RPM驱动器的8驱动器RAID 5阵列的读取IOPS性能。我们运行随机4K读取请求的基准。
请注意,IOPS如何随着队列深度的增加而增加。
但是,这个世界上没有免费的东西。较高的队列深度(充当缓冲区)确实会增加延迟。
请注意,延迟超过20毫秒有多快,很快变得几乎无法使用。
具有8 x 10,000 RPM驱动器的RAID 5
以下是对10,000 RPM硬盘进行类似测试的结果。请注意,IOPS和延迟数字要好得多。
延迟看起来好多了:
将SSD放入RAID是有意义的。尽管它们比硬盘驱动器更可靠,但它们可能会发生故障。如果您关心可用性,RAID是不可避免的。此外,您可以观察到与硬盘驱动器相同的好处:将资源集中在一起,与单个SSD相比,可以实现更高的IOPS数字和更大的容量。
容量与性能
以下内容主要针对硬盘驱动器,尽管固态驱动器也可能如此。
我们将硬盘驱动器放在RAID阵列中,以得到比单个驱动器所能提供的更多的IOPS。在某些时候(随着工作负载的增加),我们可能会达到RAID阵列可以维持的最大IOPS数量,并具有可接受的延迟。
即使我们仅使用RAID阵列存储容量的50%,也可以达到此IOPS /延迟阈值。例如,如果使用RAID阵列托管虚拟机,则无法添加更多虚拟机,因为这将导致延迟上升到无法接受的水平。
可能感觉很多好的存储空间都在浪费,从某种意义上说,这可能是正确的。因此,纯粹为它们可以提供的IOPS购买较小的10,000 RPM或15,000 RPM驱动器可能是明智的策略,并且放弃了容量。
因此,在某些情况下,您可能不得不订购并添加10个以上的硬盘驱动器以满足IOPS / Latency的要求,同时仍然有足够的空间。
这种情况不太可能发生,因为SSD接管了性能存储层的角色,并且(更大容量的)硬盘驱动器被推向了“在线”档案存储的角色。
结束语
希望本文能使您对存储性能有更好的了解。尽管只是介绍,但它可能有助于您更好地了解存储性能的挑战。
1. https://zh.wikipedia.org/wiki/ 硬磁盘驱动器性能_特征_数据传输率rate