`
sysx
  • 浏览: 1279 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

iostat

阅读更多
[转] http://zhumeng8337797.blog.163.com/blog/static/100768914201152610245925/

dd命令

dd其实是工作于比较低层的一个数据拷贝和转换的*nix平台的工具,但是因为dd命令支持*nix平台的一些特殊设备,因此我们可以利用dd命令的这个特性来简单的测试磁盘的性能。

先说一下两个相关的特殊设备

/dev/null
    空设备,通常用作输出设备,这个是*nix系统上面的黑洞,所有送到这个空设备上的内容都会凭空消失。
/dev/zero
    空字符,通常用作输入,从/dev/zero中读取时,它能源源不断的提供空字符(ASCII NUL, 0×00)出来,要多少有多少。

于是就有了下面的用法:

    测试磁盘的写入

/usr/bin/time dd if=/dev/zero of=/tmp/foo bs=4k count=1024000

这个命令时往磁盘的文件/tmp/foo中写入一个4G大小的文件,当然文件的内容全部是空字符了,同时用/usr/bin/time来对命令的执行进行计时,命令中的bs指的是写入文件时的块大小,其实就相当于Oracle中的block大小了,count是写入的块数。采取这种方法来写入数据时只是测试的连续读磁盘的性能,而不是随机读的性能,不能采取这种方法检查一个机器的IOPS的,只能检查磁盘的吞吐率。

    测试磁盘的读取

/usr/bin/time dd if=/tmp/foo of=/dev/null bs=4k

上面的命令是从/tmp/foo文件中读取数据,然后扔掉,这里bs用的是读取时块的大小。和上面写入的命令一样,这样测试的仅仅是最大的读取性能,而不是随机IO的性能。

    还能读写同时测试

/usr/bin/time dd if=/tmp/foo of=/tmp/foo2 bs=4k

在上面的命令中都用到了time命令对操作进行计时,这样才能正确的进行判断。要记住的一点是dd命令只能够提供一个大概的测试,通过这个简单的命令可以对磁盘系统的最大性能有一个大概的了解,要了解更详细的信息还要通过其他方法来查看。

topiostat命令

top理解iostat的各项输出


在Linux中,我们执行一个iostat -x命令,我们能看到如下的输出
$iostat -x
Linux 2.4.21-50a6smp (linux)         11/03/2009

avg-cpu:  %user   %nice    %sys %iowait   %idle
           0.42    0.00    0.26    0.47   98.86

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
hdc          0.01   0.00  0.00  0.00    0.07    0.00     0.03     0.00    24.48     0.00    4.90   4.57   0.00
hda          0.89   8.54  0.74  4.49   12.60  104.22     6.30    52.11    22.32     0.03    5.41   1.01   0.53

我们先列举一下各个性能指标的简单说明。

rrqm/s
    每秒进行merge的读操作数目。
wrqm/s
    每秒进行merge的写操作数目。
r/s
    每秒完成的读I/O设备次数。
w/s
    每秒完成的写I/O设备次数。
rsec/s
    每秒读扇区数。
wsec/s
    每秒写扇区数。
rkB/s
    每秒读K字节数。
wkB/s
    每秒写K字节数。
avgrq-sz
    平均每次设备I/O操作的数据大小(扇区)。
avgqu-sz
    平均I/O队列长度。
await
    平均每次设备I/O操作的等待时间(毫秒)。
svctm
    平均每次设备I/O操作的服务时间(毫秒)。
%util
    一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的。

要理解这些性能指标我们先看下图

IO的执行过程的各个参数


IO的执行过程的各个参数

上图的左边是iostat显示的各个性能指标,每个性能指标都会显示在一条虚线之上,这表明这个性能指标是从虚线之上的那个读写阶段开始计量的,比如说图中的w/s从Linux IO scheduler开始穿过硬盘控制器(CCIS/3ware),这就表明w/s统计的是每秒钟从Linux IO scheduler通过硬盘控制器的写IO的数量。

结合上图对读IO操作的过程做一个说明,在从OS Buffer Cache传入到OS Kernel(Linux IO scheduler)的读IO操作的个数实际上是rrqm/s+r/s,直到读IO请求到达OS Kernel层之后,有每秒钟有rrqm/s个读IO操作被合并,最终转送给磁盘控制器的每秒钟读IO的个数为r/w;在进入到操作系统的设备层(/dev/sda)之后,计数器开始对IO操作进行计时,最终的计算结果表现是await,这个值就是我们要的IO响应时间了;svctm是在IO操作进入到磁盘控制器之后直到磁盘控制器返回结果所花费的时间,这是一个实际IO操作所花的时间,当await与svctm相差很大的时候,我们就要注意磁盘的IO性能了;而avgrq-sz是从OS Kernel往下传递请求时单个IO的大小,avgqu-sz则是在OS Kernel中IO请求队列的平均大小。

现在我们可以将iostat输出结果和我们前面讨论的指标挂钩了。
平均单次IO大小(IO Chunk Size) <=> avgrq-sz

平均IO响应时间(IO Response Time) <=> await

IOPS(IO per Second) <=> r/s + w/s

吞吐率(Throughtput) <=> rkB/s + wkB/s

topiostat的应用实例
top观察IO Scheduler的IO合并(IO Merge)

前面说过IO在执行过程中会被合并以提高效率,下面就结合dd命令和iostat命令看一下。

我们先执行dd命令,设置bs参数值为1k,完整命令如下
dd if=/dev/zero of=test bs=1k count=1024000

同时打开另外一个终端执行iostat命令,这里只查看变化那个磁盘的更改,每秒刷新一次数据,完整命令如下
iostat -x hdc7 1

然后我们可以得到下面的结果
Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
hdc7         0.00 9447.00  0.00 776.00    0.00 80616.00     0.00 40308.00   103.89   480.18  805.95   1.29 100.00

avg-cpu:  %user   %nice    %sys %iowait   %idle
           0.50    0.00   56.00   43.50    0.00

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
hdc7         0.00 9534.00  0.00 872.00    0.00 81384.00     0.00 40692.00    93.33   274.56  401.19   1.14  99.00

avg-cpu:  %user   %nice    %sys %iowait   %idle
           2.50    0.00   46.50   14.00   37.00

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
hdc7         0.00 6766.00  1.00 276.00    8.00 58808.00     4.00 29404.00   212.33   197.27  321.66   1.95  54.00

avg-cpu:  %user   %nice    %sys %iowait   %idle
           0.50    0.00    0.50    0.00   99.00

看结果中第一组数据中的avgrq-sz,为103.89个扇区,磁盘的每个扇区为512字节,因此平均IO大小为103.89*512/1024=52k字节,远远大于我们dd命令时给定的参数1k字节,也就是说IO在中间被合并了。看巨大的wrqm/s也能得出同样的结论。


top附:在Windows中监视IO性能


本来准备写一篇windows中监视IO性能的,后来发现好像可写的内容不多,windows在细节这方面做的不是那么的好,不过那些基本信息还是有的。

在Windows中监视性能基本都用性能监视器了,与IO性能相关的有两个大类,一个是”LogicalDisk”,另外一个是”PhysicalDisk”,”LogicalDisk”更多的是用来监视文件相关的IO性能,而”PhysicalDisk”则是用来监视LUN或者是磁盘卷,下面就列举下与前面所列举的IO性能相关的计数器,具体的自己研究了:

单次IO大小

        Avg. Disk Bytes/Read
        Avg. Disk Bytes/Write

IO响应时间

        Avg. Disk sec/Read
        Avg. Disk sec/Write

IOPS

        Disk Reads/sec
        Disk Writes/sec
        Disk Transfers/sec

IO吞吐率

        Disk Bytes/sec
        Disk Read Bytes/sec
        Disk Write Bytes/sec





   IOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请求通常为读或写数据操作请求。随机读写频繁的应用,如OLTP(Online Transaction Processing),IOPS是关键衡量指标。另一个重要指标是数据吞吐量(Throughput),指单位时间内可以成功传输的数据数量。对于大量顺序读写的应用,如VOD(Video On Demand),则更关注吞吐量指标。

    传统磁盘本质上一种机械装置,如FC, SAS, SATA磁盘,转速通常为5400/7200/10K/15K rpm不等。影响磁盘的关键因素是磁盘服务时间,即磁盘完成一个I/O请求所花费的时间,它由寻道时间、旋转延迟和数据传输时间三部分构成。
    寻道时间Tseek是指将读写磁头移动至正确的磁道上所需要的时间。寻道时间越短,I/O操作越快,目前磁盘的平均寻道时间一般在3-15ms。
    旋转延迟Trotation是指盘片旋转将请求数据所在扇区移至读写磁头下方所需要的时间。旋转延迟取决于磁盘转速,通常使用磁盘旋转一周所需时间的1/2表示。比如,7200 rpm的磁盘平均旋转延迟大约为60*1000/7200/2 = 4.17ms,而转速为15000 rpm的磁盘其平均旋转延迟约为2ms。
    数据传输时间Ttransfer是指完成传输所请求的数据所需要的时间,它取决于数据传输率,其值等于数据大小除以数据传输率。目前IDE/ATA能达到133MB/s,SATA II可达到300MB/s的接口数据传输率,数据传输时间通常远小于前两部分时间。

    因此,理论上可以计算出磁盘的最大IOPS,即IOPS = 1000 ms/ (Tseek + Troatation),忽略数据传输时间。假设磁盘平均物理寻道时间为3ms, 磁盘转速为7200,10K,15K rpm,则磁盘IOPS理论最大值分别为,
    IOPS = 1000 / (3 + 60000/7200/2) = 140
    IOPS = 1000 / (3 + 60000/10000/2) = 167
    IOPS = 1000 / (3 + 60000/15000/2) = 200
    固态硬盘SSD是一种电子装置, 避免了传统磁盘在寻道和旋转上的时间花费,存储单元寻址开销大大降低,因此IOPS可以非常高,能够达到数万甚至数十万。实际测量中,IOPS数值会受到很多因素的影响,包括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。

   IOPS的测试benchmark工具主要有Iometer, IoZone, FIO等,可以综合用于测试磁盘在不同情形下的IOPS。对于应用系统,需要首先确定数据的负载特征,然后选择合理的IOPS指标进行测量和对比分析,据此选择合适的存储介质和软件系统。下面的磁盘IOPS数据来自http://en.wikipedia.org/wiki/IOPS,给大家一个基本参考。
  • 大小: 63.4 KB
分享到:
评论

相关推荐

    AIX的iostat命令解析.docx

    AIX的iostat命令解析 AIX操作系统中的iostat命令是一种强大的磁盘性能分析工具,用于监控和分析磁盘的性能和活动情况。在本文中,我们将详细介绍iostat命令的使用和解析,并探讨其在磁盘性能分析和优化中的应用。 ...

    Linux下使用iostat监测IO状态

    Linux 下使用 iostat 监测 IO 状态 iostat 是 Linux 系统中一个强大的工具,用于监测和分析 IO 状态。通过 iostat,我们可以获取丰富的 IO 状态数据,从而帮助我们更好地了解系统的性能问题。 基本使用 -------- ...

    iostat2pcp-3.9.2

    无法通过yum安装 所有依赖包都在里面 CentOS 6.4 I/O工具iostat所有依赖包

    iostat 监视磁盘操作,磁盘IO

    `iostat`是一个强大的工具,用于实时监控Linux和Unix系统的输入/输出(I/O)活动,它可以帮助管理员识别磁盘瓶颈,优化系统资源分配,确保服务的稳定运行。本篇文章将详细介绍`iostat`命令及其相关的磁盘IO指标。 `...

    iostat_vmstat_详解

    本文将重点介绍三个关键的性能分析工具:vmstat、iostat和sar。 首先,vmstat是Virtual Memory Statistics的简称,主要用于监控系统的虚拟内存、进程和CPU活动。通过vmstat,我们可以获取关于系统整体运行状态的...

    各种UNIX平台下vmstat与iostat输出结果详解

    UNIX 平台下 vmstat 与 iostat 输出结果详解 vmstat 和 iostat 是 UNIX 平台下两个常用的性能监测命令,vmstat 主要用于显示虚拟内存、进程、磁盘 I/O、CPU 使用率等信息,而 iostat 主要用于显示磁盘 I/O 情况。这...

    SUN 硬盘HardError清除插件 iostat-HradErro清除.zip

    标题 "SUN 硬盘HardError清除插件 iostat-HradErro清除.zip" 提供的信息表明,这个压缩包包含了一个针对SUN系统(Sun Microsystems公司的计算机硬件和软件产品)的硬盘错误清除工具,特别关注的是“HardError”问题...

    unix平台下vmstst与iostat说明

    UNIX 平台下 vmstst 与 iostat 说明 UNIX 系统维护过程中经常用到的 vmstst 与 iostat 说明非常实用。vmstst 命令用于显示虚拟内存、进程、磁盘 I/O 和 CPU 的使用情况,而 iostat 命令用于显示磁盘 I/O 和 CPU 的...

    各种UNIX平台下vmstat与iostat输出结果详解.docx编程资料

    ### 各种UNIX平台下vmstat与iostat输出结果详解 #### vmstat工具概述 `vmstat` 是一个用于报告虚拟内存统计信息的强大工具,主要用于监控系统的虚拟内存子系统及进程、内存、交换、块I/O、系统及CPU活动等。通过...

    iostat,linux下IO读写分析工具

    iostat,linux下IO读写分析工具

    iostat-nvme0n1.xml

    一个zabbix监控模板,用于监控系统中的nvme0n1的性能,值取自iostat。agent端脚本见文章

    iostat用法说明

    iostat用法,详细说明如何通过iostat来查看硬盘的io情况

    我的资源-iostat实测

    《深入理解iostat:服务器I/O性能监控与分析》 iostat是一款强大的Linux系统工具,用于监控系统的输入输出性能,特别是在服务器环境中,它能帮助我们及时发现和解决I/O瓶颈问题。通过对iostat的深入理解和实测,...

    cacti linux系统iostat监控

    在Linux系统中,Cacti可以利用iostat命令来监控系统的输入/输出(I/O)性能,帮助管理员了解磁盘、块设备以及其他存储资源的使用情况。iostat是System Monitoring Suite(sysstat)的一部分,可以提供CPU利用率和I/O...

    iostat来对linux硬盘IO性能进行检测

    《使用iostat工具检测Linux硬盘IO性能》 在Linux操作系统中,监控硬盘I/O性能是维护系统稳定性和优化性能的重要环节。iostat是一款强大的系统监控工具,它能够提供实时的磁盘输入/输出(I/O)统计信息,帮助我们...

    Linux IO实时监控iostat命令详解.pdf

    ### Linux IO实时监控iostat命令详解 #### 前言 在Linux系统管理与运维过程中,实时监控系统的I/O负载对于确保系统稳定性和性能至关重要。`iostat`工具作为一个强大的系统监视工具,能够帮助管理员监控系统中的磁盘...

    iostat各项指标含义.doc

    ### iostat各项指标含义详解 #### 一、概述 `iostat`是一款非常实用的工具,主要用于监控系统的输入/输出(I/O)设备负载情况。它可以帮助系统管理员了解磁盘活动的时间以及它们的平均传输速率,进而帮助确定系统的...

    pcp-import-iostat2pcp-5.3.5-2.el8.aarch64.rpm

    官方离线安装包,测试可用。请使用rpm -ivh [rpm完整包名] 进行安装

    Linux下使用iostat监测IO状态.docx

    ### Linux下使用iostat监测IO状态 #### 一、iostat简介及基本使用 在Linux系统中,性能监控是非常重要的环节之一。当遇到性能问题时,通过一系列的工具和命令可以帮助我们快速定位问题所在。`iostat`作为其中一个...

Global site tag (gtag.js) - Google Analytics