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流程图

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

问题:

为什么在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过程

目录
相关文章
linux磁盘I/O监控
【4月更文挑战第1天】在Linux中监控磁盘I/O性能至关重要,工具如iostat(-d显示磁盘统计)、iotop(进程级I/O查看)、vmstat、/proc/diskstats(详细统计信息)、Node Exporter(Prometheus集成)和Zabbix(动态监控与LLD)提供关键指标,如IOPS、吞吐量、利用率和服务时间,助力系统优化和故障排查。
274 4
linux磁盘I/O监控
深度解析linux主机:从应用到硬盘,玩转系统I/O性能优化攻略!
深度解析linux主机:从应用到硬盘,玩转系统I/O性能优化攻略!
142 0
Linux系统编程之文件I/O函数的使用:介绍文件I/O函数的基本概念、用法和实现方式
Linux系统编程之文件I/O函数的使用:介绍文件I/O函数的基本概念、用法和实现方式
156 1
实战Linux I/O多路复用:借助epoll,单线程高效管理10,000+并发连接
本文介绍了如何使用Linux的I/O多路复用技术`epoll`来高效管理超过10,000个并发连接。`epoll`允许单线程监控大量文件描述符,显著提高了资源利用率。文章详细阐述了`epoll`的几个关键接口,包括`epoll_create`、`epoll_ctl`和`epoll_wait`,以及它们在处理并发连接中的作用。此外,还探讨了`epoll`在高并发TCP服务场景的应用,展示了如何通过`epoll`和线程/协程池来构建服务框架。
980 26
|
7月前
|
Linux I/O 重定向与管道
【8月更文挑战第17天】重定向在Linux中改变命令I/O流向,默认有&quot;&gt;&quot;覆盖输出至文件及&quot;&gt;&gt;&quot;追加输出至文件末尾,便于保存结果;使用&quot;&lt;&quot;从文件读取输入而非键盘,高效处理数据。文件描述符如0(stdin)、1(stdout)、2(stderr)标识I/O资源,支持读写操作。管道以&quot;|&quot;连接命令,使前一命令输出成为后一命令输入,如排序用户或找出CPU占用最高的进程,构建复杂数据处理流程。
74 9
在Linux中,如何监控磁盘I/O性能?
在Linux中,如何监控磁盘I/O性能?
在Linux中,如何使用vmstat和iostat命令?
在Linux中,如何使用vmstat和iostat命令?
|
7月前
|
Linux I/O 重定向与管道
【8月更文挑战第14天】输出重定向可将命令结果存入文件,如`&gt;`覆盖写入或`&gt;&gt;`追加写入。输入重定向从文件读取数据,如`&lt;`代替键盘输入。这些操作利用文件描述符(如0:stdin, 1:stdout, 2:stderr)管理I/O。管道`|`连接命令,使前一命令输出作为后一命令输入,便于数据处理,如排序用户`sort -t: -k3 -n /etc/passwd | head -3`或查找CPU占用高的进程`ps aux --sort=-%cpu | head -6`。
62 4
|
7月前
|
Linux I/O 重定向简介
Linux I/O 重定向简介
55 2