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

http://www.csdn.net/article/2015-01-14/2823552

IOPS和Throughput吞吐量两个参数是衡量存储性能的主要指标。IOPS表示存储每秒传输IO的数量,Throughput则表示每秒数据的传输总量。本文就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吞吐量这两个参数,本文的观点总结为以下几点:

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

看小IO多还是大IO多
大IO:对于磁盘来说每个block在存储系统内部也被视为一个I/O,block的大小
 
 
IOPS通常对于单个小I/O,且传输I/O的数量比较大的情况下,是一个最主要的衡量指标。
IOPS这里IO传输的速度取决于单个IO的IO size,一个大IO会占用比较多的带宽才能传输完,如果当前带宽不够,当前大IO较多的情况下就会拖慢IOPS
 
 
同理,如果大IO比较多,那么Throughput相对就会较大,在带宽一定的情况下,所容纳的IO就会较少
如果小IO比较多,那么Throughput相对就会较小,在带宽一定的情况下,所容纳的IO就会较多
 
Throughput这个是动态的,在带宽不够的时候要加带宽
通常还是看IOPS比较好,在带宽一定的时候,IOPS通常对于小I/O,且传输I/O的数量比较大的情况下,是一个最主要的衡量指标。例如,典型的OLTP系统中,高的IOPS则意味着数据库的事务可以被存储系统处理。

 
 
 
 
 
 

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

  1. IOPS和Throughput

    IOPS和Throughput吞吐量两个参数是衡量存储性能的主要指标.IOPS表示存储每秒传输IO的数量,Throughput吞吐量则表示每秒数据的传输总量.两者在不同的情况下都能表示存储的性能状况, ...

  2. 二.OC基础--1,对象的存储细节,2,#pragma mark指令,3,函数和对象方法的区别,4,对象和方法之间的关系 ,5.课堂习题

    1,对象的存储细节, 1. 当创建一个对象的时候:Person *p1 = [Person new],做了三件事情: 1,申请堆内存空间: 2,给实例变量初始化: 3,返回所申请空间的首地址; 2. ...

  3. PostgreSQL表空间、数据库、模式、表、用户/角色之间的关系

    看PostgreSQL9的官方文档,我越看越迷糊,这表空间,数据库,模式,表,用户,角色之间的关系怎么在PostgreSQL里这么混乱呢?经过中午的一个小实验,我逐渐理清了个中来龙去脉.下面我来还原我 ...

  4. block(代码块)的介绍以及使用方法和变量之间的关系

    http://blog.csdn.net/menxu_work/article/details/8762848 block(代码块)的介绍以及使用方法和变量之间的关系 block(代码块)的介绍以及使 ...

  5. spring data jpa hibernate jpa 三者之间的关系

    JPA规范与ORM框架之间的关系是怎样的呢? JPA规范本质上就是一种ORM规范,注意不是ORM框架——因为JPA并未提供ORM实现,它只是制订了一些规范,提供了一些编程的API接口,但具体实现则由服 ...

  6. 电脑结构和CPU、内存、硬盘三者之间的关系

    前面提到了,电脑之父——冯·诺伊曼提出了计算机的五大部件:输入设备.输出设备.存储器.运算器和控制器. 我们看一下现在我们电脑的: 键盘鼠标.显示器.机箱.音响等等. 这里显示器为比较老的CRT显示器 ...

  7. UNICODE与UTF8和GBK之间的关系

    http://wenku.baidu.com/link?url=bheGEzfSjEx-QX-ciME5oKooKYE08_NJZ02l2kKFa7kVZJ4t8Ks2uSNByovgP2QL6btq ...

  8. PostgreSQL表空间、模式、表、用户/角色之间的关系

    PostgreSQL表空间.模式.表.用户/角色之间的关系是本文我们主要要介绍的内容,表空间,数据库,模式,表,用户,角色之间的关系到底是怎样的呢?接下来我们就开始介绍这一过程. 实验出角色与用户的关 ...

  9. [转]C#综合揭秘——细说进程、应用程序域与上下文之间的关系

    引言 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作.虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提高 ...

随机推荐

  1. iOS添加自定义字体

    字体有相应的字体文件,一般是以ttf或者otf为后缀,我们可以去一些第三方网站去下载(也有人专门做了字体出售),Google Fonts是个比较好的网站,可以去找找看.我们就用Open Sans这个字 ...

  2. Android学习之PopupWindow

    Android的对话框有两种:PopupWindow和AlertDialog. 详细说明如下: AlertDialog是非阻塞式对话框:AlertDialog弹出时,后台还可以做事情: AlertDi ...

  3. JS中方法判断存在

    function test(){ alert("test"); } if(typeof test!='undefined') {alert(1) test(); } else {a ...

  4. thinkphp3.2 实现上一篇和下一篇

    现在在做一个能够在内容页点击上一篇可以看到上一篇,点击下一篇可以看到下一篇. 首先http://www.mmkb.com/zhendao/index/news_show?code=98 现在code= ...

  5. 使用__FILE__和__LINE__定位错误

    #include <stdio.h> int main() { printf("this fake error is in %s on line %d\n", __FI ...

  6. 【Linux】 crontab 实现每秒执行

    linux crontab 命令,最小的执行时间是一分钟, 如果要在小于一分钟执行.就要换个方法来实现 1   crontab 的延时: 原理:通过延时方法 sleep N  来实现每N秒执行. cr ...

  7. Robotium源码解读-native控件/webview元素的获取和操作

    目前比较有名的Uitest框架有Uiautomator/Robotium/Appium,由于一直对webview元素的获取和操作比较好奇,另外Robotium代码量也不是很大,因此打算学习一下. 一. ...

  8. 【转】Navigation Drawer(导航抽屉)

    创建一个导航抽屉 创建抽屉布局 初始化抽屉列表 处理导航项选点击事件 监听导航抽屉打开和关闭事件 点击应用图标来打开和关闭导航抽屉   创建一个导航抽屉 导航抽屉是一个位于屏幕左侧边缘用来显示应用程序 ...

  9. 使用 intellijIDEA + gradle构建的项目如何debug

    在intellij IDEA里建立gradle项目(使用jett插件的web项目) 使用intellijIDEA提供的debug无效(无法进入断点) 摸索了一下,通过远程调试的方法来进行调试是可行的 ...

  10. 使用docker搭建公司redmine服务器

    What is Redmine? Redmine is a flexible project management web application. Written using the Ruby on ...