`

IO系统性能之三:在Linux中监视IO性能(zz)

 
阅读更多
from:http://www.dbabeta.com/2009/io-performence-03_check-performence-in-linux.html

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的执行过程的各个参数

上图的左边是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

top延伸阅读
time命令
dd(Unix)
Learn The dd Command
iostat详解
linux下的sar工具命令小结
分享到:
评论

相关推荐

    Linux操作系统性能监测:磁盘IO篇

    总之,理解和掌握Linux操作系统中关于磁盘IO的管理和优化方法对于提升系统的整体性能至关重要。通过对内存页、缺页中断、文件缓存区以及不同类型的页面管理等概念的深入了解,我们可以更好地优化应用程序的运行效率...

    Linux 性能监测:IO

    磁盘通常是计算机最慢的子系统,也是最容易出现性能瓶颈的地方,因为磁盘离 CPU 距离最远而且 CPU 访问磁盘要涉及到机械操作,...要监测 IO 性能,有必要了解一下基本原理和 Linux 是如何处理硬盘和内存之间的 IO 的。

    rapidIO嵌入式系统互连_rapidio_rapidIO嵌入式系统互连_rapidio嵌入式_嵌入式_

    《RapidIO嵌入式系统互连》是关于嵌入式系统中的一种高速互连技术的探讨,主要聚焦于RapidIO技术及其在系统设计中的应用。RapidIO是一种开放标准的、基于串行通信协议的互连技术,最初由RapidIO Trade Association...

    详解linux下使用IOMETER测试磁盘IO性能.doc

    在 Linux 下测试磁盘 IO 性能非常重要,因为磁盘 IO 性能直接影响着系统的整体性能。IOMETER 是一个流行的磁盘 IO 测试工具,本文将详细介绍如何在 Linux 下使用 IOMETER 测试磁盘 IO 性能。 一、安装 IOMETER 在 ...

    Linux-IO性能优化基础工具和实践

    Linux-IO性能优化基础工具和实践: 基础篇-Linux IO stack overview 基础篇-read syscall IO stack 工具篇-iostat数据可靠吗 工具篇-blktrace原理和应用 工具篇-debugfs应用 Cache server机械盘IO性能瓶颈分析 实践...

    IO知识和系统性能深度调优全解.pdf

    IO知识和系统性能深度调优全解.pdf

    Linux系统下PCIE to RapidIO桥驱动设计与实现.pdf

    该文档详细介绍了在Linux系统下设计和实现PCIE to RapidIO桥驱动的过程。该桥驱动是为了使X86架构的CPU能够通过PCIE总线连接到RapidIO系统中,实现了PCIE总线网络和RapidIO总线网络的无缝对接。 在该文档中,作者...

    linux 5中 IO模型.pptx

    在Linux操作系统中,有五种主要的IO模型,分别是阻塞IO、非阻塞IO、IO多路复用、信号驱动IO和异步IO。这些模型决定了应用程序如何与硬件进行交互,以获取和处理输入/输出数据。以下是对这五种模型的详细解释: 1. ...

    Linux IO数据通道我理解之分享

    在Linux系统中,输入/输出(Input/Output,简称IO)操作是一项基础而重要的功能。为了更好地管理和优化IO操作,Linux内核设计了一套复杂的IO数据通道处理机制。这一机制主要由几个关键层次构成: 1. **用户空间与...

    Linux IO数据通道我理解

    块IO层是Linux IO架构中的核心组成部分之一,它位于文件系统层和设备驱动层之间。该层的主要功能包括: 1. **缓存管理**:利用内存作为缓存,提高数据读写速度。 2. **请求合并**:通过合并相邻或相近的IO请求,...

    Linux系统性能优化

    在进行性能优化之前,我们需要了解影响Linux系统性能的各种因素,并且掌握一系列优化工具与方法。 一、影响Linux性能的各种因素 1、系统硬件资源 硬件资源包括CPU、内存、磁盘IO和网络带宽等方面。CPU性能影响着...

    漫谈linux文件IO

    通过深入理解 Linux 文件 I/O 的各个层面及其工作原理,我们可以更有效地优化应用程序中的 I/O 操作,进而提升整个系统的性能。无论是选择合适的缓冲策略,还是利用特定的技术如 `mmap` 或 `O_DIRECT`,都需要根据...

    commons-io-2.11.0-API文档-中文版.zip

    Maven坐标:commons-io:commons-io:2.11.0; 标签:commons、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持...

    Linux文件IO跟标准IO总结

    在Linux操作系统中,文件输入/输出(IO)是程序与数据交互的核心机制。本文将深入探讨Linux中的文件IO和标准IO,以及它们之间的差异。首先,我们从基本概念出发,理解这两种IO方式。 **文件IO**是Linux系统中最常见...

    在Linux系统中IO调度的选择

    ### 在Linux系统中IO调度的选择 #### I/O调度概述 在Linux系统中,I/O调度算法扮演着极其重要的角色,特别是在多个进程同时竞争磁盘I/O资源时。它负责优化请求的顺序和时机,以达到最佳的整体I/O性能。本文将详细...

    如何在Linux中监视IO系统性能

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

    linux中查看io的相关命令

    Linux 操作系统中,查看 IO 状态的命令非常重要,特别是在服务器出现异常情况时。以下是查看 Linux 服务器硬盘 IO 访问负荷的方法: 1. 使用 Top 命令 Top 命令可以显示当前系统的实时状态,包括 CPU 使用率、内存...

    操作系统IO系统

    - **IO设备的功能**:IO设备主要负责数据的输入和输出工作,是用户与计算机系统交互的重要途径之一。 #### 2. IO硬件 - **端口**:端口是连接外部设备和计算机内部系统的接口,例如常见的串行端口(如COM端口)。 -...

    Linux高性能服务器编程,linux高性能服务器编程 pdf,C,C++

    2. **多线程与并发处理**:在Linux环境中,如何通过多线程技术来提高服务器并发性能,包括线程创建、同步和通信机制,如互斥锁、条件变量、信号量等。 3. **异步I/O模型**:深入理解各种I/O模型,如阻塞I/O、非阻塞...

    gcr-io-distroless-stati.rar

    gcr.io/distroless/static:latest,制作k8s.gcr.io/metrics-server/metrics-server:v0.4.1的基础资源

Global site tag (gtag.js) - Google Analytics