[转帖]io 性能指标及其基准测试

io,性能指标,及其,基准,测试 · 浏览次数 : 0

小编点评

**磁盘性能指标** * **Input/Output Per Second (IOPS)**:每秒处理的 I/O 请求数量,通常用于衡量磁盘性能。 * **Random Read IOPS、Random Write IOPS、Sequential Read IOPS、Sequential Write IOPS**:分别表示在随机读取、随机写入和顺序读取/写入情况下 IOPS 的值。 * **吞吐量**:指单位时间内可以成功传输的数据数量,用于衡量磁盘读写效率。 * **平均寻址时间**:指从磁盘读取数据所需的平均时间。 * **旋转延时**:指磁头从找到对应磁道到开始读取数据所需的时间。 * **传输时间**:指从数据块读取到磁盘上的平均时间。

正文

https://www.jianshu.com/p/23a956e09b1c

 

磁盘io性能指标

主要有2个:

  • IOPS
    IOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,I/O请求通常为读或写数据操作请求。对于随机读写频繁的应用,IOPS是关键衡量指标。

    IOPS可细分为如下几个指标:

    • Toatal IOPS,混合读写和顺序随机I/O负载情况下的磁盘IOPS,这个与实际I/O情况最为相符,大多数应用关注此指标。
    • Random Read IOPS,100%随机读负载情况下的IOPS。
    • Random Write IOPS,100%随机写负载情况下的IOPS。
    • Sequential Read IOPS,100%顺序读负载情况下的IOPS。
    • Sequential Write IOPS,100%顺序写负载情况下的IOPS。
  • 吞吐量
    数据吞吐量(Throughput),指单位时间内可以成功传输的数据数量。对于大量顺序读写的应用,则更关注吞吐量指标。

IOPS 与吞吐量的关系:每秒 I/O 吞吐量= IOPS* 平均 I/O SIZE。
从公式可以看出: I/O SIZE 越大,IOPS 越高,那么每秒 I/O 的吞吐量就越高。因此,我们会认为 IOPS 和吞吐量的数值越高越好。实际上,对于一个磁盘来讲,这两个参数均有其最大值,而且这两个参数也存在着一定的关系。

机械磁盘计算

对于机械磁盘来说一个完整的IO操作是这样进行的:

当控制器对磁盘发出一个IO操作命令的时候,磁盘的驱动臂(Actuator Arm)带读写磁头(Head)离开着陆区(Landing Zone,位于内圈没有数据的区域),移动到要操作的初始数据块所在的磁道(Track)的正上方,这个过程被称为寻址(Seeking),对应消耗的时间被称为寻址时间(Seek Time);

但是找到对应磁道还不能马上读取数据,这时候磁头要等到磁盘盘片(Platter)旋转到初始数据块所在的扇区(Sector)落在读写磁头正上方的之后才能开始读取数据,在这个等待盘片旋转到可操作扇区的过程中消耗的时间称为旋转延时(Rotational Delay);

接下来就随着盘片的旋转,磁头不断的读/写相应的数据块,直到完成这次IO所需要操作的全部数据,这个过程称为数据传送(Data Transfer),对应的时间称为传送时间(Transfer Time)。

完成这三个步骤之后一次IO操作也就完成了。

所以,我们看硬盘厂商的宣传单的时候我们经常能看到3个参数,分别是:

  • 平均寻址时间
  • 片旋转速度
  • 最大传送速度

这三个参数就可以提供给我们计算上述三个步骤的时间:

第一个寻址时间,考虑到被读写的数据可能在磁盘的任意一个磁道,既有可能在磁盘的最内圈(寻址时间最短),也可能在磁盘的最外圈(寻址时间最长),所以在计算中我们只考虑平均寻址时间。

 
image.png

第二个旋转延时,和寻址一样,当磁头定位到磁道之后有可能正好在要读写扇区之上,这时候是不需要额外额延时就可以立刻读写到数据,但是最坏的情况确实要磁盘旋转整整一圈之后磁头才能读取到数据,所以这里我们也考虑的是平均旋转延时。

第三个传送时间,磁盘参数提供我们的最大的传输速度,当然要达到这种速度是很有难度的,但是这个速度却是磁盘纯读写磁盘的速度,因此只要给定了单次 IO的大小,我们就知道磁盘需要花费多少时间在数据传送上,这个时间就是IO Chunk Size / Max Transfer Rate。

现在我们就可以得出这样的计算单次IO时间的公式:

IO Time = Seek Time + 60 sec/Rotational Speed/2 + IO Chunk Size/Transfer Rate

于是我们可以这样计算出IOPS:

IOPS = 1/IO Time = 1/(Seek Time + 60 sec/Rotational Speed/2 + IO Chunk Size/Transfer Rate)

I/O 的分类
  • 大/小快IO
    这个数值指的是控制器指令中给出的连续读出扇区数目的多少

  • 连续/随机IO
    连续 I/O 指的是本次 I/O 给出的初始扇区地址和上一次 I/O 的结束扇区地址是完全连续或者相隔不多的。反之,如果相差很大,则算作一次随机 I/O

    连续 I/O 比随机 I/O 效率高的原因是:在做连续 I/O 的时候,磁头几乎不用换道,或者换道的时间很短;而对于随机 I/O,如果这个 I/O 很多的话,会导致磁头不停地换道,造成效率的极大降低。

  • 顺序/并发IO
    并发 I/O 就是指向一块磁盘发出一条 I/O 指令后,不必等待它回应,接着向另外一块磁盘发 I/O 指令

磁盘 I/O 基准性能测试工具

FIO是测试IOPS的非常好的工具。

常用参数:

  • filename: 指定文件(设备)的名称,可以通过冒号分割同时指定多个文件,如filename=/dev/sda:/dev/sdb。这个测试时直接写裸设备,有可能写坏文件系统。
  • directory: 设置filename的路径前缀,在后面的基准测试中,采用这种方式来指定设备。
  • name: 指定job的名字,在命令行中表示新启动一个job。
  • direct: bool类型,如果设置成true (1),表示不使用系统的 io buffer。
  • thread 使用pthread_create创建线程,另一种是fork创建进程。进程的开销比线程要大,一般都采用thread测试
  • ioengine: I/O引擎,现在fio支持19种ioengine。默认值是sync同步阻塞I/O,libaio是Linux的native异步I/O。
  • iodepth: 如果ioengine采用异步方式,该参数表示一批提交保持的io单元数。该参数可参考文章“Fio压测工具和io队列深度理解和误区”。
  • rw: I/O模式,可选 randread,randwrite,randrw
  • bs: I/O block大小,默认是4k。
  • size: 指定job处理的文件的大小。
  • numjobs: 指定job的克隆数(线程)。
  • time_based: 如果在runtime指定的时间还没到时文件就被读写完成,将继续重复知道runtime时间结束。
  • runtime: 指定在多少秒后停止进程。如果未指定该参数,fio将执行至指定的文件读写完全完成。
  • group_reporting: 当同时指定了numjobs了时,输出结果按组显示。

测试用例:

  • 100% 随机,读,4k
    fio -directory=/root/iotest -direct=1 -iodepth 1 -thread -rw=randread -ioengine=sync -bs=4k -size=4G -numjobs=50 -runtime=180 -group_reporting -name=rand_100read_4k
    
  • 70%读,30%写 4K
    fio -directory=/root/iotest -direct=1 -iodepth 1 -thread -rw=randrw  -rwmixread=70 -ioengine=sync -bs=4k -size=4G -numjobs=50 -runtime=180 -group_reporting -name=rand_70read_4k
    
磁盘I/O性能监控
cache 和 buffer 的区别

与[转帖]io 性能指标及其基准测试相似的内容:

[转帖]io 性能指标及其基准测试

https://www.jianshu.com/p/23a956e09b1c 磁盘io性能指标 主要有2个: IOPSIOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,I/O请

[转帖]FIO – IO压力测试工具

`https://blog.csdn.net/younger_china/article/details/71129541` 《存储工具系列文章》主要介绍存储相关的测试和调试工具,包括不限于dd、fio、vdbench、iozone、iometer、cosbench等性能负载工具,及strace等调

[转帖]文件系统读写性能fio测试方法及参数详解

简介 Fio 是一个 I/O 工具,用来对硬件进行压力测试和验证,磁盘IO是检查磁盘性能的重要指标,可以按照负载情况分成照顺序读写,随机读写两大类。 Fio支持13种不同的I/O引擎,包括:sync, mmap, libaio, posixaio, SG v3, splice, null, netw

[转帖]Redis性能之内部阻塞式操作及应对方法

文章目录 Redis实例都有哪些阻塞点和客户端交互的阻塞点集合的全量查询和聚合操作bigkey删除操作清空数据库 磁盘交互的阻塞点主从节点交互时的阻塞点切片集群实例交互时的阻塞点可以异步执行的阻塞点异步的子线程总结 Redis的网络IO和键值对读写都是由主线程完成的。 Redis实例都有哪些阻塞点

[转帖]A-Ops性能火焰图——适用于云原生的全栈持续性能监测工具

https://www.modb.pro/db/610990 对于开发及运维人员来讲,火焰图是一个经典的定位性能问题的方法。利用火焰图可以可视化系统资源(cpu占用、内存占用、调度、IO等)的占用情况,从而帮助技术人员快速定位资源异常使用的代码级根因,或者观察潜在性能劣化趋势,进而优化系统和应用的性

[转帖]vdbench - 性能压力测试工具

《存储工具系列文章》主要介绍存储相关的测试和调试工具,包括不限于dd、fio、vdbench、iozone、iometer、cosbench等性能负载工具,及strace等调试工具。 1. 概述 vdbench是一个I/O工作负载生成器,通常用于验证数据完整性和度量直接附加(或网络连接)存储性能。

[转帖]iometer - 性能压力测试工具

《存储工具系列文章》主要介绍存储相关的测试和调试工具,包括不限于dd、fio、vdbench、iozone、iometer、cosbench等性能负载工具,及strace等调试工具。 1 概述 Iometer 是一个免费的开源的测试磁盘性能的工具。和其他磁盘工具相比,可以测试 I/O 的传输率和平均

[转帖]硬盘IO性能

https://juejin.cn/post/6844904088715411463 我们大部分时间都是在开发应用系统,当我们的功能实现时和实现后,我们可能会经常的思考或者讨论关于性能方面的问题,性能优化也有很多个方面,那么我们今天主要来一起探讨一下IO性能。 谈到IO性能,我们就会联想到我们电脑的

[转帖]018 磁盘 IO 性能监控 / 压测工具 (sar、iotop、fio、iostat)

https://my.oschina.net/u/3113381/blog/5465063 1 sar 命令查看当前磁盘 IO 读写 sar(System Activity Reporter 系统活动情况报告)是 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:

[转帖]队列深度对IO性能的影响

https://www.modb.pro/db/43710 几年前一个客户的Oracle数据库经常HANG,老白帮他分析了一下,结论是存储老化,性能不足以支撑现有业务了。正好用户手头有个华为S5600T正好从核心系统中换下来放着没用,就把这个存储换上去了。换了新存储后,系统总体确实有所改善。数据库不