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

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 5中 IO模型.pptx

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

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

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

    基于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 常用压测命令

    Linux 系统中,性能优化是一个非常重要的方面,了解系统的运行状况是优化的前提。常用的压测命令可以帮助我们了解系统的运行状况,从而进行相应的优化配置。下面将详细介绍这些命令的使用方法和应用场景。 一、...

    Linux Socket编程、Linux IO模型、Linux 进程间通信完整用例

    通过学习和实践,开发者能够构建高效的网络服务,设计高性能的IO策略,并实现在多进程环境中的无缝协作。无论你是初学者还是经验丰富的开发者,这个资源都将帮助你提升技能,深化对Linux系统底层原理的理解。

    Linux 性能监测:介绍

    随着技术的发展与业务需求的增长,Linux作为全球广泛使用的操作系统之一,在企业级应用、云计算、高性能计算等领域扮演着至关重要的角色。为了确保系统的稳定运行与高效利用资源,进行有效的性能监测成为了一项必不...

    Linux高性能服务器编程源码.zip

    在Linux系统中,高性能服务器编程是一项复杂而精细的工作,它涉及到多线程、网络通信、内存管理、并发处理、I/O模型优化等多个方面。这个名为"Linux高性能服务器编程源码.zip"的压缩包很可能是为了帮助开发者理解...

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

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

    linux的IO编程

    在Linux操作系统中,I/O(Input/Output)编程是系统编程的重要组成部分,它涉及到进程与外部设备之间的数据传输。Linux提供了多种I/O模型,包括同步I/O、异步I/O、阻塞I/O和非阻塞I/O,以及更高级的I/O复用技术如 ...

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

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

    Linux查看磁盘io开销的几种方法.docx

    在Linux系统中,监控磁盘I/O开销是优化系统性能的关键步骤,因为高I/O开销可能导致系统响应变慢,影响用户体验。本文将介绍三种常用的方法来查看Linux系统的磁盘I/O开销:top命令、vmstat命令以及iostat命令。 1. *...

    Linux监视CPU的命令

    ### Linux监视CPU性能的关键知识点 #### 1. mpstat 命令详解 - **简介**:`mpstat` 是 `Multiprocessor Statistics` 的缩写,是一个强大的系统监控工具,用于报告与 CPU 相关的统计信息。这些信息通常存储在 `/...

    OS + Linux performance tools / cpu / mem / io / net / fiIe / Intel VTune

    标题中的"OS + Linux performance tools / cpu / mem / io / net / file / Intel VTune"指的是一系列关于操作系统,特别是Linux系统性能监控的工具,包括对CPU、内存、输入/输出(IO)、网络和文件系统的监控,以及...

    vCenter性能调优和性能监控

    vimtop是一个开源工具,类似于Linux系统中的top命令,可以用来实时监控vCenter Server的性能状态。vimtop提供了以下功能: 1. 监控vCenter Server的所有关键进程,包括CPU、内存、线程等的使用情况。 2. 展示实时...

    iostat 监视磁盘操作,磁盘IO

    在IT系统管理中,有效地监控磁盘操作和IO性能至关重要,因为这直接影响到系统的响应速度和整体性能。`iostat`是一个强大的工具,用于实时监控Linux和Unix系统的输入/输出(I/O)活动,它可以帮助管理员识别磁盘瓶颈...

    磁盘IO占用测试工具

    3. **测试工具**: 为了评估磁盘IO占用,我们可以使用各种工具,例如Windows自带的资源监视器、 Perfmon(性能监视器)、iostat(Unix/Linux环境)或专用的第三方软件。这些工具可以提供实时的磁盘读写速率、等待时间...

    LINUX_PPT.rar_Linux IO_linux ppt

    在Linux系统中,理解进程管理与I/O(输入/输出)编程是深入学习Linux技术的重要部分。本资料"Linux_PPT.rar"包含了关于Linux进程与信号、I/O编程的详细讲解,旨在帮助用户提升在Linux环境下的技术能力。 首先,我们...

    详细介绍IO管理器的一篇报告

    4. **多路复用IO**(如 select、poll、epoll 等):允许多个描述符在同一时间被监视,当有数据准备好时,系统通知应用程序。 四、IO管理器在不同操作系统中的实现 1. **Windows**:Windows的IO管理器主要基于完成...

    Linux 服务器性能分析和测试工具详解.docx

    vmstat 是 Linux 中监控内存的常用工具,可以对操作系统的虚拟内存、进程、CPU 等的整体情况进行监视。vmstat 的常规用法是 vmstat interval times,即每隔 interval 秒采样一次,共采样 times 次,如果省略 times,...

Global site tag (gtag.js) - Google Analytics