论存储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),本文的内容是建立在存储可以提供接受访问内的响应时间为前提。

  

时间: 2024-10-02 02:36:08

论存储IOPS和Throughput吞吐量之间的关系的相关文章

如何使用QoS管理分配存储IOPS?

尽管任何硬件资源都有可能成为影响虚拟机性能的瓶颈,但存储IOPS往往是限制因素之一.因为存储IOPS往往供不应求,所以虚拟化厂商提供了允许管理员限制虚拟机存储I/O消耗的功能.然而高效率地使用上述功能的关键是了解存储IOPS当前是如何在虚拟机之间分配的. 每个hypervisor厂商都有各自的测量并分配存储IOPS的方式.以微软Hyper-V为例,调节存储IOPS消耗的主要机制借助于QoS管理功能,该功能往往被称为存储QoS. 使用QoS管理 QoS管理设置基于单块虚拟硬盘.如图A所示,该功能可

总结java实现八大排序算法及之间的关系

8种排序之间的关系: 1, 直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排 好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数 也是排好顺序的.如此反复循环,直到全部排好顺序. (2)实例 (3)用java实现 [java] view plaincopy package com.njue; public class insertSort { public insertSort(){ inta[]={49,38,65,97,76,13,27,

XML和数据库之间的关系

xml|数据|数据库  1.0 简介    本论文简要的探讨了XML和数据库之间的关系,同时列出一些可以使用数据库处理XML文档的软件. 虽然这里不打算详尽地介绍这些软件,但是笔者希望它能够描述使用数据库处理XML文档中的主要部分.这里有点偏向与关系数据库,因为我的经验如此.     2.0 XML是数据库吗?     在开始讨论XML和数据库之前,我们需要回答一个萦绕在很多心头的问题: "XML是数据库吗?"在严格意义上将,如果"XML"是指XML文档时,答案是&

如何定义数据库表之间的关系

在设计关系型数据库时,最主要的一部分工作是将数据元素如何分配到各个关系数据表中.一旦完成了对这些数据元素的分类,对于数据的操作将依赖于这些数据表之间的关系,通过这些数据表之间的关系,就可以将这些数据通过某种有意义的方式联系在一起.例如,如果你不知道哪个用户下了订单,那么单独的订单信息是没有任何用处的.但是,你没有必要在同一个数据表中同时存储顾客和订单信息.你可以在两个关系数据表中分别存储顾客信息和订单信息,然后使用两个数据表之间的关系,可以同时查看数据表中每个订单以及其相关的客户信息.如果正规化

创建Oracle数据库、数据库名与实例名与SID之间的关系(图文详解)

目录 目录 软件环境 前言 安装Oracle监听程序 启动停止监听程序 创建数据库 数据库名db_name 数据库实例名instance_name 数据库名与实例名的关系 操作系统环境变量ORACLE_SID 软件环境 操作系统 RHEL 6.1 软件环境 Oracle10gr2 前言 在上一篇RHEL6.1 安装 Oracle10gr2 (图文.解析)中记录了如何成功的在RHEL6.1安装Oracle10gr2,但是在安装的过程中没有创建数据库,本篇主要记录了如果创建数据库和监听程序. 安装O

c二维数组名与指针的指针之间的关系

问题描述 c二维数组名与指针的指针之间的关系 int arr[3][4]; 书上说arr是指针的指针. 但是有点问题,为什么arr和arr[0]的值是一样的. 如果它是指针的指针的话,那么arr应该在一个内存空间1中存着arr[0]的地址,这个内存空间也有自己的地址. 但是这个内存空间的地址却与内存空间中存着的地址是相同的... 解决方案 arr的值本身是二维数组的首地址,它存储的内容也是数组的首地址 printf("%p %p ", arr, *arr);// 这2个值一样,它存储的

c++-malloc、free、new、delete之间的关系,动态内存原理?

问题描述 malloc.free.new.delete之间的关系,动态内存原理? 想问的有很多,比如:堆的本质是什么?是一个类似指针链表的东西吗? 当[new int [100]]时,这个数组的内存地址是不是连续的一大整块?如果不连续,那么分配的时候又是如何跳跃的? 在delete这个数组时,编译器怎么知道要删除的内存有多大,删除完A地址后,编译器又怎么知道下一个要删除的是B地址? 还有,new []和delete可以配套使用吗? 解决方案 楼主请进传送门:http://www.perfect-

静态联编,动态联编,类指针之间的关系,虚函数与多态性,纯虚函数,虚析构函数

1.静态联编,是程序的匹配,连接在编译阶段实现,也称为早期匹配.重载函数使用静态联编. 2.动态联编是指程序联编推迟到运行时进行,所以又称为晚期联编.switch语句和if语句是动态联编的例子. #include<iostream> void go(int num) { } void go(char *str) { } //class //::在一个类中 class A { public: void go(int num) { } void go(char *str) { } }; void

Cocoa框架类之间继承关系

原文出处:http://blog.csdn.net/duanyipeng/article/details/7110324 Cocoa框架类之间继承关系是本文要介绍的内容,主要是来了解cocoa的继承关系,Cocoa框架包含两个核心框架:Foundation和Application Kit (UIKit) 框架. 在Cocoa开发中是必要的,至于其它框架(如:Core Data.Sync Services.Address Book.Preference Panes.Screen Saver.Web