`
zhangchibang
  • 浏览: 339177 次
社区版块
存档分类
最新评论

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

阅读更多



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命令只能够提供一个大概的测试,通过这个简单的命令可以对磁盘系统的最大性能有一个大概的了解,要了解更详细的信息还要通过其他方法来查看。


iostat命令


理解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


iostat的应用实例

观察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也能得出同样的结论。


附:在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

分享到:
评论

相关推荐

    基于linux的GPIO子系统,使用poll函数监听IO口实时电平变化

    基于Linux开发板的GPIO子系统,使用poll()函数监听io口的实时电平变化,使用示例: GpioApi ioTest = new GpioApi(this); ioTest-&gt;addOutIO(GpioApi::IO_C_0);//添加输出口 ioTest-&gt;addInIO(GpioApi::IO_G_11);//...

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

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

    在linux环境下通过java代码操作串口,Java_gnu_io_RXTXPort_nativeDrain报错解决方案

    该文件用于解决通过java控制串口发送数据给时在Linux环境下报错,但在windows环境下正常。报错内容如下: [librxtxSerial.so+0x75da] Java_gnu_io_RXTXPort_nativeDrain+0xea。经过一番研究得出结论为为rxtx包版本...

    GPIO两个版本_基于linux的GPIO子系统,使用poll函数监听IO口实时电平变化

    里面 是两个版本,一个是带工程的,基于Linux开发板的GPIO子系统,使用poll()函数监听io口的实时电平变化,使用示例: GpioApi ioTest = new GpioApi(this); ioTest-&gt;addOutIO(GpioApi::IO_C_0);//添加输出口 ...

    在linux终端中绘制磁盘IO的图形。-C/C++开发

    diskgraph监视磁盘IO简介diskgraph工具将在终端中Linux下绘制磁盘IO的图形。 示例:$ ./diskgraph / dev / nvme0n1 $ ./diskgraph / dev / sda您也可以省略dev前缀,然后执行以下操作:$ ./diskgraph sda定期(间隔...

    linux服务器性能监测

     打这三个文件,将里面的disable = yes都改成 disable = no (disabled用在默认的{}中禁止服务)  或是把# default: off都设置成 on ,并把“#”去掉,这个的意思就是在xinetd启动的时候默认都启动上面的三个服务! ...

    SQL驱动的操作系统检测,监视和分析。-C/C++开发

    osquery osquery是一个由SQL驱动的操作系统工具,监视和分析框架。 适用于Linux,macOS,Windows和FreeBSD。 平台构建状态osquery osquery是SQL支持的操作系统工具,监视和分析框架。 适用于Linux,macOS,Windows和...

    Linux性能监控系统-Linux开发

    其核心模块包括:服务器群集监视,ES群集监视,CPU监视,内存监视,数据监视(mysql,oracle,pg),服务心跳检测,应用程序进程管理,磁盘IO监视,系统负载监视,监视警报信息推送。 WGCLOUD-v2.3.6中文版自述文件...

    jadupl2.github.io:SADMIN for Linux系统管理员

    SADMIN工具v1.3.1 简要描述;... 在库存中添加,或删除系统。 它收集和。 从或命令行访问所有这些信息。 查看服务器场的并查看可以免费使用的IP。 帮助您保持最新的O / S更新。 选择要自动更新的

    一个简单的异步IO库

    linux c实现的一个简单的异步IO操作,目前支持socket 异步IO,文件读异步,定时器和监视文件状态发生改变 。

    agent:HetrixTools服务器监视代理(Linux)

    HetrixTools Linux服务器监视代理 可在此处找到文档: : -=更改日志=- 版本1.5.9: 添加了磁盘IO数据收集。 添加了磁盘inode数据收集。 增加了跟踪特定端口上的网络连接数量的功能。 1.5.8版: 改进的压缩...

    Linux系统优化程序和监视-https://oguzhaninan.github.io/Stacer-Web-Linux开发

    Linux System Optimizer和Monitoring审核安装Ubuntu 14所需的文件运行sudo apt-get install systemd -f AppImage下载Linux System Optimizer和Monitoring赞助商审核必需的软件包curl,systemd PPA存储库(对于ubuntu...

    bcc:BCC-用于基于BPFLinux IO分析,联网,监视等工具

    eBPF被IngoMolnár为: 此循环中更有趣的功能之一是能够将eBPF程序(由内核执行的用户定义的沙盒字节码)附加到kprobes。 这样就可以在实时内核映像上进行用户定义的检测,而该映像永远不会崩溃,挂起或对内核产生...

    入门学习Linux常用必会60个命令实例详解doc/txt

    这是因为Linux和许多版本的Unix一样,提供了虚拟控制台的访问方式,允许用户在同一时间从控制台(系统的控制台是与系统直接相连的监视器和键盘)进行多次登录。每个虚拟控制台可以看作是一个独立的工作站,工作台...

    上尉:Linux的数据完整性系统管理

    大队长 BlockCaptain是Linux的开源数据完整性系统。 该项目试图严格评估和减轻可能导致数据丢失的故障模式。 主要数据丢失的可能性应接近0%。 可以合理减轻的每一种风险都应该是,例如: 通过定期清理和监视内核...

    ytop:用Rust编写的TUI系统监视器

    缺少功能macOS缺少磁盘io计数器和进程命令行流程过滤未实现未使用鼠标目前不支持FreeBSD安装ytop当前可在Linux和macOS上运行,并计划为所有主要平台提供支持。包管理器AUR ytop提供三种不同的AUR软件包: ytop , ...

    BCC-用于基于BPFLinux IO分析,联网,监视等工具-C/C++开发

    BPF编译器集合(BCC)BCC是用于创建有效的内核跟踪和操纵程序的工具包,其中包括一些有用的工具和示例。...eBPF被IngoMolnár描述为:此循环中最有趣的功能之一是能够附加eBPF程序(用户定义的沙盒字节)。

    linux epoll机制详解

    在linux 没有实现epoll事件驱动机制之前,我们一般选择用select或者poll等IO多路复用的方法来实现并发服务程序。在linux新的内核中,有了一种替换它的机制,就是epoll。 select()和poll() IO多路复用模型 select的...

    进程管理经典软件MFC

    引是正在运行的程序实体,并且包括这个运行的程序中占据的所有系统资源,比如说CPU(寄存器),IO,内存,网络资源等。很多人在回答进程的概念的时候,往往只会说它是一个运行的实体,而会忽略掉进程所占据的资源。比如...

    RPVR:与 Put.io 集成的 Axel 下载管理器

    受启发,该工具旨在在 Linux 下载盒上运行并提供集成。 它会: 一般的 使用下载、监视、暂停和取消文件 - 提供 Web GUI。 下载完成后,清理并运行您喜欢的任何后续脚本 把 IO 集成 将文件添加到 put.io 传输队列 ...

Global site tag (gtag.js) - Google Analytics