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架构图参照:

block层位置图参照:

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这个文件,以便人工进行更加深入的分析,因为trace文件是人眼不可读的,所以如果要进行更多后续的人工或程序处理最好还是将结果转化为文本文档来处理。

linux的trace文件路径,linux系统分析工具之Blktrace(十)相关推荐

  1. linux的库文件路径,Linux下的库文件搜索路径

    对于以压缩包发布的软件,在它的目录下通常都有一个配置脚本configure,它的作用确定编译参数(比如头文件位置.连接库位置等),然后生成Makefile以编译程序.可以进入该软件的目录,执行&quo ...

  2. linux 函数 创建文件路径,linux中创建文件和文件夹的方法

    linux中创建文件和文件夹的方法 发布时间:2020-06-12 19:32:19 来源:亿速云 阅读:174 作者:鸽子 首先说一下touch 创建文件的命令,touch可以用于创建二进制文件,用 ...

  3. linux蓝牙接收文件路径,Linux 蓝牙系列(3) 蓝牙传输文件测试

    Andrew Huang 蓝牙文件传送协议 标准是采用OPP协议(应该Obex文件传输相关协议,手机界面很多用这个术语),另外还支持FTP传输,但这个需要额外软件支持.一般是ObexFtp的移植版本, ...

  4. linux字符驱动头文件路径,Linux 字符设备驱动例子

    编写好驱动,通过挂载的方法将驱动程序挂载到内核里面,大致步骤如下: 一:  1>建立以.c为后缀的c语言程序文件 (里面包含了设备名及设备号等) 2>建立Makefile文件(作用是通过m ...

  5. qt linux 添加库文件路径,linux下qt使用第三方库的那些事

    开发库查看工具:$sudo apt-get install pkg-config 很多时候我们并不知道自己电脑有没有这个库,所以我们可以使用这个工具来查看自己有哪些工具,或者哪些工具没有.同时,qma ...

  6. linux nginx ssl 文件路径,linux – 如何将SSL证书从Apache服务器传输到NGINX服务器

    您需要复制以下文件: > SSL_Certificate.crt > SSL_Certificate.key 从APACHE SSL配置路径到NGINX服务器配置路径. 现在打开您正在保护 ...

  7. qt linux 添加库文件路径,Linux下Qt调用共享库文件.so

    jvm--4垃圾收集 6. 垃圾收集GC (1)当需要排查各种内存溢出,内存泄漏等问题,当GC成为系统达到更高性能的瓶颈时,我们就需要对这些自动化的GC进行监控和调节. (2)PC计数器.本地方法栈. ...

  8. linux服务器上的项目读取本地文件,java访问linux服务器读取文件路径

    java访问linux服务器读取文件路径 内容精选 换一换 通过ADC将文件传输到Host.参见准备环境完成环境配置.以运行用户登录安装Toolkit组件的服务器.执行命令,将A.java文件传输到H ...

  9. java 到服务器上读文件路径,java访问linux服务器读取文件路径

    java访问linux服务器读取文件路径 内容精选 换一换 通过ADC从Host获取文件.参见准备环境完成环境配置.以运行用户登录安装Toolkit组件的服务器.执行命令,从Host获取B.java, ...

最新文章

  1. python搭积木_从零实现”搭积木式实现策略“的回测系统 part VI
  2. c# typescript_在任何IDE中从C#,Java或Python代码获取TypeScript接口的简单方法
  3. 在统一软件开发过程中使用UML
  4. wsl使用可视化界面_通过 VcXsrv 在 WSL2 上使用图形化界面(xfce4)
  5. HTTP请求消息数据格式分析以及request和response
  6. [BUUCTF-pwn]——jarvisoj_level2
  7. Android自定义View之刻度尺
  8. php自学好还是培训,转行php选择自学还是培训
  9. 百度文库f12免费复制文章
  10. stm32软件模拟I2C
  11. gpio引脚介绍 树莓派3b_树莓派引脚对照表
  12. 上汽拿下国内首张道路测试用牌照
  13. 【opencvsharp】opencvsharp_samples.core示例代码笔记
  14. Unity2019版本打包一直停留在 detecting current sdk tools version的解决方案
  15. PES、PS、TS详解
  16. java 判断手机访问_下面java代码判断是手机访问还是PC访问什么地方出错了,手机跳转不到制定页面,等待解答...
  17. oracle查询访问记录,oracle 访问 记录
  18. seo关键词排名优化的方法
  19. 商业分析师应如何构建一个商业故事
  20. DirectShow入门

热门文章

  1. 云端研发新基建:Serverless与持续架构服务落地实践
  2. Flink 消息聚合处理方案
  3. 海升集团数据上云 走出智能农业的新路子
  4. 如何调用API管理您的云上资源
  5. 认识阿里云的产品逻辑:基础设施必须必业务跑得快
  6. BDTC 2019 | 七个开发者能干多大的事?​
  7. 15年大厂经历!大佬总结:0基础如何学习Python?
  8. Observers:让 ZooKeeper更具可伸缩性 | 时光机
  9. 10 张令人喷饭的程序员漫画
  10. python的stack用法_Python numpy.stack函数方法的使用