blktrace工具学习与使用

1   工具简介

1.1 blktrace

1.1.1  功能概述

         blktrace是一个针对Linux内核块设备I/O层的跟踪工具。通过使用这个工具,使用者可以获取I/O请求队列的各种详细的情况,包括:进行读写的进程名称、进程号、执行时间、读写的物理块号、块大小等。

1.1.2  主要选项

选项

使用说明

-b size

指定抽取事件的buffer大小,为1024的倍数,即单位为KB。默认大小为512KB

-d dev

增加需要追踪的设备

-I file

增加多个需要追踪的设备,这些设备在文件file中指定。

文件中设备的格式为:设备1设备2

【注】:设备为全路径,设备之间用空格分离

-n num-stub

指定使用多少的buffer,默认为四个子buffer

-l

使用网络侦听模式(blktrace server)。即此时运行blktrace的设备作为服务器,侦听来自客户机端的网络信息。网络相关

-h hostname

运行网络客户端模式,与由hostname指定的服务器端链接。网络相关

-p number

指定使用的网络端口(默认为8462)。网络相关

-o basename

从输入文件指定基础名字,默认为: device.blktrace.cpu。若使用命令:-o -则当前与blkparse一起运行在实时模式,将数据输出到标准输出端。

-D dir

输出到指定的文件夹dir

-w seconds

设置运行的时间。单位为秒

 

1.2 blkparse

1.2.1  简介

blkparse用于将块设备的事件流解析成有格式的输出。

1.2.2  主要选项

选项

使用说明

-b batch

指定标准输入读取的批量

-i file

指定输入文件的基本名字,默认为device.blktrace.cpu

若使用命令:-i - 则与blktrace一起运行在实时模式,从标准输入读取

-F type, fmt

-f fmt

设置输出格式。其中:-f指定了所有的事件的格式;-F type类型的事件的格式

-o file

输出到文件file

-w span

显示有span指定的时间间隔的trace

1. end_time: 显示0~end_time时间间隔之间的trace

2. start:end-time: 显示start_time~end_time时间间隔之间的trace

1.2.3  主要动作

缩写

解释说明

A

栈设备的重映射--- Remap动作详细说明了从哪个设备映射到哪个设备

C

之前的A发起完成的动作。输出将会详细显示请求的sector和大小,以及成功或者失败

Q

将节点加入到给定地址的I/O队列中

I

插入的A请求被发送到I/O调度器,此时请求已经完成成型。

1.2.4  动作相关输出

缩写

解释说明

A

输出:起始地址+长度,并伴随着原设备和sector偏移量

例如:

2531656 + 8 <- (251,2) 72 起始地址+长度 <-(原设备主设备号/此设备号)偏移量

C

如果当前有一个payload,则其表示头之后的填充,跟随者出错值。

若果当前没有payload,则显示起始地址+长度(单位为sector)。若果-t选项指定了,则会显示运行时间。

无论是以上哪种形式,都会跟着一个完成的出错值。

例如:

1024 + 1024 [0] 起始地址 +长度 [出错码]

I/Q

若当前有一个payload,则输出payload的字节数目,并跟着payload16进制表示(圆括号之间)

若当先没有payload,则显示起始地址+长度(单位为sector)若果-t选项指定了,则会显示运行时间。

无论是以上哪种形式,都会跟着与事件相关的命令。

例如:

20480 + 1024 [dd] 起始地址+长度[命令]

 

1   blktrace使用

1.1 工具安装

1.        安装命令: yum -y install blktrace

2.        设定debug文件系统:mount -t debugfs none/sys/kernel/debug

1.2 简单实例

1.2.1  实例1

命令

blktrace -d /dev/sda -o - |blkparse -i-

说明

追踪设备/dev/sdaI/O信息,将结果输出到屏幕,并将输出的信息重定向为blkparse的输入。经过blkparse解析之后,将结果输出到屏幕







1.1.1  实例2

命令

cmd1: blktrace -d /dev/sdd -o trace | blkparse -i -

cmd2: blkparse -i trace

说明

cmd1是将blktrace的结果输出到已经事先指定好的文件trace中,注意这个trace文件必须在本地文件夹中存在,无需带有任何后缀。运行之后会产生两个新的文件叫做trace.blktrace.0trace.blktrace.1

cmd2trace文件作为blkparse的输入,blkparse的结果依然输出到屏幕。

blkparse -i trace -o /root/trace.txt : 将分析结果输出到文件trace.txt



vim trace.txt


1.1 输出结果分析

8,48   0       1     0.000000000 25413  Q  WS 0+ 1024 [dd]

数值

解释说明

8,48

major/minor。即:主设备号为8,次设备号为48

0

CPU ID2字节宽度),即当前动作发生在CPU 0

1

序列号

0.000000000

当前事件发生的时间戳。%5T.%9t,秒级为5个字节的区域,纳秒为9个字节的区域

25413

进程ID号,5字节的区域

Q

动作的标识,2字节区域。Q表示加入队列的动作

WS

RWBS3字节的区域。其中:R:读;W:写;D:块扔除操作;Bbarrier操作;S:同步操作。

WS表示当前为写同步操作

0 + 1024 [dd]

起始地址为0,长度为1024,命令为dd



blktrace使用简析

blktrace是一个针对Linux内核中块设备I/O层的跟踪工具,是由Linux内核块设备层的维护者开发的,目前已经集成到内核2.6.17及其之后的内核版本中。通过使用这个工具,使用者可以获取I/O请求队列的各种详细的情况,包括进行读写的进程名称、进程号、执行时间、读写的物理块号、块大小等等,是一个Linux下分析I/O相关内容的很好的工具,在使用时基本上只会占用系统2%的资源,下面主要说一下本人在blktrace上手时的一些心得。

因为blktrace已经集成到2.6.17及其之后的版本中,所以一般比较新的系统版本都无需下载,本人使用的是Fedora 8,内核版本为2.6.23,但是此工具并未安装,所以需要在使用前安装blktrace:
yum install blktrace
通过以上命令安装完成后,需要手工设定debug文件系统,命令如下:
mount -t debugfs debugfs /sys/kernel/debug
这样blktrace就可以成功运行了。
blktrace的运行命令可以包括许多的详细配置,一一列举起来实在太多,而且没有必要,下面通过几个例子来直观的说明常用的几个监测功能:
运行命令1:
blktrace -d /dev/sda -o - |blkparse -i -
此命令是将blktrace的结果输出到屏幕,然后blkparse将屏幕中的blktrace的结果作为分析的输入,最后将分析的结果同样输出到屏幕。这里需要指出的是,blkparse是基于blktrace的分析工具,因为blktrace本身并不具有分析功能,它只是进行监测,其余的工作都是由blkparse来进行的。
运行命令2:
blktrace -d /dev/sda |blkparse -i -
此命令是将blktrace的结果输出到本地文件夹,文件名为sda.blktrace.0和sda.blktrace.1,这里之所以有两个文件是因为运行机器有两个CPU的缘故,blktrace根据CPU的个数来生成文件,对应每个CPU都有一个相应的监测数据文件。
运行命令3:
blktrace -d /dev/sda -o trace |blkparse -i -
此命令是将blktrace的结果输出到已经事先指定好的文件trace中,注意这个trace文件必须在本地文件夹中存在,无需带有任何后缀




  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值