开发者社区> x64.ink> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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安装ImageMagick与JMagick完成过程及配置
原文地址:http://www.iitshare.com/linux-install-imagemagick-jmagick.html 一、安装背景 最近在服务器上部署了HapiCMS的产品,因为其对图片的压缩是采用ImageMagick实现的,所以需要在服务器上面安装ImageMagick与jmagick,将操作的过程写了下来,和大家分享下,其中包含rpm方式安装、linux32位安装ImageMagick与jmagick、linux64位安装ImageMagick与jmagick,如果大家有什么问题可以进行留言,有时间的话会及时进行回复。
1344 0
【Linux】Linux双网卡绑定实现
Linux双网卡绑定实现就是使用两块网卡虚拟成为一块网卡,这个聚合起来的设备看起来是一个单独的以太网接口设备,通俗点讲就是两块网卡具有相同的IP地址而并行链接聚合成一个逻辑链路工作。
805 0
+关注
95
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载