IOPS和Throughput

时间:2021-12-07 16:49:04

IOPS和Throughput吞吐量两个参数是衡量存储性能的主要指标。IOPS表示存储每秒传输IO的数量,Throughput吞吐量则表示每秒数据的传输总量。两者在不同的情况下都能表示存储的性能状况,但应用的场景不尽相同。同时,两者之间也存在着相互的联系,本文就IOPS和Throughput吞吐量对存储性能衡量的场景入手,描述两者之间的变化关系与计算方法。帮助读者更好的了解存储的性能分析与规划。
IOPS与Throughput的关系:IOPS(IO per Second)是用来计算I/O流中每个节点中每秒传输的数量。通常情况下,广义的IOPS指得是服务器和存储系统处理的I/O数量。但是,由于在IO传输的过程中,数据包会被分割成多块(block),交由存储阵列缓存或者磁盘处理,对于磁盘来说这样每个block在存储系统内部也被视为一个I/O,存储系统内部由缓存到磁盘的的数据处理也会以IOPS来作为计量的指标之一。本文中提到的IOPS,是指得广义的IOPS,即由服务器发起的,并由存储系统中处理的I/O单位。
IOPS通常对于小I/O,且传输I/O的数量比较大的情况下,是一个最主要的衡量指标。例如,典型的OLTP系统中,高的IOPS则意味着数据库的事务可以被存储系统处理。
Throughput吞吐量是用来计算每秒在I/O流中传输的数据总量。这个指标,在大多数的磁盘性能计算工具中都会显示,最简单的在Windows文件拷贝的时候,就会显示MB/s。通常情况下,Throughput吞吐量只会计算I/O包中的数据部分,至于I/O包头的数据则会被忽略在Throughput吞吐量的计算中。广义上的Throughput吞吐量,也会被叫做“带宽”,用来衡量I/O流中的传输通道,比如2/4/8Gbps Fibre Channel、60Mbps SCSI等等。但 “带宽”会包括通道中所有数据的总传输量的最大值,而Throughput吞吐量则是只保护传输的实际数据,两者还是有些许区别。

Throughput吞吐量衡量对于大I/O,特别是传输一定数据的时候最小化耗时非常有用。备份数据的时候是一个典型的例子。在备份作业中,我们通常不会关心有多少I/O被存储系统处理了,而是完成备份总数据的时间多少。
IOPS和Throughput吞吐量之间存在着线性的变化关系,而决定它们的变化的变量就是每个I/O的大小。当被传输的I/O比较小的情况下,每个I/O所需传输的时间会比较少,单位时间内传输的I/O数量就多。
而由于处理数据包头,总的时间内传输实际数据相对较低。
当I/O尺寸比较大的情况下,传输每个I/O的时间增大,IOPS数量下降。但是相比更高的百分比的I/O通道用来传输实际数据,Throughput则明显上升。

我们可以用一个简单的公式来计算Throughput和IOPS之间的关系:
Throughput MB/s = IOPS * KB per IO / 1024
假设一个10个10K SAS磁盘,每个磁盘提供140 IOPS,总共有1400最大IOPS。理论上这些磁盘处理不同的IO大小,所能达到的Throughput吞吐量是有区别的。简单的来说,物理层面IOPS和Throughput哪个先达到了物理磁盘的极限,就决定了这个物理磁盘的性能阀值。下面的计算公式可以看到,单位I/O大小可以使得吞吐量成倍提升,但是未能达到10个SAS磁盘1GB/S(每个磁盘100MB/s带宽)的理论“带宽”。显而易见,因为大多数应用的I/O不会那么大,所以你会看到存储阵列的吞吐量远小于厂商提供的理论值,原因就是因为IOPS先达到了性能阀值,使得吞吐量无法再提升。当然也有特殊的应用,例如流媒体服务器等,应用端可以使用2MB的I/O大小,那么吞吐量利用率显然会更加高,IOPS的要求则相对较低了。
MB/s = 1400 * 64 /1024 = 87.5 MB/s
MB/s = 1400 * 128 /1024 = 175 MB/s
MB/s = 1400 * 256 /1024 = 350 MB/s

综上所述,在规划存储性能和处理存储性能问题的时候,需要综合看IOPS和Throughput吞吐量这两个参数,本文的观点总结为以下几点:

性能工具统计的Throughput吞吐量永远达不到实际的I/O流中节点的理论“带宽”,原因是性能工具不会统计I/O的包头信息,而是实际的数据传输量。
磁盘物理层面IOPS和Throughput哪个先达到了物理磁盘的极限,就决定了这个物理磁盘的性能阀值,然而决定哪个先达到性能阀值的就是I/O的大小。
性能监控工具显示IOPS低或者Throughput低于预期,先不要直接认为存储性能存在问题,搞清楚应用的I/O大小,再做后续判断。
存储性能另外一个重要因素还有磁盘响应时间(Response Time),本文的内容是建立在存储可以提供接受访问内的响应时间为前提。