网站建设与维护课程设计,wordpress 本地 插件,设计院排名前十强,郑州建筑工程有限公司Blktrace简介#xff1a;blktrace是一个针对Linux内核中块设备I/O层的跟踪工具#xff0c;用来收集磁盘IO信息中当IO进行到块设备层(block层#xff0c;所以叫blk trace)时的详细信息(如IO请求提交#xff0c;入队#xff0c;合并#xff0c;完成等等一些列的信息)#…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、blkparsebtt等工具来查看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中展示的数据状态(如 AUQ详细见下)是blkparse在t-action 0xffff之后自己把数值转换为“AQU之类的状态”来展示的。blktrace安装$ sudo apt-get install blktraceDebugfs挂载由blktrace工作原理可知blktrace需要借助内核经由debugfs文件系统(debugfs文件系统在内存中)来输出信息所以用blktrace工具之前需要先挂载debugfs文件系统$ sudo mount –t debugfs debugfs /sys/kernel/debugblktrace语法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文件是人眼不可读的所以如果要进行更多后续的人工或程序处理最好还是将结果转化为文本文档来处理。