本文链接地址: 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 : events, KiB data
CPU : events, KiB data
Total: events (dropped ), KiB data
$ tree 127.0.0.1----\:\:/
127.0.0.1----::/
├── sda.blktrace.
└── sda.blktrace. directories, files
客户端终端上:
$ sudo blktrace -d /dev/sda -h 127.0.0.1
blktrace: connecting to 127.0.0.1
blktrace: connected!
^C=== sda ===
CPU : events, KiB data
CPU : events, KiB data
Total: events (dropped ), KiB data
我们来验证下数据的准确性,在127.0.0.1-2012-02-28-08:15:00目录下操作:
$ blkrawverify sda
Verifying sda
CPU
CPU
Wrote output to sda.verify.out
$ cat sda.verify.out ---------------
Verifying sda
---------------------
Summary for cpu :
valid + invalid (100.0%) processed ---------------------
Summary for cpu :
valid + invalid (100.0%) processed
这样我们就顺利的在另外一台机器上抓到了目标机器上特定设备的io模式数据,可以进行后续的分析了。
祝玩得开心!
Post Footer automatically generated by wp-posturl plugin for wordpress.
Related posts: