blktrace 深度了解linux系统的IO运作
http://blog.yufeng.info/archives/751
我们在Linux上总是要保存数据的,数据要么保存在文件系统里(如ext3),要么就在裸设备里面。我们在使用这些数据的时候都是通过文件这个抽象来访问的,操作系统会把我们需要的数据给我们,我们通常无需和块设备打交道。
从下图我们可以很清楚的看到:
我们会发现IO是个层次很深的子系统,有很复杂的数据流动线路。
至于操作系统如何去存储和获取这些数据对我们完全是黑盒子的,这通常不是问题。但是如果我们的IO很密集,我们就需要搞清楚IO具体是如何运作的,免的滥用IO和导致设计问题。
这时候你就需要blktrace这样的工具。
blktrace is a block layer IO tracing mechanism which provides detailed information about request queue operations up to user space.
它的作者Jens Axboe, 是内核IO模块的维护者,目前就职于FusionIO, 是个很nice的家伙,同时他还是著名IO评测工具fio的作者。
相关的文档:
users guide: http://pdfedit.petricek.net/bt/file_download.php?file_id=17&type=bug
HP的人写的指南:http://www.gelato.org/pdf/apr2006/gelato_ICE06apr_blktrace_brunelle_hp.pdf
CU上的小伙子写的: http://linux.chinaunix.net/bbs/viewthread.php?tid=1115851&extra=&ordertype=2
目前blktrace在大部分的Linux发行版都支持的,我们可以轻松的安装使用:
$ sudo yum install blktrace$ sudo blktrace /dev/sda5 -o - | blkparse -i - 8,5 2 1 0.000000000 0 C W 40247824 + 8 [0]0,0 2 2 0.000040884 4271 A W 31105920 + 8 <- (8,3) 1326008,5 2 3 0.000041214 4271 Q W 31105920 + 8 [(null)]8,5 2 4 0.000045947 4271 G W 31105920 + 8 [(null)]8,5 2 5 0.000046707 4271 P N [(null)]8,5 2 6 0.000047073 4271 I W 31105920 + 8 [(null)]0,0 2 7 0.000048282 4271 A W 31105928 + 8 <- (8,3) 1326088,5 2 8 0.000048357 4271 Q W 31105928 + 8 [(null)]8,5 2 9 0.000049137 4271 M W 31105928 + 8 [(null)]0,0 2 10 0.000050167 4271 A W 31105936 + 8 <- (8,3) 1326168,5 2 11 0.000050241 4271 Q W 31105936 + 8 [(null)]8,5 2 12 0.000050417 4271 M W 31105936 + 8 [(null)]0,0 2 13 0.000050984 4271 A W 31105944 + 8 <- (8,3) 1326248,5 2 14 0.000051047 4271 Q W 31105944 + 8 [(null)]8,5 2 15 0.000051258 4271 M W 31105944 + 8 [(null)]8,5 2 16 0.000051829 4271 U N [(null)] 18,5 2 17 0.000052699 4271 D W 31105920 + 32 [(null)]8,5 2 18 0.000108292 0 C W 31105920 + 32 [0]0,0 2 19 0.000127791 4271 A W 31105952 + 8 <- (8,3) 1326328,5 2 20 0.000128001 4271 Q W 31105952 + 8 [(null)]8,5 2 21 0.000128874 4271 G W 31105952 + 8 [(null)]8,5 2 22 0.000129373 4271 P N [(null)]8,5 2 23 0.000129706 4271 I W 31105952 + 8 [(null)]8,5 2 24 0.000130551 4271 U N [(null)] 18,5 2 25 0.000131330 4271 D W 31105952 + 8 [(null)]8,5 2 26 0.000172705 0 C W 31105952 + 8 [0]0,0 13 1 1266874889.709337223 4271 A W 40247824 + 8 <- (8,3) 92745048,5 13 2 1266874889.709338011 4271 Q W 40247824 + 8 [kjournald]8,5 13 3 1266874889.709343974 4271 G W 40247824 + 8 [kjournald]8,5 13 4 1266874889.709346653 4271 P N [kjournald]8,5 13 5 1266874889.709347728 4271 I W 40247824 + 8 [kjournald]8,5 13 6 1266874889.709350795 4271 U N [kjournald] 18,5 13 7 1266874889.709355396 4271 D W 40247824 + 8 [kjournald]0,0 21 1 0.504685570 4267 A W 92640335 + 8 <- (8,6) 2343928,5 21 2 0.504686212 4267 Q W 92640335 + 8 [kjournald]8,5 21 3 0.504690614 4267 G W 92640335 + 8 [kjournald]8,5 21 4 0.504691826 4267 P N [kjournald]8,5 21 5 0.504692896 4267 I W 92640335 + 8 [kjournald]0,0 21 6 0.504694268 4267 A W 92640343 + 8 <- (8,6) 2344008,5 21 7 0.504694448 4267 Q W 92640343 + 8 [kjournald]8,5 21 8 0.504695115 4267 M W 92640343 + 8 [kjournald]0,0 21 9 0.504696227 4267 A W 92640351 + 8 <- (8,6) 2344088,5 21 10 0.504696357 4267 Q W 92640351 + 8 [kjournald]8,5 21 11 0.504696615 4267 M W 92640351 + 8 [kjournald]0,0 21 12 0.504697422 4267 A W 92640359 + 8 <- (8,6) 2344168,5 21 13 0.504697565 4267 Q W 92640359 + 8 [kjournald]8,5 21 14 0.504697787 4267 M W 92640359 + 8 [kjournald]0,0 21 15 0.504698549 4267 A W 92640367 + 8 <- (8,6) 2344248,5 21 16 0.504698677 4267 Q W 92640367 + 8 [kjournald]8,5 21 17 0.504698939 4267 M W 92640367 + 8 [kjournald]8,5 21 18 0.504699954 4267 U N [kjournald] 18,5 21 19 0.504704050 4267 D W 92640335 + 40 [kjournald]8,5 2 27 0.504810390 0 C W 92640335 + 40 [0]0,0 2 28 0.504842324 4267 A W 92640375 + 8 <- (8,6) 2344328,5 2 29 0.504842594 4267 Q W 92640375 + 8 [kjournald]8,5 2 30 0.504844133 4267 G W 92640375 + 8 [kjournald]8,5 2 31 0.504845233 4267 P N [kjournald]8,5 2 32 0.504845703 4267 I W 92640375 + 8 [kjournald]8,5 2 33 0.504846958 4267 U N [kjournald] 18,5 2 34 0.504848547 4267 D W 92640375 + 8 [kjournald]8,5 2 35 0.504879109 0 C W 92640375 + 8 [0] CPU2 (8,5):Reads Queued: 0, 0KiB Writes Queued: 6, 24KiBRead Dispatches: 0, 0KiB Write Dispatches: 3, 24KiBReads Requeued: 0 Writes Requeued: 0Reads Completed: 0, 0KiB Writes Completed: 5, 48KiBRead Merges: 0, 0KiB Write Merges: 3, 12KiBRead depth: 0 Write depth: 2IO unplugs: 3 Timer unplugs: 0 CPU13 (8,5):Reads Queued: 0, 0KiB Writes Queued: 1, 4KiBRead Dispatches: 0, 0KiB Write Dispatches: 1, 4KiBReads Requeued: 0 Writes Requeued: 0Reads Completed: 0, 0KiB Writes Completed: 0, 0KiBRead Merges: 0, 0KiB Write Merges: 0, 0KiBRead depth: 0 Write depth: 2IO unplugs: 1 Timer unplugs: 0 CPU21 (8,5):Reads Queued: 0, 0KiB Writes Queued: 5, 20KiBRead Dispatches: 0, 0KiB Write Dispatches: 1, 20KiBReads Requeued: 0 Writes Requeued: 0Reads Completed: 0, 0KiB Writes Completed: 0, 0KiBRead Merges: 0, 0KiB Write Merges: 4, 16KiBRead depth: 0 Write depth: 2IO unplugs: 1 Timer unplugs: 0Total (8,5):Reads Queued: 0, 0KiB Writes Queued: 12, 48KiBRead Dispatches: 0, 0KiB Write Dispatches: 5, 48KiBReads Requeued: 0 Writes Requeued: 0Reads Completed: 0, 0KiB Writes Completed: 5, 48KiBRead Merges: 0, 0KiB Write Merges: 7, 28KiBIO unplugs: 5 Timer unplugs: 0Throughput (R/W): 0KiB/s / 95KiB/s Events (8,5): 61 entries Skips: 0 forward (0 - 0.0%)
利用这些信息我们可以很清楚的知道我们IO设备在做什么,花了多少时间,透过它了解我们系统的运作。如何解读这些信息我们可以看手册有详细的解释:
$ man blkparse
同时如果你觉得这些信息太原始,类似btt, seekwatcher这样的工具在blktrace的信息的基础上更深入的挖掘了系统的行为,使用起来也更简单。
我们在实际工作的过程中用blktrace定位了很多问题,比如fsync的延时问题和IO调度器的问题,确实是很实用的一个工具。
祝大家玩的开心。
转载于:https://www.cnblogs.com/tcicy/p/8454754.html
blktrace 深度了解linux系统的IO运作相关推荐
- linux系统下io的过程,Linux系统基础知识:IO调度
Linux系统基础知识:IO调度 IO调度发生在Linux内核的IO调度层.这个层次是针对Linux的整体IO层次体系来说的.从read()或者write()系统调用的角度来说,Linux整体IO体系 ...
- Linux系统级IO②:RIO-带缓冲区IO实现
UNXI系统级的IO函数,在某些情况下,传送的字节数比用户要求的少,会出现不足值(short count)主要原因为: ①读取时遇到EOF:文件的大小不足以填充read需要读取的字节数,那么返回不足值 ...
- linux 磁盘并发io,Linux系统 磁盘IO过高排查总结
最近做的一个电商网站因为磁盘 I/O 过高导致访问速度奇慢,问题存在两个月有余未得到解决办法.此次排查原因的经验可以作下次问题的参考. 1.会看懂 top 系统命令出来的各项参数.此次是无意中发现 u ...
- linux io多路复用详解,Linux系统中IO多路复用
文章目录 1 什么是IO多路复用 1.1 阻塞IO模型 1.2 非阻塞IO模型 1.3 IO复用模型 1.4 信号驱动IO模型 1.5 异步IO模型 2 IO多路复用,epoll 1 什么是IO多路复 ...
- 深度探索linux系统虚拟化 原理与实现,深度探索Linux系统虚拟化:原理与实现
前 言 第1章 CPU虚拟化 1 1.1 x86架构CPU虚拟化 1 1.1.1 陷入和模拟模型 2 1.1.2 x86架构虚拟化的障碍 2 1.1.3 VMX 3 1.1.4 VCPU生命周期 5 ...
- 读懂 x86 架构 Linux 系统虚拟化,这文不容错过
点击上方 "程序员小乐"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 关注订阅号「程序员小乐」,收看更多精彩内容 每日英文 What is a m ...
- Linux系统编程1——系统函数
文章目录 前言 一.C标准函数与系统函数的区别 1.什么是系统调用 2.文件描述符 3.相关函数 3.1 open函数 3.2 close函数 3.3 read函数 3.4 write函数 3.5 l ...
- find linux 目录深度_浪里淘沙,详解Linux系统中Find命令的实用技巧
知了小巷:浪里淘沙,详解Linux系统中Find命令的实用技巧. 啊哈,找到了! 当我们需要在Linux系统上定位某个文件或目录时,find命令通常是必备之选. 它使用起来非常简单,但有许多不同的可选 ...
- Linux系统监控命令整理汇总-掌握CPU,内存,磁盘IO等找出性能瓶颈
的性能有问题,总之,每到晚上挖站否的主机就出现了不稳定的情况,系统负载忽高忽低.利用服务器日志分析利器:ngxtop和GoAccess也能查出有一些IP一直在不断地扫描服务器端口还有WP后台. 但是, ...
- Linux系统下基于IO多路复用的大规模可靠UDP服务器的实现(三)
七.可靠性UDP的优化细节 4.5章节中,我们提到了KCP本身的优化提高,由于可靠性UDP是这个方案是否优秀的关键,而各种可靠UDP协议中都有TCP算法的影子,所以下面我们再仔细的谈一下这个部分.按照 ...
最新文章
- R语言sample.int有放回或者无放回采样随机整数实战
- springboot~openfeign从JSON文件读取数据
- libpcap捕包机制分析(四)
- 开源界的 5 大开源许可协议
- python多线程编程_python之多线程编程
- jquery中ajax应用——load()函数
- 超全!0基础程序员从入门到工作(持续更新...)
- spring 中execution 表达式语法
- 微信公众号推送(Java)
- 数据库约束六大约束语句
- 新手写的一个12306刷票工具
- [leetcode] 884. Uncommon Words from Two Sentences
- Everything+Wox介绍和使用方式
- 洛谷P4147 玉蟾宫(单调栈解决)
- 深信服校园招聘c/c++软件开发B卷
- JSP项目常见问题解决方案
- 但见新人笑,那闻旧人哭,大衣哥前儿媳陈亚楠好可怜
- 目标检测FPN(Feature Pyramid Networks)的使用
- 培养气质的99个好习惯
- 九天鸟p2p网贷系统的架构设计
热门文章
- border-radius几种写法的原理剖析
- 赴日游个人签证门槛降低 年薪3万可申请
- js中eval的用法
- SqlServer 2008R2修改表结构提示“不允许保存更改”解决方案
- 内存中常见异常值的解释(0xcccccccc 0xcdcdcdcd 0xfeeefeee等)
- Jdk1.8日期格式转换小笔记
- python条件语句练习题_[python](1)---条件语句练习题
- oracle 调整缓存大小,设置数据缓冲大小_oracle
- sqlitepython导入数据_Python导入excel数据到sqlite;
- 一个完整的person类