blktrace未公开选项网络保存截取数据
原创文章,转载请注明: 转载自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模式数据,可以进行后续的分析了。
建议继续学习:
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Yu Feng 来源: Erlang非业余研究
- 标签: blktrace
- 发布时间:2012-03-04 17:36:36
- [71] Twitter/微博客的学习摘要
- [65] IOS安全–浅谈关于IOS加固的几种方法
- [65] 如何拿下简短的域名
- [64] android 开发入门
- [63] Go Reflect 性能
- [63] find命令的一点注意事项
- [61] 流程管理与用户研究
- [59] 读书笔记-壹百度:百度十年千倍的29条法则
- [59] 图书馆的世界纪录
- [59] Oracle MTS模式下 进程地址与会话信