Blktrace简介:
 blktrace是一个针对Linux内核中块设备I/O层的跟踪工具,用来收集磁盘IO信息中当IO进行到块设备层(block层,所以叫blk trace)时的详细信息(如IO请求提交,入队,合并,完成等等一些列的信息),是由
 Linux内核块设备层的维护者开发的,目前已经集成到内核2.6.17及其之后的内核版本中。通过使用这个工具,使用者可以获取I/O请求队列的各种详细的情况,包括进行读写的进程名称、进程号、执行时间、读写的物理
 块号、块大小等等,是一个Linux下分析I/O相关内容的很好的工具
 透过blktrace来观察io行为的时候,第一件事情需要选择目标设备,以便分析该设备的io行为。blktrace分为内核部分和应用部分,应用部分收到我们要捕捉的设备名单,传给内核。内核分布在block层的各个
 tracepoint就会开始工作,把相关的数据透过relayfs传递到blktrace的应用部分,应用部分把这些数据记到磁盘,以便后续分析。
 blktrace架构图参照:
 http://blog.yufeng.info/archives/2524
 block层位置图参照:
 http://blog.yufeng.info/archives/751
 blktrace是一个可以显示block的io详细信息的工具,但他的输出信息太专业了,很难看懂,可以同通过blkiomon、blkparse,btt等工具来查看
blktrace工作原理:
(1)blktrace测试的时候,会分配物理机上逻辑cpu个数个线程,并且每一个线程绑定一个逻辑cpu来收集数据
(2)blktrace在debugfs挂载的路径(默认是/sys/kernel/debug )下每个线程产生一个文件(就有了对应的文件描述符),然后调用ioctl函数(携带文件描述符,
   _IOWR(0x12,115,struct blk_user_trace_setup),& blk_user_trace_setup三个参数),产生系统调用将这些东西给内核去调用相应函数来处理,由内核经由debugfs文件系统往此文件描述符写入数据
(3)blktrace需要结合blkparse来使用,由blkparse来解析blktrace产生的特定格式的二进制数据
(4)blkparse仅打开blktrace产生的文件,从文件里面取数据做展示以及最后做per cpu的统计输出,但blkparse中展示的数据状态(如 A,U,Q,详细见下)是blkparse在t->action & 0xffff之后自己
   把数值转换为“A,Q,U之类的状态”来展示的。
blktrace安装:
 $ sudo apt-get install blktrace
Debugfs挂载:
 由blktrace工作原理可知,blktrace需要借助内核经由debugfs文件系统(debugfs文件系统在内存中)来输出信息,所以用blktrace工具之前需要先挂载debugfs文件系统
$ sudo mount –t debugfs debugfs /sys/kernel/debug
blktrace语法:
 blktrace -d dev [ -r debugfs_path ] [ -o output ] [-k ] [ -w time ] [ -a action ] [ -A action_mask ] [ -v ]
blktrace选项:
 -A hex-mask			#设置过滤信息mask成十六进制mask
-a mask #添加mask到当前的过滤器
-b size #指定缓存大小for提取的结果,默认为512KB
-d dev #添加一个设备追踪
-I file #Adds the devices found in file as devices to trace
-k #杀掉正在运行的追踪
-n num-sub #指定缓冲池大小,默认为4个子缓冲区
-o file #指定输出文件的名字
-r rel-path #指定的debugfs挂载点
-V #版本号
-w seconds #设置运行的时间
输出方式:

 文件输出:
 $ blktrace –d /dev/sda –o test1
  #对/dev/sda的trace,输出文件名为test1. Blktrace.[0-cpu数-1](文件里面存的是二进制数据,需要blkparse来解析)(如之前在blktrace原理中提到,每个逻辑cpu都有一个线程,产生一个文件,
  故会产生cpu数目个文件)
 终端输出:
 $ blktrace –d /dev/sda –o - | blkparse  -i –
  #输出到终端用“-”表示,可是都是一堆二进制东西,没法看,所以需要实时blkparse来解析
#Blkparse 的“-i”后加文件名,blktrace输出为“-“代表终端(代码里面写死了,就是用这个符号来代表终端),blkparse也用“-”来代表终端解析
几个例子:
blktrace -d /dev/sda -o - |blkparse -i -
此命令是将blktrace的结果输出到屏幕,然后blkparse将屏幕中的blktrace的结果作为分析的输入,最后将分析的结果同样输出到屏幕。这里需要指出的是,blkparse是基于blktrace的分析工具,
因为blktrace本身并不具有分析功能,它只是进行监测,其余的工作都是由blkparse来进行的。
blktrace -d /dev/sda |blkparse -i -
此命令是将blktrace的结果输出到本地文件夹,文件名为sda.blktrace.0和sda.blktrace.1,这里之所以有两个文件是因为运行机器有两个CPU的缘故,blktrace根据CPU的个数来生成文件,
对应每个CPU都有一个相应的监测数据文件。
blktrace -d /dev/sda -o trace |blkparse -i -
此命令是将blktrace的结果输出到已经事先指定好的文件trace中,注意这个trace文件必须在本地文件夹中存在,无需带有任何后缀。运行之后会产生两个新的文件叫做trace.blktrace.0和trace.blktrace.1。
blkparse -i trace
此命令是将trace文件作为blkparse的输入,blkparse的结果依然输出到屏幕
blkparse -i trace -o /root/trace.txt
此命令是将trace文件作为blkparse的输入,同时将分析结果输出到/root/trace.txt这个文件,以便人工进行更加深入的分析,因为

linux系统分析工具之Blktrace的更多相关文章

  1. linux系统分析工具续-SystemTap和火焰图(Flame Graph)

    本文为网上各位大神文章的综合简单实践篇,参考文章较多,有些总结性东西,自认暂无法详细写出,建议读文中列出的参考文档,相信会受益颇多.下面开始吧(本文出自 “cclo的博客” 博客,请务必保留此出处ht ...

  2. Linux性能工具介绍

    l  Linux性能工具介绍 p  CPU高 p  磁盘I/O p  网络 p  内存 p  应用程序跟踪 l  操作系统与应用程序的关系比喻为“唇亡齿寒”一点不为过 l  应用程序的性能问题/功能问 ...

  3. Linux 常用工具小结:(5) lftp工具使用

    Linux 常用工具小结:(1) lftp工具使用. 这里会按照一些比较常用的功能列出,并举一个具体的例子逐一解释功能. 通常使用ftp过程是登陆ftp,浏览ftp内容,下载ftp文件,或者上传ftp ...

  4. linux shell工具集合

    1)判断进程是否存在,如果不存在再执行启动命令,可以避免一个脚本同时启动多份 if [ $(ps -ef |grep  bastion_account.sh|grep -v grep|wc -l) - ...

  5. Linux命令工具 top详解

    Linux命令工具 top详解 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.top是一个动态显示过程,即可以通过用户按键来不 ...

  6. Linux命令工具基础04 磁盘管理

    Linux命令工具基础04 磁盘管理 日程磁盘管理中,我们最常用的有查看当前磁盘使用情况,查看当前目录所占大小,以及打包压缩与解压缩: 查看磁盘空间 查看磁盘空间利用大小 df -h -h: huma ...

  7. linux vi 工具的使用

    linux vi 工具的使用 1.打开文件 vi filename 如果存在该文件,则打开,不存在,则删除 2. 进入vi后,按i建,可以输入内容, 按ESC 在按: ,输入wq保存并退出. 3.移动 ...

  8. Linux/Unix工具与正则表达式的POSIX规范

    http://www.infoq.com/cn/news/2011/07/regular-expressions-6-POSIX 对正则表达式有基本了解的读者,一定不会陌生『\d』.『[a-z]+』之 ...

  9. Linux开发工具的使用

    1.   Linux开发工具的使用 Vim编译的使用 Gdb调试工具的使用 Makefile的编写 linux跟踪调试 SSH的使用 subversion的使用 1.   Linux开发工具的使用 V ...

随机推荐

  1. thinkphp3.2 success方法和redirect方法

    $this->redirect('showlist',array(),3,'添加成功'); $this->success('添加成功',U('showlist'),3);

  2. C# 新建文档CreateNewDocument

    // Copyright 2010 ESRI// // All rights reserved under the copyright laws of the United States// and ...

  3. 如何将钉钉集成到FineReport插件中

    报表服务器 安装钉钉管理插件后,打开报表管理平台,管理系统下会增加钉钉管理节点,钉钉相关的配置管理都将会放在这个节点中去配置: 同时,设置定时任务的最后一步输出设置中,会增加推送钉钉消息: 钉钉企业应 ...

  4. Pig是轻类型的

    总体来说Pig是“强类型”的,但Pig又允许用户不指定输入数据的类型,而可以自己根据用户的使用方式进行推测. 称Pig是“轻类型”的更合适,它确实对类型有严格的要求,但是如果没有明确定义类型也是可以处 ...

  5. 带你从零学ReactNative开发跨平台App开发(五)

    ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...

  6. shell黑名单

    #/bin/bash netstat -ant | " | awk '{print $5}' | grep -v "^10" | cut -d ":" ...

  7. vector interators incompatible

    刚刚使用vector时会报错,报错内容为vector interators incompatible,后来自己进行断点发现我在构造函数内使用了memset,重置了vector向量导致报错,这是一个笔记

  8. Oracle EBS 数据访问权限集

    SELECT frv.responsibility_name, fpo.profile_option_name, fpo.user_profile_option_name, fpv.profile_o ...

  9. word 排版用到双直线、波浪线、虚线 、直线、隔行线等技巧

    在办公或毕业设计时,有时排版需要插入双直线.波浪线.虚线 .直线.隔行线等而烦恼, 今天小白与大家分享技巧如下: 感谢您的阅读,如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮.本文欢迎各位转载,但 ...

  10. Linux tar命令详解

    当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令) tar常见命令参数 必要参数有如下: -A 新增压缩文件到已存在的压缩 ...