2014.05.05
论存储iops和throughput吞吐量之间的关系
iops和throughput吞吐量两个参数是衡量存储性能的主要指标。iops表示存储每秒传输io的数量,throughput吞吐量则表示每秒数据的传输总量。两者在不同的情况下都能表示存储的性能状况,但应用的场景不尽相同。同时,两者之间也存在着相互的联系,本文就iops和 throughput吞吐量对存储性能衡量的场景入手,描述两者之间的变化关系与计算方法。帮助读者更好的了解存储的性能分析与规划。
iops与throughput的关系:
iops(io per second)是用来计算i/o流中每个节点中每秒传输的数量(关于io流中的每个节点的解释,参考文章:浅析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吞吐量这两个参数,本文的观点总结为以下几点:
1. 性能工具统计的throughput吞吐量永远达不到实际的i/o流中节点的理论“带宽”,原因是性能工具不会统计i/o的包头信息,而是实际的数据传输量。
2. 磁盘物理层面iops和throughput哪个先达到了物理磁盘的极限,就决定了这个物理磁盘的性能阀值,然而决定哪个先达到性能阀值的就是i/o的大小。
3. 性能监控工具显示iops低或者throughput低于预期,先不要直接认为存储性能存在问题,搞清楚应用的i/o大小,再做后续判断。
4. 存储性能另外一个重要因素还有磁盘响应时间(response time),本文的内容是建立在存储可以提供接受访问内的响应时间为前提。