技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 系统运维 --> blktrace未公开选项网络保存截取数据

blktrace未公开选项网络保存截取数据

浏览:1182次  出处信息

    原创文章,转载请注明: 转载自Erlang非业余研究

    本文链接地址: blktrace未公开选项网络保存截取数据

    我们透过blktrace来观察io行为的时候,第一件事情需要选择目标设备,以便分析该设备的io行为。具体使用可以参考我之前写的几篇:这里 这里 这里

    blktrace分为内核部分和应用部分,应用部分收到我们要捕捉的设备名单,传给内核。内核分布在block层的各个tracepoint就会开始工作,把相关的数据透过relayfs传递到blktrace的应用部分,应用部分把这些数据记到磁盘,以便后续分析。架构参见下图:

    从man blktrace中可以看到:

    blktrace stores the extracted data into files stored in the local directory. The format of the file names is (by default) device.blktrace.cpu, where device is the base device name (e.g, if we are tracing /dev/sda, the base device name would be sda); and cpu identifies a CPU for the event stream

    这时候问题就来了,如果我的机器只有一个设备,那么blktrace存数据文件这个动作就会影响到我们正常的IO行为。

    

    通常我们的机器会有多个设备,所以我们会把数据放在不同的设备上,以避免互相干扰。如果实在只有一个盘,那么还可以把数据放在ramdisk里面。 但是ramdisk有大小的限制,还是不够好。

    幸运的是blktrace提供通过网络的方式来保存数据文件,只不过文档没写明。

    通过网络保存数据的时候,需要2个机器:

     1. 一台运行blktrace server负责保存数据: blktrace -l

     2. 一台运行blktrace client负责捕获目标设备: blktrace -h hostname 可选-s控制是否透过sendfile发送数据,默认是透过send发送。

    我们来演示下,二个终端,一个模拟服务器,一个模拟客户端:

     服务器终端上:

$ blktrace -l
server: waiting for connections...
server: connection from 127.0.0.1
server: end of run for 127.0.0.1:sda
=== sda ===
  CPU  0:                   20 events,        1 KiB data
  CPU  1:                   39 events,        2 KiB data
  Total:                    59 events (dropped 0),        3 KiB data
$ tree 127.0.0.1-2012-02-28-08\\:15\\:00/
127.0.0.1-2012-02-28-08:15:00/
├── sda.blktrace.0
└── sda.blktrace.1

0 directories, 2 files

    客户端终端上:

$ sudo blktrace -d /dev/sda -h 127.0.0.1
blktrace: connecting to 127.0.0.1
blktrace: connected!
^C=== sda ===
  CPU  0:                   20 events,        1 KiB data
  CPU  1:                   39 events,        2 KiB data
  Total:                    59 events (dropped 0),        3 KiB data

    我们来验证下数据的准确性,在127.0.0.1-2012-02-28-08:15:00目录下操作:

$ blkrawverify sda
Verifying sda
    CPU 0
    CPU 1
Wrote output to sda.verify.out
$ cat sda.verify.out 

---------------
Verifying sda
    ---------------------
    Summary for cpu 0:
             4 valid +          0 invalid (100.0%) processed

    ---------------------
    Summary for cpu 1:
            14 valid +          0 invalid (100.0%) processed

    这样我们就顺利的在另外一台机器上抓到了目标机器上特定设备的io模式数据,可以进行后续的分析了。

建议继续学习:

  1. blktrace 深度了解linux系统的IO运作    (阅读:6012)
  2. 通过blktrace, debugfs分析磁盘IO    (阅读:2445)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1