186 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			186 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
Block IO Tracing
 | 
						|
----------------
 | 
						|
 | 
						|
Written by Jens Axboe <axboe@kernel.dk> (initial version and kernel support),
 | 
						|
Alan D. Brunelle (threading and splitup into two seperate programs),
 | 
						|
Nathan Scott <nathans@sgi.com> (bug fixes, process names, multiple devices)
 | 
						|
Also thanks to Tom Zanussi <zanussi@us.ibm.com> for good input and
 | 
						|
patches.
 | 
						|
 | 
						|
 | 
						|
Requirements
 | 
						|
------------
 | 
						|
 | 
						|
blktrace was integrated into the mainline kernel between 2.6.16 and 2.6.17-rc1.
 | 
						|
The target trace needs to run on a kernel at least that new.
 | 
						|
 | 
						|
git://git.kernel.dk/blktrace.git
 | 
						|
 | 
						|
If you don't have git, you can get hourly snapshots from:
 | 
						|
 | 
						|
http://brick.kernel.dk/snaps/
 | 
						|
 | 
						|
The snapshots include the full git object database as well. kernel.org has
 | 
						|
excessively long mirror times, so if you have git installed, you can pull
 | 
						|
the master tree from:
 | 
						|
 | 
						|
git://git.kernel.dk/blktrace.git
 | 
						|
 | 
						|
For browsing the repo over http and viewing history etc, you can direct
 | 
						|
your browser to:
 | 
						|
 | 
						|
http://git.kernel.dk/
 | 
						|
 | 
						|
A blktrace visualization tool, iowatcher, was added to blktrace in version
 | 
						|
1.1.0. It requires librsvg and either png2theora or ffmpeg to generate movies.
 | 
						|
 | 
						|
Usage
 | 
						|
-----
 | 
						|
 | 
						|
$ blktrace -d <dev> [ -r debug_path ] [ -o output ] [ -k ] [ -w time ]
 | 
						|
		    [ -a action ] [ -A action mask ]
 | 
						|
 | 
						|
	-d Use specified device. May also be given last after options.
 | 
						|
	-r Path to mounted debugfs, defaults to /sys/kernel/debug.
 | 
						|
	-o File(s) to send output to.
 | 
						|
	-D Directory to prepend to output file names.
 | 
						|
	-k Kill running trace.
 | 
						|
	-w Stop after defined time, in seconds.
 | 
						|
	-a Only trace specific actions (use more -a options to add actions).
 | 
						|
	   Available actions are:
 | 
						|
 | 
						|
		READ
 | 
						|
		WRITE
 | 
						|
		BARRIER
 | 
						|
		SYNC
 | 
						|
		QUEUE
 | 
						|
		REQUEUE
 | 
						|
		ISSUE
 | 
						|
		COMPLETE
 | 
						|
		FS
 | 
						|
		PC
 | 
						|
 | 
						|
	-A Give the trace mask directly as a number.
 | 
						|
 | 
						|
	-b Sub buffer size in KiB.
 | 
						|
	-n Number of sub buffers.
 | 
						|
	-l Run in network listen mode (blktrace server)
 | 
						|
	-h Run in network client mode, connecting to the given host
 | 
						|
	-p Network port to use (default 8462)
 | 
						|
	-s Disable network client use of sendfile() to transfer data
 | 
						|
	-V Print program version info.
 | 
						|
 | 
						|
$ blkparse -i <input> [ -o <output> ] [ -b rb_batch ] [ -s ] [ -t ] [ -q ]
 | 
						|
		      [ -w start:stop ] [ -f output format ] [ -F format spec ]
 | 
						|
		      [ -d <binary> ]
 | 
						|
 | 
						|
	-i Input file containing trace data, or '-' for stdin.
 | 
						|
	-D Directory to prepend to input file names.
 | 
						|
	-o Output file. If not given, output is stdout.
 | 
						|
	-b stdin read batching.
 | 
						|
	-s Show per-program io statistics.
 | 
						|
	-h Hash processes by name, not pid.
 | 
						|
	-t Track individual ios. Will tell you the time a request took to
 | 
						|
	   get queued, to get dispatched, and to get completed.
 | 
						|
	-q Quiet. Don't display any stats at the end of the trace.
 | 
						|
	-w Only parse data between the given time interval in seconds. If
 | 
						|
	   'start' isn't given, blkparse defaults the start time to 0.
 | 
						|
	-d Dump sorted data in binary format
 | 
						|
	-f Output format. Customize the output format. The format field
 | 
						|
	   identifiers are:
 | 
						|
 | 
						|
		%a	- Action
 | 
						|
		%c	- CPU ID
 | 
						|
		%C	- Task command (process) name
 | 
						|
		%d	- Direction (r/w)
 | 
						|
		%D	- Device number
 | 
						|
		%e	- Error number
 | 
						|
		%M	- Major
 | 
						|
		%m	- Minor
 | 
						|
		%N	- Number of bytes
 | 
						|
		%n	- Number of sectors
 | 
						|
		%p	- PID
 | 
						|
		%P	- PDU
 | 
						|
		%s	- Sequence number
 | 
						|
		%S	- Sector number
 | 
						|
		%t	- Time (wallclock - nanoseconds)
 | 
						|
		%T	- Time (wallclock - seconds)
 | 
						|
		%u	- Time (processing - microseconds)
 | 
						|
		%U	- Unplug depth
 | 
						|
 | 
						|
	-F Format specification. The individual specifiers are:
 | 
						|
 | 
						|
		A	- Remap
 | 
						|
		B	- Bounce
 | 
						|
		C	- Complete
 | 
						|
		D	- Issue
 | 
						|
		M	- Back merge
 | 
						|
		F	- Front merge
 | 
						|
		G	- Get request
 | 
						|
		I	- Insert
 | 
						|
		P	- Plug
 | 
						|
		Q	- Queue
 | 
						|
		R	- Requeue
 | 
						|
		S	- Sleep requests
 | 
						|
		T	- Unplug timer
 | 
						|
		U	- Unplug IO
 | 
						|
		W	- Bounce
 | 
						|
		X	- Split
 | 
						|
 | 
						|
	-v More verbose for marginal errors.
 | 
						|
	-V Print program version info.
 | 
						|
 | 
						|
$ verify_blkparse filename
 | 
						|
 | 
						|
	Verifies an output file from blkparse. All it does is check if
 | 
						|
	the events in the file are correctly time ordered. If an entry
 | 
						|
	is found that isn't ordered, it's dumped to stdout.
 | 
						|
 | 
						|
$ blkrawverify <dev> [<dev>...]
 | 
						|
 | 
						|
	The blkrawverify utility can be used to verify data retrieved
 | 
						|
	via blktrace. It will check for valid event formats, forward
 | 
						|
	progressing sequence numbers and time stamps, also does reasonable
 | 
						|
	checks for other potential issues within invidividual events.
 | 
						|
 | 
						|
	Errors found will be tracked in <dev>.verify.out.
 | 
						|
 | 
						|
If you want to do live tracing, you can pipe the data between blktrace
 | 
						|
and blkparse:
 | 
						|
 | 
						|
% blktrace -d <device> -o - | blkparse -i -
 | 
						|
 | 
						|
This has a small risk of displaying some traces a little out of sync, since
 | 
						|
it will do batch sorts of input events. Similarly, you can do traces over
 | 
						|
the network. The network 'server' must run:
 | 
						|
 | 
						|
% blktrace -l
 | 
						|
 | 
						|
to listen to incoming blktrace connections, while the client should use
 | 
						|
 | 
						|
% blktrace -d /dev/sda -h <server hostname>
 | 
						|
 | 
						|
to connect and transfer data over the network.
 | 
						|
 | 
						|
 | 
						|
Documentation
 | 
						|
-------------
 | 
						|
 | 
						|
A users guide is distributed with the source. It is in latex, a
 | 
						|
'make docs' will build a PDF in doc/. You need tetex and latex installed
 | 
						|
to build the document.
 | 
						|
 | 
						|
 | 
						|
Resources
 | 
						|
---------
 | 
						|
 | 
						|
vger hosts a mailing list dedicated to btrace discussion and development.
 | 
						|
The list is called linux-btrace@vger.kernel.org, subscribe by sending
 | 
						|
a mail to majordomo@vger.kernel.org with 'subscribe linux-btrace' in
 | 
						|
the mail body.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
2006-09-05, Jens Axboe <axboe@kernel.dk>
 | 
						|
 |