iostat和linux的I/O过程

iostat可以查看linux系统的io数据,基本使用可以看《Linux iostat监测IO状态》,这里摘录一下参数和底层的对应。 iostat性能数据来自/proc/diskstats,磁盘列表数据来自/etc/mtab

 相关参数列表

 
完成的merge的操作数目 rrqm/s wrqm/s
完成的I/O操作数目 r/s w/s
每秒扇区操作数 rsec/s wsec/s
每秒读/写K字节数 rkB/s wkB/s
平均请求扇区的大小 avgrq-sz
平均I/O队列长度 avgqu-sz
平均每次设备I/O操作的等待时间(毫秒) await
平均每次设备I/O操作的服务时间(毫秒) svctm

I/O流程图

下图展示了应用的读写调用到写入磁盘的过程以及参数的检测位置: 

问题:

为什么在os buffer下来的io是r/s+rrqm和w/s+wrqm呢?

rrqm是在io调度层,当发现io和前面队列中io可以合并,就合并到队列中。因此,在os buffer时的io数量到io调度层后,io数量其实变少了。

r/s和w/s的值为什么比rsec和wsec小?

rs和ws是和物理设备交互(控制器)的次数,rsec和wsec是Linux的一种计数,也就是扇区。图上说,从块设备开始往下都是512字节大小。这个512字节就是扇区大小,这是Linux内核中写死的。到最下层,写物理设备时,每次io不一定就是512字节的,因为大部分物理存储设备都已经不是512字节一个物理块了。因此一个rs可能是多rsec。那么rs的值要小于rsec也就正常了。

avgrq就是(wsec+rsec)/(ws+rs)的值,可以反映出每次io读/写物理设备的sec大小。

总结:

  1. await和svctm的差很大时,注意操作系统I/O调度的性能。
  2. fread()是C标准函数,有用户级缓存,内部调用read()。read()是系统函数,有系统缓存。注意区别。
  3. merge操作位于系统I/O调度层,当操作系统发现不同的读取请求读取的是相同sector的数据,FIleSystem会将这个请求合并。
  4. 扇区(Sector)是驱动操作的最小单位,是磁盘级别的,可通过 fdisk -l 查看扇区大小。簇(Cluster)也称作块(Block),是文件系统的最小单位,由文件系统定义,可通过 blockdev –getbsz /dev/<dev> 查看。通常block大小是Sector的倍数。
  5. I/O调度算法:CFQ(完全公平排队I/O调度程序)     NOOP(无操作调度程序)      Deadline(截止时间调度程序)     AS(预料I/O调度程序)。

以上部分内容摘自《磁盘IO满负荷性能分析 》

转载请注明:旅途@KryptosX » iostat和linux的I/O过程

时间: 2024-11-02 14:24:52

iostat和linux的I/O过程的相关文章

Linux系统的启动过程

  一直使用linux系统,却对系统启动过程及系统初始化和各种服务的启动不太清楚.今天终于搞明白整个是怎么一回事了.本来想自己写篇文章,刚好在网上看到一篇不错的介绍,很详细,就直接拿来了. Linux系统的启动过程: BIOS自检 -> grub引导程序 -> 加载内核 -> 执行init -> 启动shell -> login登陆系统 系统启动各个阶段的详细介绍: 一.BIOS自检 计算机在接通电源之后首先由BIOS进行POST自检,然后依据BIOS内设置的引导顺序从硬盘.

走进Linux之systemd启动过程

走进Linux之systemd启动过程 Linux系统的启动方式有点复杂,而且总是有需要优化的地方.传统的Linux系统启动过程主要由著名的init进程(也被称为SysV init启动系统)处理,而基于init的启动系统被认为有效率不足的问题,systemd是Linux系统机器的另一种启动方式,宣称弥补了以传统Linux SysV init为基础的系统的缺点.在这里我们将着重讨论systemd的特性和争议,但是为了更好地理解它,也会看一下通过传统的以SysV init为基础的系统的Linux启动

申请免费15天Plesk面板密钥Key及Linux系统安装Plesk面板过程

一般我们在购买和使用海外虚拟主机的时候可能接触的cPanel面板和Plesk面板居多,前者大部分使用在Linux服务器中,后者应用在Windows系统中比较常见.最近一段时间,老左也有看到不少的网友在Linux VPS以及Windows服务器中有使用Plesk面板,当然是购买的付费版的,也有的是使用官方提供的15天免费Key密钥测试看看的.   Plesk,是由Parallels公司开发的专业主机管理软件,能够帮助主机商.个人用户快速的部署网站,简化用户账户.邮件系统.网站群的管理,当然也支持中

Zabbix Linux客户端的安装过程

上次说了Zabbix 服务端的安装,今天在linux上安装了客户端,过程如下: (1)下载zabbix客户端软件 http://www.zabbix.com/download.php 根据客户端系统版本的不同也要选择不同版本的zabbix. 我用的linux 2.6.X i386 以此为例 wget www.zabbix.com/downloads/2.0.3/zabbix_agents_2.0.3.linux2_6.i386.tar.gz (2)新建zabbix 用户和组 groupadd z

Linux的开机启动过程简介

开机过程指的是从打开计算机电源直到LINUX显示用户登录画面的全过程.分析LINUX开机过程也是深入了解LINUX核心工作原理的一个很好的途径. 启动第一步--加载BIOS 当 你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关 信息.设备启动顺序信息.硬盘信息.内存信息.时钟信息.PnP特性等等.在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了.在BIOS将系 统的控制权交给硬盘第一个扇区之

linux下安装vmware过程详解

由于项目需要,要在Linux下虚拟一个Windows,经过查找些资料,发现可一用VMware来实现,当然还有其他一些虚拟机可以使用如Win4lin,bochs等,但经过试用,只有VMware还好用.以下就是安装的步骤. 首先到https://www.vmware.com/ 下载最新的安装包,比如VMware-workstation-4.0.5-6030.tar.gz,假设放在"/tmp"下.然后使用下面的命令解压后安装. 1.tar –zxvf VMware-workstation-4

Redhat linux源码安装过程

源码就是用特定的语言来编写的文本,比如我们常见的c语言.然而源码的安装要经过配置.编译的一系列的复杂过程,那么如此的麻烦为何还要来安装源码呢?其实这是为了让我们的系统来使用更新的功能和更多的功能,另外还可以更加个性化我们的配置.就拿apache来说吧,红帽官方提供给我们的是2.2的版本,但是最新的的版本已经到2.4了,所以有些时候我们需要安装源码. 下面我们来简单说说关于源码安装的必备环境: 源码需要编译成可执行文件,而编译则需要有相应的编译环境.当我们的系统中安装了Develepment To

微型linux系统的裁剪过程

前面我们介绍过基于busybox制作一个小linux,这篇文章则介绍的是从头至尾,一步一步根据系统启动流程制作的微型linux,并且逐渐将其功能完善. 系统启动流程: POST 加电自检,载入一段程序完成基本及核心硬件的检测 --> BIOS 根据BIOS中设定的引导次序,查找对应设备上的MBR --> 读取MBR的BootLoader,BootLoader中配置了要引导的操作系统的内核的位置 --> 读取内核,内核进行初始化,需要initrd 将Kernel和真正的根文件系统连接起来

Linux操作系统的内核初始化过程详解

概况 系统的引导和初始化是操作系统实现控制的第一步,也是集中体现系统优劣的重要部分.LINUX作为一个免费的准UNIX操作系统,在众多业余爱好者以及小型商业处理市场表现不俗,成为继WINDOWS系列后的另一个主流.了解LINUX系统的初始化,对于进一步掌握UNIX系统是十分有帮助的. 通常,LINUX系统的初始化可以分为两部分:内核部分和init程序部分.内核主要完成系统的硬件检测和初始化,init程序则主要完成系统的各项配置. 内核初始化详解 通常情况下,计算机首先用LILO程序引导内核的一部