大部分人在考虑存储性能时,他们首先想到的是最大吞吐量。但是最大吞吐量就像汽车厂商给汽车标的最高速度。实际上,你几乎永远不会达到那个速度。考虑存储性能时也不应该只考虑最大吞吐量。
还拿汽车来举例,大部分时候,加速度和过弯的处理能力可能会比最大吞吐量更重要。这和存储性能是类似的。
大部分人都知道SSD固态硬盘一般比普通的机械硬盘快。但这不仅仅是因为固态硬盘的最大吞吐量更大。还和它们的IOPS(Input/Output operations per second, 每秒读写次数)有关。更高IOPS的存储器,会提高我们日常真实应用的性能。但是IOPS也不是唯一指标。更准备的说:IOPS只有和平均时延以及读写字节大小相关联时才有意义。让我们先来看IOPS和时延。
时延指的是单个读写操作被处理的时间。这点非常重要,拿一个每秒可以处理1000个读写操作并且平均时延是10毫秒的存储系统,和另一个每秒可以处理5000个读写操作但是平均时延是50毫秒的存储系统相比,前一个在应用性能上可能更好些。尤其是对那些对时延敏感的应用,比如说数据库服务。
所以,我们需要搞清楚:IOPS和时延是如何相互关联、影响的。这里,汽车的例子可能不太合适了,我们举另外一个例子。假设你在一个特殊的超市,顾客(IO请求)被收银员(磁盘)以平均10毫秒的速度所服务。将1秒除以10毫秒,我们可以知道这个收银员1秒可以服务100个顾客。但是同一时间收银员只能服务一个顾客,服务的顺序是线性连续的。
显然,尽管收银员一秒可以处理100个顾客,但是他没法同时处理这些顾客!所以当第一个顾客到达收银台时,在10毫秒的处理时间内,如果有第二个顾客到达,那么第二个顾客只能等待。当第二个顾客被服务时,处理时间依然是10毫秒,但是总体花费的时间可能是15毫秒甚至更长(比如两个顾客同时到达)。
所以,尽管磁盘可以在10毫秒的平均时延下处理一个独立的IO请求,但是对于应用来说,实际的时延可能会更高,因为部分IO请求在等待被处理。
这个例子也说明,排队等待会提高某些IO请求被处理的时间。所以你如果你将队列增大,你会发现平均时延也增大了。越长的队列意味着越高的时延,但是好处是也带来了更高的IOPS!!!
为什么磁盘在牺牲时延的情况下可以提高IOPS(并且这些读写的位置是随机的)?技巧在于,存储系统会将队列中的IO请求重新排序,使得实际对磁盘的访问在物理地址上更连续。所以磁盘可以在牺牲平均时延的情况下提高IOPS。但这种牺牲是否可接受取决于时延增加了多少,以及对应用层性能带来了多少提高。
英文原文地址: Understanding IOPS, Latency and Storage Performance by louwrentius (https://louwrentius.com/understanding-iops-latency-and-storage-performance.html)
本文完,作者yoko,尊重劳动人民成果,转载请注明原文出处: https://pengrl.com/p/37967/