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>
 | |
| 
 |