1*1a3d31e3SAndroid Build Coastguard WorkerBlock IO Tracing 2*1a3d31e3SAndroid Build Coastguard Worker---------------- 3*1a3d31e3SAndroid Build Coastguard Worker 4*1a3d31e3SAndroid Build Coastguard WorkerWritten by Jens Axboe <[email protected]> (initial version and kernel support), 5*1a3d31e3SAndroid Build Coastguard WorkerAlan D. Brunelle (threading and splitup into two seperate programs), 6*1a3d31e3SAndroid Build Coastguard WorkerNathan Scott <[email protected]> (bug fixes, process names, multiple devices) 7*1a3d31e3SAndroid Build Coastguard WorkerAlso thanks to Tom Zanussi <[email protected]> for good input and 8*1a3d31e3SAndroid Build Coastguard Workerpatches. 9*1a3d31e3SAndroid Build Coastguard Worker 10*1a3d31e3SAndroid Build Coastguard Worker 11*1a3d31e3SAndroid Build Coastguard WorkerRequirements 12*1a3d31e3SAndroid Build Coastguard Worker------------ 13*1a3d31e3SAndroid Build Coastguard Worker 14*1a3d31e3SAndroid Build Coastguard Workerblktrace was integrated into the mainline kernel between 2.6.16 and 2.6.17-rc1. 15*1a3d31e3SAndroid Build Coastguard WorkerThe target trace needs to run on a kernel at least that new. 16*1a3d31e3SAndroid Build Coastguard Worker 17*1a3d31e3SAndroid Build Coastguard Workergit://git.kernel.dk/blktrace.git 18*1a3d31e3SAndroid Build Coastguard Worker 19*1a3d31e3SAndroid Build Coastguard WorkerIf you don't have git, you can get hourly snapshots from: 20*1a3d31e3SAndroid Build Coastguard Worker 21*1a3d31e3SAndroid Build Coastguard Workerhttp://brick.kernel.dk/snaps/ 22*1a3d31e3SAndroid Build Coastguard Worker 23*1a3d31e3SAndroid Build Coastguard WorkerThe snapshots include the full git object database as well. kernel.org has 24*1a3d31e3SAndroid Build Coastguard Workerexcessively long mirror times, so if you have git installed, you can pull 25*1a3d31e3SAndroid Build Coastguard Workerthe master tree from: 26*1a3d31e3SAndroid Build Coastguard Worker 27*1a3d31e3SAndroid Build Coastguard Workergit://git.kernel.dk/blktrace.git 28*1a3d31e3SAndroid Build Coastguard Worker 29*1a3d31e3SAndroid Build Coastguard WorkerFor browsing the repo over http and viewing history etc, you can direct 30*1a3d31e3SAndroid Build Coastguard Workeryour browser to: 31*1a3d31e3SAndroid Build Coastguard Worker 32*1a3d31e3SAndroid Build Coastguard Workerhttp://git.kernel.dk/ 33*1a3d31e3SAndroid Build Coastguard Worker 34*1a3d31e3SAndroid Build Coastguard WorkerA blktrace visualization tool, iowatcher, was added to blktrace in version 35*1a3d31e3SAndroid Build Coastguard Worker1.1.0. It requires librsvg and either png2theora or ffmpeg to generate movies. 36*1a3d31e3SAndroid Build Coastguard Worker 37*1a3d31e3SAndroid Build Coastguard WorkerUsage 38*1a3d31e3SAndroid Build Coastguard Worker----- 39*1a3d31e3SAndroid Build Coastguard Worker 40*1a3d31e3SAndroid Build Coastguard Worker$ blktrace -d <dev> [ -r debug_path ] [ -o output ] [ -k ] [ -w time ] 41*1a3d31e3SAndroid Build Coastguard Worker [ -a action ] [ -A action mask ] 42*1a3d31e3SAndroid Build Coastguard Worker 43*1a3d31e3SAndroid Build Coastguard Worker -d Use specified device. May also be given last after options. 44*1a3d31e3SAndroid Build Coastguard Worker -r Path to mounted debugfs, defaults to /sys/kernel/debug. 45*1a3d31e3SAndroid Build Coastguard Worker -o File(s) to send output to. 46*1a3d31e3SAndroid Build Coastguard Worker -D Directory to prepend to output file names. 47*1a3d31e3SAndroid Build Coastguard Worker -k Kill running trace. 48*1a3d31e3SAndroid Build Coastguard Worker -w Stop after defined time, in seconds. 49*1a3d31e3SAndroid Build Coastguard Worker -a Only trace specific actions (use more -a options to add actions). 50*1a3d31e3SAndroid Build Coastguard Worker Available actions are: 51*1a3d31e3SAndroid Build Coastguard Worker 52*1a3d31e3SAndroid Build Coastguard Worker READ 53*1a3d31e3SAndroid Build Coastguard Worker WRITE 54*1a3d31e3SAndroid Build Coastguard Worker BARRIER 55*1a3d31e3SAndroid Build Coastguard Worker SYNC 56*1a3d31e3SAndroid Build Coastguard Worker QUEUE 57*1a3d31e3SAndroid Build Coastguard Worker REQUEUE 58*1a3d31e3SAndroid Build Coastguard Worker ISSUE 59*1a3d31e3SAndroid Build Coastguard Worker COMPLETE 60*1a3d31e3SAndroid Build Coastguard Worker FS 61*1a3d31e3SAndroid Build Coastguard Worker PC 62*1a3d31e3SAndroid Build Coastguard Worker 63*1a3d31e3SAndroid Build Coastguard Worker -A Give the trace mask directly as a number. 64*1a3d31e3SAndroid Build Coastguard Worker 65*1a3d31e3SAndroid Build Coastguard Worker -b Sub buffer size in KiB. 66*1a3d31e3SAndroid Build Coastguard Worker -n Number of sub buffers. 67*1a3d31e3SAndroid Build Coastguard Worker -l Run in network listen mode (blktrace server) 68*1a3d31e3SAndroid Build Coastguard Worker -h Run in network client mode, connecting to the given host 69*1a3d31e3SAndroid Build Coastguard Worker -p Network port to use (default 8462) 70*1a3d31e3SAndroid Build Coastguard Worker -s Disable network client use of sendfile() to transfer data 71*1a3d31e3SAndroid Build Coastguard Worker -V Print program version info. 72*1a3d31e3SAndroid Build Coastguard Worker 73*1a3d31e3SAndroid Build Coastguard Worker$ blkparse -i <input> [ -o <output> ] [ -b rb_batch ] [ -s ] [ -t ] [ -q ] 74*1a3d31e3SAndroid Build Coastguard Worker [ -w start:stop ] [ -f output format ] [ -F format spec ] 75*1a3d31e3SAndroid Build Coastguard Worker [ -d <binary> ] 76*1a3d31e3SAndroid Build Coastguard Worker 77*1a3d31e3SAndroid Build Coastguard Worker -i Input file containing trace data, or '-' for stdin. 78*1a3d31e3SAndroid Build Coastguard Worker -D Directory to prepend to input file names. 79*1a3d31e3SAndroid Build Coastguard Worker -o Output file. If not given, output is stdout. 80*1a3d31e3SAndroid Build Coastguard Worker -b stdin read batching. 81*1a3d31e3SAndroid Build Coastguard Worker -s Show per-program io statistics. 82*1a3d31e3SAndroid Build Coastguard Worker -h Hash processes by name, not pid. 83*1a3d31e3SAndroid Build Coastguard Worker -t Track individual ios. Will tell you the time a request took to 84*1a3d31e3SAndroid Build Coastguard Worker get queued, to get dispatched, and to get completed. 85*1a3d31e3SAndroid Build Coastguard Worker -q Quiet. Don't display any stats at the end of the trace. 86*1a3d31e3SAndroid Build Coastguard Worker -w Only parse data between the given time interval in seconds. If 87*1a3d31e3SAndroid Build Coastguard Worker 'start' isn't given, blkparse defaults the start time to 0. 88*1a3d31e3SAndroid Build Coastguard Worker -d Dump sorted data in binary format 89*1a3d31e3SAndroid Build Coastguard Worker -f Output format. Customize the output format. The format field 90*1a3d31e3SAndroid Build Coastguard Worker identifiers are: 91*1a3d31e3SAndroid Build Coastguard Worker 92*1a3d31e3SAndroid Build Coastguard Worker %a - Action 93*1a3d31e3SAndroid Build Coastguard Worker %c - CPU ID 94*1a3d31e3SAndroid Build Coastguard Worker %C - Task command (process) name 95*1a3d31e3SAndroid Build Coastguard Worker %d - Direction (r/w) 96*1a3d31e3SAndroid Build Coastguard Worker %D - Device number 97*1a3d31e3SAndroid Build Coastguard Worker %e - Error number 98*1a3d31e3SAndroid Build Coastguard Worker %M - Major 99*1a3d31e3SAndroid Build Coastguard Worker %m - Minor 100*1a3d31e3SAndroid Build Coastguard Worker %N - Number of bytes 101*1a3d31e3SAndroid Build Coastguard Worker %n - Number of sectors 102*1a3d31e3SAndroid Build Coastguard Worker %p - PID 103*1a3d31e3SAndroid Build Coastguard Worker %P - PDU 104*1a3d31e3SAndroid Build Coastguard Worker %s - Sequence number 105*1a3d31e3SAndroid Build Coastguard Worker %S - Sector number 106*1a3d31e3SAndroid Build Coastguard Worker %t - Time (wallclock - nanoseconds) 107*1a3d31e3SAndroid Build Coastguard Worker %T - Time (wallclock - seconds) 108*1a3d31e3SAndroid Build Coastguard Worker %u - Time (processing - microseconds) 109*1a3d31e3SAndroid Build Coastguard Worker %U - Unplug depth 110*1a3d31e3SAndroid Build Coastguard Worker 111*1a3d31e3SAndroid Build Coastguard Worker -F Format specification. The individual specifiers are: 112*1a3d31e3SAndroid Build Coastguard Worker 113*1a3d31e3SAndroid Build Coastguard Worker A - Remap 114*1a3d31e3SAndroid Build Coastguard Worker B - Bounce 115*1a3d31e3SAndroid Build Coastguard Worker C - Complete 116*1a3d31e3SAndroid Build Coastguard Worker D - Issue 117*1a3d31e3SAndroid Build Coastguard Worker M - Back merge 118*1a3d31e3SAndroid Build Coastguard Worker F - Front merge 119*1a3d31e3SAndroid Build Coastguard Worker G - Get request 120*1a3d31e3SAndroid Build Coastguard Worker I - Insert 121*1a3d31e3SAndroid Build Coastguard Worker P - Plug 122*1a3d31e3SAndroid Build Coastguard Worker Q - Queue 123*1a3d31e3SAndroid Build Coastguard Worker R - Requeue 124*1a3d31e3SAndroid Build Coastguard Worker S - Sleep requests 125*1a3d31e3SAndroid Build Coastguard Worker T - Unplug timer 126*1a3d31e3SAndroid Build Coastguard Worker U - Unplug IO 127*1a3d31e3SAndroid Build Coastguard Worker W - Bounce 128*1a3d31e3SAndroid Build Coastguard Worker X - Split 129*1a3d31e3SAndroid Build Coastguard Worker 130*1a3d31e3SAndroid Build Coastguard Worker -v More verbose for marginal errors. 131*1a3d31e3SAndroid Build Coastguard Worker -V Print program version info. 132*1a3d31e3SAndroid Build Coastguard Worker 133*1a3d31e3SAndroid Build Coastguard Worker$ verify_blkparse filename 134*1a3d31e3SAndroid Build Coastguard Worker 135*1a3d31e3SAndroid Build Coastguard Worker Verifies an output file from blkparse. All it does is check if 136*1a3d31e3SAndroid Build Coastguard Worker the events in the file are correctly time ordered. If an entry 137*1a3d31e3SAndroid Build Coastguard Worker is found that isn't ordered, it's dumped to stdout. 138*1a3d31e3SAndroid Build Coastguard Worker 139*1a3d31e3SAndroid Build Coastguard Worker$ blkrawverify <dev> [<dev>...] 140*1a3d31e3SAndroid Build Coastguard Worker 141*1a3d31e3SAndroid Build Coastguard Worker The blkrawverify utility can be used to verify data retrieved 142*1a3d31e3SAndroid Build Coastguard Worker via blktrace. It will check for valid event formats, forward 143*1a3d31e3SAndroid Build Coastguard Worker progressing sequence numbers and time stamps, also does reasonable 144*1a3d31e3SAndroid Build Coastguard Worker checks for other potential issues within invidividual events. 145*1a3d31e3SAndroid Build Coastguard Worker 146*1a3d31e3SAndroid Build Coastguard Worker Errors found will be tracked in <dev>.verify.out. 147*1a3d31e3SAndroid Build Coastguard Worker 148*1a3d31e3SAndroid Build Coastguard WorkerIf you want to do live tracing, you can pipe the data between blktrace 149*1a3d31e3SAndroid Build Coastguard Workerand blkparse: 150*1a3d31e3SAndroid Build Coastguard Worker 151*1a3d31e3SAndroid Build Coastguard Worker% blktrace -d <device> -o - | blkparse -i - 152*1a3d31e3SAndroid Build Coastguard Worker 153*1a3d31e3SAndroid Build Coastguard WorkerThis has a small risk of displaying some traces a little out of sync, since 154*1a3d31e3SAndroid Build Coastguard Workerit will do batch sorts of input events. Similarly, you can do traces over 155*1a3d31e3SAndroid Build Coastguard Workerthe network. The network 'server' must run: 156*1a3d31e3SAndroid Build Coastguard Worker 157*1a3d31e3SAndroid Build Coastguard Worker% blktrace -l 158*1a3d31e3SAndroid Build Coastguard Worker 159*1a3d31e3SAndroid Build Coastguard Workerto listen to incoming blktrace connections, while the client should use 160*1a3d31e3SAndroid Build Coastguard Worker 161*1a3d31e3SAndroid Build Coastguard Worker% blktrace -d /dev/sda -h <server hostname> 162*1a3d31e3SAndroid Build Coastguard Worker 163*1a3d31e3SAndroid Build Coastguard Workerto connect and transfer data over the network. 164*1a3d31e3SAndroid Build Coastguard Worker 165*1a3d31e3SAndroid Build Coastguard Worker 166*1a3d31e3SAndroid Build Coastguard WorkerDocumentation 167*1a3d31e3SAndroid Build Coastguard Worker------------- 168*1a3d31e3SAndroid Build Coastguard Worker 169*1a3d31e3SAndroid Build Coastguard WorkerA users guide is distributed with the source. It is in latex, a 170*1a3d31e3SAndroid Build Coastguard Worker'make docs' will build a PDF in doc/. You need tetex and latex installed 171*1a3d31e3SAndroid Build Coastguard Workerto build the document. 172*1a3d31e3SAndroid Build Coastguard Worker 173*1a3d31e3SAndroid Build Coastguard Worker 174*1a3d31e3SAndroid Build Coastguard WorkerResources 175*1a3d31e3SAndroid Build Coastguard Worker--------- 176*1a3d31e3SAndroid Build Coastguard Worker 177*1a3d31e3SAndroid Build Coastguard Workervger hosts a mailing list dedicated to btrace discussion and development. 178*1a3d31e3SAndroid Build Coastguard WorkerThe list is called [email protected], subscribe by sending 179*1a3d31e3SAndroid Build Coastguard Workera mail to [email protected] with 'subscribe linux-btrace' in 180*1a3d31e3SAndroid Build Coastguard Workerthe mail body. 181*1a3d31e3SAndroid Build Coastguard Worker 182*1a3d31e3SAndroid Build Coastguard Worker 183*1a3d31e3SAndroid Build Coastguard Worker 184*1a3d31e3SAndroid Build Coastguard Worker2006-09-05, Jens Axboe <[email protected]> 185*1a3d31e3SAndroid Build Coastguard Worker 186