xref: /aosp_15_r20/external/blktrace/doc/blktrace.tex (revision 1a3d31e37cc95e9919fd86900a2b6a555f55952c)
1*1a3d31e3SAndroid Build Coastguard Worker\documentclass{article}
2*1a3d31e3SAndroid Build Coastguard Worker
3*1a3d31e3SAndroid Build Coastguard Worker%
4*1a3d31e3SAndroid Build Coastguard Worker% Copyright (C) 2005, 2006 Alan D. Brunelle <[email protected]>
5*1a3d31e3SAndroid Build Coastguard Worker%
6*1a3d31e3SAndroid Build Coastguard Worker%  This program is free software; you can redistribute it and/or modify
7*1a3d31e3SAndroid Build Coastguard Worker%  it under the terms of the GNU General Public License as published by
8*1a3d31e3SAndroid Build Coastguard Worker%  the Free Software Foundation; either version 2 of the License, or
9*1a3d31e3SAndroid Build Coastguard Worker%  (at your option) any later version.
10*1a3d31e3SAndroid Build Coastguard Worker%
11*1a3d31e3SAndroid Build Coastguard Worker%  This program is distributed in the hope that it will be useful,
12*1a3d31e3SAndroid Build Coastguard Worker%  but WITHOUT ANY WARRANTY; without even the implied warranty of
13*1a3d31e3SAndroid Build Coastguard Worker%  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*1a3d31e3SAndroid Build Coastguard Worker%  GNU General Public License for more details.
15*1a3d31e3SAndroid Build Coastguard Worker%
16*1a3d31e3SAndroid Build Coastguard Worker%  You should have received a copy of the GNU General Public License
17*1a3d31e3SAndroid Build Coastguard Worker%  along with this program; if not, write to the Free Software
18*1a3d31e3SAndroid Build Coastguard Worker%  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19*1a3d31e3SAndroid Build Coastguard Worker%
20*1a3d31e3SAndroid Build Coastguard Worker
21*1a3d31e3SAndroid Build Coastguard Worker\title{blktrace User Guide}
22*1a3d31e3SAndroid Build Coastguard Worker\author{blktrace: Jens Axboe ([email protected])\\
23*1a3d31e3SAndroid Build Coastguard Worker        User Guide: Alan D. Brunelle ([email protected])}
24*1a3d31e3SAndroid Build Coastguard Worker\date{27 May 2008}
25*1a3d31e3SAndroid Build Coastguard Worker
26*1a3d31e3SAndroid Build Coastguard Worker\begin{document}
27*1a3d31e3SAndroid Build Coastguard Worker\maketitle
28*1a3d31e3SAndroid Build Coastguard Worker%---------------------
29*1a3d31e3SAndroid Build Coastguard Worker\section{\label{sec:intro}Introduction}
30*1a3d31e3SAndroid Build Coastguard Worker
31*1a3d31e3SAndroid Build Coastguard Workerblktrace is a block layer IO tracing mechanism which provides detailed
32*1a3d31e3SAndroid Build Coastguard Workerinformation about request queue operations up to user space. There are
33*1a3d31e3SAndroid Build Coastguard Workerthree major components that are provided:
34*1a3d31e3SAndroid Build Coastguard Worker
35*1a3d31e3SAndroid Build Coastguard Worker\begin{description}
36*1a3d31e3SAndroid Build Coastguard Worker  \item[Kernel patch] A patch to the Linux kernel which includes the
37*1a3d31e3SAndroid Build Coastguard Worker  kernel event logging interfaces, and patches to areas within the block
38*1a3d31e3SAndroid Build Coastguard Worker  layer to emit event traces. If you run a 2.6.17-rc1 or newer kernel,
39*1a3d31e3SAndroid Build Coastguard Worker  you don't need to patch blktrace support as it is already included.
40*1a3d31e3SAndroid Build Coastguard Worker
41*1a3d31e3SAndroid Build Coastguard Worker  \item[blktrace] A utility which transfers event traces from the kernel
42*1a3d31e3SAndroid Build Coastguard Worker  into either long-term on-disk storage, or provides direct formatted
43*1a3d31e3SAndroid Build Coastguard Worker  output (via blkparse).
44*1a3d31e3SAndroid Build Coastguard Worker
45*1a3d31e3SAndroid Build Coastguard Worker  \item[blkparse] A utility which formats events stored in files, or when
46*1a3d31e3SAndroid Build Coastguard Worker  run in \emph{live} mode directly outputs data collected by blktrace.
47*1a3d31e3SAndroid Build Coastguard Worker\end{description}
48*1a3d31e3SAndroid Build Coastguard Worker
49*1a3d31e3SAndroid Build Coastguard Worker\subsection{blktrace Download Area}
50*1a3d31e3SAndroid Build Coastguard Worker
51*1a3d31e3SAndroid Build Coastguard WorkerThe blktrace and blkparse utilities and associated kernel patch are provided
52*1a3d31e3SAndroid Build Coastguard Workeras part of the following git repository:
53*1a3d31e3SAndroid Build Coastguard Worker
54*1a3d31e3SAndroid Build Coastguard Workergit://git.kernel.org/pub/scm/linux/kernel/git/axboe/blktrace.git bt
55*1a3d31e3SAndroid Build Coastguard Worker
56*1a3d31e3SAndroid Build Coastguard Worker%--------------------------
57*1a3d31e3SAndroid Build Coastguard Worker\newpage\section{\label{sec:quick-start}Quick Start Guide}
58*1a3d31e3SAndroid Build Coastguard Worker
59*1a3d31e3SAndroid Build Coastguard WorkerThe following sections outline some quick steps towards utilizing
60*1a3d31e3SAndroid Build Coastguard Workerblktrace. Some of the specific instructions below may need to be tailored
61*1a3d31e3SAndroid Build Coastguard Workerto your environment.
62*1a3d31e3SAndroid Build Coastguard Worker
63*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:get-blktrace}Retrieving blktrace}
64*1a3d31e3SAndroid Build Coastguard Worker
65*1a3d31e3SAndroid Build Coastguard WorkerAs noted above, the kernel patch along with the blktrace and blkparse utilities are stored in a git repository. One simple way to get going would be:
66*1a3d31e3SAndroid Build Coastguard Worker
67*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
68*1a3d31e3SAndroid Build Coastguard Worker% git clone git://git.kernel.org/pub/scm/linux/kernel/git/axboe/blktrace.git bt
69*1a3d31e3SAndroid Build Coastguard Worker% cd bt
70*1a3d31e3SAndroid Build Coastguard Worker% git checkout
71*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
72*1a3d31e3SAndroid Build Coastguard Worker
73*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:patching}Patching and configuring the Linux kernel}
74*1a3d31e3SAndroid Build Coastguard Worker
75*1a3d31e3SAndroid Build Coastguard WorkerA patch for a \emph{specific Linux kernel} is provided in bt/kernel (where
76*1a3d31e3SAndroid Build Coastguard Worker\emph{bt} is the name of the directory from the above git sequence). The
77*1a3d31e3SAndroid Build Coastguard Workerdetailed actual patching instructions for a Linux kernel is outside the
78*1a3d31e3SAndroid Build Coastguard Workerscope of this document, but the following may be used as a sample template.
79*1a3d31e3SAndroid Build Coastguard WorkerNote that you may skip this step, if you kernel is at least 2.6.17-rc1.
80*1a3d31e3SAndroid Build Coastguard Worker
81*1a3d31e3SAndroid Build Coastguard WorkerAs an example, bt/kernel contains blk-trace-2.6.14-rc1-git-G2, download
82*1a3d31e3SAndroid Build Coastguard Workerlinux-2.6.13.tar.bz2 and patch-2.6.14-rc1.bz2
83*1a3d31e3SAndroid Build Coastguard Worker
84*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
85*1a3d31e3SAndroid Build Coastguard Worker% tar xjf linux-2.6.13.tar.bz2
86*1a3d31e3SAndroid Build Coastguard Worker% mv linux-2.6.13 linux-2.6.14-rc1
87*1a3d31e3SAndroid Build Coastguard Worker% cd linux-2.6.14-rc1
88*1a3d31e3SAndroid Build Coastguard Worker% bunzip2 -c ../patch-2.6.14-rc1.bz2 | patch -p1
89*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
90*1a3d31e3SAndroid Build Coastguard Worker
91*1a3d31e3SAndroid Build Coastguard WorkerAt this point you may (optionally) remove linux-2.6.13.tar.bz2 and
92*1a3d31e3SAndroid Build Coastguard Workerpatch-2.6.14-rc1.bz2.
93*1a3d31e3SAndroid Build Coastguard Worker
94*1a3d31e3SAndroid Build Coastguard WorkerAt this point you should configure the Linux kernel for your specific
95*1a3d31e3SAndroid Build Coastguard Workersystem -- again, outside the scope of this document -- and then enable
96*1a3d31e3SAndroid Build Coastguard Worker\emph{Support for tracing block io actions.} To do this, run
97*1a3d31e3SAndroid Build Coastguard Worker
98*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
99*1a3d31e3SAndroid Build Coastguard Worker% make menuconfig                    or make xconfig, or edit .config, or ...
100*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
101*1a3d31e3SAndroid Build Coastguard Worker
102*1a3d31e3SAndroid Build Coastguard Workerand navigate through \emph{Device Drivers} and \emph{Block devices}
103*1a3d31e3SAndroid Build Coastguard Workerand then down to \emph{Support for tracing block io actions} and hit Y.
104*1a3d31e3SAndroid Build Coastguard Worker
105*1a3d31e3SAndroid Build Coastguard WorkerInstall the new kernel (and modules\ldots) and reboot.
106*1a3d31e3SAndroid Build Coastguard Worker
107*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:mount}Mounting the debugfs file system}
108*1a3d31e3SAndroid Build Coastguard Worker
109*1a3d31e3SAndroid Build Coastguard Workerblktrace utilizes files under the debug file system, and thus must have
110*1a3d31e3SAndroid Build Coastguard Workerthe mount point set up -- mounted on the directory /sys/kernel/debug.
111*1a3d31e3SAndroid Build Coastguard WorkerTo do this one may do either of the following:
112*1a3d31e3SAndroid Build Coastguard Worker
113*1a3d31e3SAndroid Build Coastguard Worker\begin{enumerate}
114*1a3d31e3SAndroid Build Coastguard Worker  \item Manually mount after each boot:
115*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
116*1a3d31e3SAndroid Build Coastguard Worker% mount -t debugfs debugfs /sys/kernel/debug
117*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
118*1a3d31e3SAndroid Build Coastguard Worker
119*1a3d31e3SAndroid Build Coastguard Worker  \item Add an entry into /etc/fstab, and have it done automatically at
120*1a3d31e3SAndroid Build Coastguard Worker  each boot\footnote{Note: after adding the entry to /etc/fstab, you
121*1a3d31e3SAndroid Build Coastguard Worker  could then mount the directory this time only by doing: \% mount debug}:
122*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
123*1a3d31e3SAndroid Build Coastguard Workerdebug /sys/kernel/debug debugfs default 0 0
124*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
125*1a3d31e3SAndroid Build Coastguard Worker\end{enumerate}
126*1a3d31e3SAndroid Build Coastguard Worker
127*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:build}Build the tools}
128*1a3d31e3SAndroid Build Coastguard Worker
129*1a3d31e3SAndroid Build Coastguard WorkerTo build and install the tools, execute the following sequence (as root):
130*1a3d31e3SAndroid Build Coastguard Worker
131*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
132*1a3d31e3SAndroid Build Coastguard Worker% cd bt
133*1a3d31e3SAndroid Build Coastguard Worker% make && make install
134*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
135*1a3d31e3SAndroid Build Coastguard Worker
136*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:live-blktrace}blktrace -- live}
137*1a3d31e3SAndroid Build Coastguard Worker
138*1a3d31e3SAndroid Build Coastguard WorkerNow to simply watch what is going on for a specific disk (to stop the
139*1a3d31e3SAndroid Build Coastguard Workertrace, hit control-C):
140*1a3d31e3SAndroid Build Coastguard Worker
141*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
142*1a3d31e3SAndroid Build Coastguard Worker% blktrace -d /dev/sda -o - | blkparse -i -
143*1a3d31e3SAndroid Build Coastguard Worker  8,0    3        1     0.000000000   697  G   W 223490 + 8 [kjournald]
144*1a3d31e3SAndroid Build Coastguard Worker  8,0    3        2     0.000001829   697  P   R [kjournald]
145*1a3d31e3SAndroid Build Coastguard Worker  8,0    3        3     0.000002197   697  Q   W 223490 + 8 [kjournald]
146*1a3d31e3SAndroid Build Coastguard Worker  8,0    3        4     0.000005533   697  M   W 223498 + 8 [kjournald]
147*1a3d31e3SAndroid Build Coastguard Worker  8,0    3        5     0.000008607   697  M   W 223506 + 8 [kjournald]
148*1a3d31e3SAndroid Build Coastguard Worker  8,0    3        6     0.000011569   697  M   W 223514 + 8 [kjournald]
149*1a3d31e3SAndroid Build Coastguard Worker  8,0    3        7     0.000014407   697  M   W 223522 + 8 [kjournald]
150*1a3d31e3SAndroid Build Coastguard Worker  8,0    3        8     0.000017367   697  M   W 223530 + 8 [kjournald]
151*1a3d31e3SAndroid Build Coastguard Worker  8,0    3        9     0.000020161   697  M   W 223538 + 8 [kjournald]
152*1a3d31e3SAndroid Build Coastguard Worker  8,0    3       10     0.000024062   697  D   W 223490 + 56 [kjournald]
153*1a3d31e3SAndroid Build Coastguard Worker  8,0    1       11     0.009507758     0  C   W 223490 + 56 [0]
154*1a3d31e3SAndroid Build Coastguard Worker  8,0    1       12     0.009538995   697  G   W 223546 + 8 [kjournald]
155*1a3d31e3SAndroid Build Coastguard Worker  8,0    1       13     0.009540033   697  P   R [kjournald]
156*1a3d31e3SAndroid Build Coastguard Worker  8,0    1       14     0.009540313   697  Q   W 223546 + 8 [kjournald]
157*1a3d31e3SAndroid Build Coastguard Worker  8,0    1       15     0.009542980   697  D   W 223546 + 8 [kjournald]
158*1a3d31e3SAndroid Build Coastguard Worker  8,0    1       16     0.013542170     0  C   W 223546 + 8 [0]
159*1a3d31e3SAndroid Build Coastguard Worker...
160*1a3d31e3SAndroid Build Coastguard Worker^C
161*1a3d31e3SAndroid Build Coastguard Worker...
162*1a3d31e3SAndroid Build Coastguard WorkerCPU1 (8,0):
163*1a3d31e3SAndroid Build Coastguard Worker Reads Queued:           0,        0KiB  Writes Queued:           7,      128KiB
164*1a3d31e3SAndroid Build Coastguard Worker Read Dispatches:        0,        0KiB  Write Dispatches:        7,      128KiB
165*1a3d31e3SAndroid Build Coastguard Worker Reads Completed:        0,        0KiB  Writes Completed:       11,      168KiB
166*1a3d31e3SAndroid Build Coastguard Worker Read Merges:            0               Write Merges:           25
167*1a3d31e3SAndroid Build Coastguard Worker IO unplugs:             0               Timer unplugs:           0
168*1a3d31e3SAndroid Build Coastguard Worker...
169*1a3d31e3SAndroid Build Coastguard WorkerCPU3 (8,0):
170*1a3d31e3SAndroid Build Coastguard Worker Reads Queued:           0,        0KiB  Writes Queued:           1,       28KiB
171*1a3d31e3SAndroid Build Coastguard Worker Read Dispatches:        0,        0KiB  Write Dispatches:        1,       28KiB
172*1a3d31e3SAndroid Build Coastguard Worker Reads Completed:        0,        0KiB  Writes Completed:        0,        0KiB
173*1a3d31e3SAndroid Build Coastguard Worker Read Merges:            0               Write Merges:            6
174*1a3d31e3SAndroid Build Coastguard Worker IO unplugs:             0               Timer unplugs:           0
175*1a3d31e3SAndroid Build Coastguard Worker
176*1a3d31e3SAndroid Build Coastguard WorkerTotal (8,0):
177*1a3d31e3SAndroid Build Coastguard Worker Reads Queued:           0,        0KiB  Writes Queued:          11,      168KiB
178*1a3d31e3SAndroid Build Coastguard Worker Read Dispatches:        0,        0KiB  Write Dispatches:       11,      168KiB
179*1a3d31e3SAndroid Build Coastguard Worker Reads Completed:        0,        0KiB  Writes Completed:       11,      168KiB
180*1a3d31e3SAndroid Build Coastguard Worker Read Merges:            0               Write Merges:           31
181*1a3d31e3SAndroid Build Coastguard Worker IO unplugs:             0               Timer unplugs:           3
182*1a3d31e3SAndroid Build Coastguard Worker
183*1a3d31e3SAndroid Build Coastguard WorkerEvents (8,0): 89 entries, 0 skips
184*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
185*1a3d31e3SAndroid Build Coastguard Worker
186*1a3d31e3SAndroid Build Coastguard WorkerA \emph{btrace} script is included in the distribution to ease live
187*1a3d31e3SAndroid Build Coastguard Workertracing of devices. The above could also be accomplished by issuing:
188*1a3d31e3SAndroid Build Coastguard Worker
189*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
190*1a3d31e3SAndroid Build Coastguard Worker% btrace /dev/sda
191*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
192*1a3d31e3SAndroid Build Coastguard Worker
193*1a3d31e3SAndroid Build Coastguard WorkerBy default, \emph{btrace} runs the trace in quiet mode so it will not
194*1a3d31e3SAndroid Build Coastguard Workerinclude statistics when you break the run. Add the \emph{-S} option to
195*1a3d31e3SAndroid Build Coastguard Workerget that dumped as well.
196*1a3d31e3SAndroid Build Coastguard Worker
197*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:pc-blktrace}blktrace -- SCSI commands}
198*1a3d31e3SAndroid Build Coastguard Worker
199*1a3d31e3SAndroid Build Coastguard WorkerThe previous section showed typical file system io actions, but blktrace
200*1a3d31e3SAndroid Build Coastguard Workercan also show SCSI commands going in and out of the queue as submitted
201*1a3d31e3SAndroid Build Coastguard Workerby applications using the SCSI Generic (\emph{sg}) interface.
202*1a3d31e3SAndroid Build Coastguard Worker
203*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
204*1a3d31e3SAndroid Build Coastguard Worker% btrace /dev/cdrom
205*1a3d31e3SAndroid Build Coastguard Worker[...]
206*1a3d31e3SAndroid Build Coastguard Worker  3,0    0       25     0.004884107 13528  G   R 0 + 0 [inquiry]
207*1a3d31e3SAndroid Build Coastguard Worker  3,0    0       26     0.004890361 13528  I   R 56 (12 00 00 00 38 ..) [inquiry]
208*1a3d31e3SAndroid Build Coastguard Worker  3,0    0       27     0.004891223 13528  P   R [inquiry]
209*1a3d31e3SAndroid Build Coastguard Worker  3,0    0       28     0.004893250 13528  D   R 56 (12 00 00 00 38 ..) [inquiry]
210*1a3d31e3SAndroid Build Coastguard Worker  3,0    0       29     0.005344910     0  C   R (12 00 00 00 38 ..) [0]
211*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
212*1a3d31e3SAndroid Build Coastguard Worker
213*1a3d31e3SAndroid Build Coastguard WorkerHere we see a program issuing an INQUIRY command to the CDROM device.
214*1a3d31e3SAndroid Build Coastguard WorkerThe program requested a read of 56 bytes of data, the CDB is included
215*1a3d31e3SAndroid Build Coastguard Workerin parenthesis after the data length. The completion event shows shows
216*1a3d31e3SAndroid Build Coastguard Workerthat the command completed successfully. Tracing SCSI commands can be
217*1a3d31e3SAndroid Build Coastguard Workervery useful for debugging problems with programs talking directly to the
218*1a3d31e3SAndroid Build Coastguard Workerdevice. An example of that would be \emph{cdrecord} burning.
219*1a3d31e3SAndroid Build Coastguard Worker
220*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:blktrace-post}blktrace -- post-processing}
221*1a3d31e3SAndroid Build Coastguard Worker
222*1a3d31e3SAndroid Build Coastguard WorkerAnother way to run blktrace is to have blktrace save data away for later
223*1a3d31e3SAndroid Build Coastguard Workerformatting by blkparse. This would be useful if you want to get
224*1a3d31e3SAndroid Build Coastguard Workermeasurements while running specific loads.
225*1a3d31e3SAndroid Build Coastguard Worker
226*1a3d31e3SAndroid Build Coastguard WorkerTo do this, one would specify the device (or devices) to be watched. Then
227*1a3d31e3SAndroid Build Coastguard Workergo run you test cases. Stop the trace, and at your leisure utilize
228*1a3d31e3SAndroid Build Coastguard Workerblkparse to see the results.
229*1a3d31e3SAndroid Build Coastguard Worker
230*1a3d31e3SAndroid Build Coastguard WorkerIn this example, devices /dev/sdaa, /dev/sdc and /dev/sdo are used in an
231*1a3d31e3SAndroid Build Coastguard WorkerLVM volume called adb3/vol.
232*1a3d31e3SAndroid Build Coastguard Worker
233*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
234*1a3d31e3SAndroid Build Coastguard Worker% blktrace /dev/sdaa /dev/sdc /dev/sdo &
235*1a3d31e3SAndroid Build Coastguard Worker[1] 9713
236*1a3d31e3SAndroid Build Coastguard Worker%
237*1a3d31e3SAndroid Build Coastguard Worker% mkfs -t ext3 /dev/adb3/vol
238*1a3d31e3SAndroid Build Coastguard Workermke2fs 1.35 (28-Feb-2004)
239*1a3d31e3SAndroid Build Coastguard WorkerFilesystem label=
240*1a3d31e3SAndroid Build Coastguard WorkerOS type: Linux
241*1a3d31e3SAndroid Build Coastguard WorkerBlock size=4096 (log=2)
242*1a3d31e3SAndroid Build Coastguard WorkerFragment size=4096 (log=2)
243*1a3d31e3SAndroid Build Coastguard Worker16793600 inodes, 33555456 blocks
244*1a3d31e3SAndroid Build Coastguard Worker1677772 blocks (5.00%) reserved for the super user
245*1a3d31e3SAndroid Build Coastguard WorkerFirst data block=0
246*1a3d31e3SAndroid Build Coastguard WorkerMaximum filesystem blocks=4294967296
247*1a3d31e3SAndroid Build Coastguard Worker1025 block groups
248*1a3d31e3SAndroid Build Coastguard Worker32768 blocks per group, 32768 fragments per group
249*1a3d31e3SAndroid Build Coastguard Worker16384 inodes per group
250*1a3d31e3SAndroid Build Coastguard WorkerSuperblock backups stored on blocks:
251*1a3d31e3SAndroid Build Coastguard Worker        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
252*1a3d31e3SAndroid Build Coastguard Worker	4096000, 7962624, 11239424, 20480000, 23887872
253*1a3d31e3SAndroid Build Coastguard Worker
254*1a3d31e3SAndroid Build Coastguard WorkerWriting inode tables: done
255*1a3d31e3SAndroid Build Coastguard WorkerCreating journal (8192 blocks): done
256*1a3d31e3SAndroid Build Coastguard WorkerWriting superblocks and filesystem accounting information: done
257*1a3d31e3SAndroid Build Coastguard Worker
258*1a3d31e3SAndroid Build Coastguard WorkerThis filesystem will be automatically checked every 27 mounts or
259*1a3d31e3SAndroid Build Coastguard Worker180 days, whichever comes first.  Use tune2fs -c or -i to override.
260*1a3d31e3SAndroid Build Coastguard Worker%
261*1a3d31e3SAndroid Build Coastguard Worker% kill -15 9713
262*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
263*1a3d31e3SAndroid Build Coastguard Worker
264*1a3d31e3SAndroid Build Coastguard WorkerThen you could process the events later:
265*1a3d31e3SAndroid Build Coastguard Worker
266*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
267*1a3d31e3SAndroid Build Coastguard Worker%
268*1a3d31e3SAndroid Build Coastguard Worker% blkparse sdaa sdc sdo > events
269*1a3d31e3SAndroid Build Coastguard Worker% less events
270*1a3d31e3SAndroid Build Coastguard Worker  8,32   1        1     0.000000000  9728  G   R 384 + 32 [mkfs.ext3]
271*1a3d31e3SAndroid Build Coastguard Worker  8,32   1        2     0.000001959  9728  P   R [mkfs.ext3]
272*1a3d31e3SAndroid Build Coastguard Worker  8,32   1        3     0.000002446  9728  Q   R 384 + 32 [mkfs.ext3]
273*1a3d31e3SAndroid Build Coastguard Worker  8,32   1        4     0.000005110  9728  D   R 384 + 32 [mkfs.ext3]
274*1a3d31e3SAndroid Build Coastguard Worker  8,32   3        5     0.000200570     0  C   R 384 + 32 [0]
275*1a3d31e3SAndroid Build Coastguard Worker  8,224  3        1     0.021658989  9728  G   R 384 + 32 [mkfs.ext3]
276*1a3d31e3SAndroid Build Coastguard Worker...
277*1a3d31e3SAndroid Build Coastguard Worker 65,160  3   163392    41.117070504     0  C   W 87469088 + 1376 [0]
278*1a3d31e3SAndroid Build Coastguard Worker  8,32   3   163374    41.122683668     0  C   W 88168160 + 1376 [0]
279*1a3d31e3SAndroid Build Coastguard Worker 65,160  3   163393    41.129952433     0  C   W 87905984 + 1376 [0]
280*1a3d31e3SAndroid Build Coastguard Worker 65,160  3   163394    41.130049431     0  D   W 89129344 + 1376 [swapper]
281*1a3d31e3SAndroid Build Coastguard Worker 65,160  3   163395    41.130067135     0  D   W 89216704 + 1376 [swapper]
282*1a3d31e3SAndroid Build Coastguard Worker 65,160  3   163396    41.130083785     0  D   W 89304096 + 1376 [swapper]
283*1a3d31e3SAndroid Build Coastguard Worker 65,160  3   163397    41.130099455     0  D   W 89391488 + 1376 [swapper]
284*1a3d31e3SAndroid Build Coastguard Worker 65,160  3   163398    41.130114732     0  D   W 89478848 + 1376 [swapper]
285*1a3d31e3SAndroid Build Coastguard Worker 65,160  3   163399    41.130128885     0  D   W 89481536 + 64 [swapper]
286*1a3d31e3SAndroid Build Coastguard Worker  8,32   3   163375    41.134758196     0  C   W 86333152 + 1376 [0]
287*1a3d31e3SAndroid Build Coastguard Worker 65,160  3   163400    41.142229726     0  C   W 89129344 + 1376 [0]
288*1a3d31e3SAndroid Build Coastguard Worker 65,160  3   163401    41.144952314     0  C   W 89481536 + 64 [0]
289*1a3d31e3SAndroid Build Coastguard Worker  8,32   3   163376    41.147441930     0  C   W 88342912 + 1376 [0]
290*1a3d31e3SAndroid Build Coastguard Worker 65,160  3   163402    41.155869604     0  C   W 89478848 + 1376 [0]
291*1a3d31e3SAndroid Build Coastguard Worker  8,32   3   163377    41.159466082     0  C   W 86245760 + 1376 [0]
292*1a3d31e3SAndroid Build Coastguard Worker 65,160  3   163403    41.166944976     0  C   W 89216704 + 1376 [0]
293*1a3d31e3SAndroid Build Coastguard Worker 65,160  3   163404    41.178968252     0  C   W 89304096 + 1376 [0]
294*1a3d31e3SAndroid Build Coastguard Worker 65,160  3   163405    41.191860173     0  C   W 89391488 + 1376 [0]
295*1a3d31e3SAndroid Build Coastguard Worker...
296*1a3d31e3SAndroid Build Coastguard WorkerEvents (sdo): 0 entries, 0 skips
297*1a3d31e3SAndroid Build Coastguard Worker
298*1a3d31e3SAndroid Build Coastguard WorkerCPU0 (65,160):
299*1a3d31e3SAndroid Build Coastguard Worker Reads Queued:           0,        0KiB  Writes Queued:           9,    5,520KiB
300*1a3d31e3SAndroid Build Coastguard Worker Read Dispatches:        0,        0KiB  Write Dispatches:        0,        0KiB
301*1a3d31e3SAndroid Build Coastguard Worker Reads Completed:        0,        0KiB  Writes Completed:        0,        0KiB
302*1a3d31e3SAndroid Build Coastguard Worker Read Merges:            0               Write Merges:          336
303*1a3d31e3SAndroid Build Coastguard Worker IO unplugs:             0               Timer unplugs:           0
304*1a3d31e3SAndroid Build Coastguard WorkerCPU1 (65,160):
305*1a3d31e3SAndroid Build Coastguard Worker Reads Queued:       2,411,   38,576KiB  Writes Queued:         769,  425,408KiB
306*1a3d31e3SAndroid Build Coastguard Worker Read Dispatches:    2,407,   38,512KiB  Write Dispatches:      118,   61,680KiB
307*1a3d31e3SAndroid Build Coastguard Worker Reads Completed:        0,        0KiB  Writes Completed:        0,        0KiB
308*1a3d31e3SAndroid Build Coastguard Worker Read Merges:            0               Write Merges:       25,819
309*1a3d31e3SAndroid Build Coastguard Worker IO unplugs:             0               Timer unplugs:           4
310*1a3d31e3SAndroid Build Coastguard WorkerCPU2 (65,160):
311*1a3d31e3SAndroid Build Coastguard Worker Reads Queued:           2,       32KiB  Writes Queued:          18,   10,528KiB
312*1a3d31e3SAndroid Build Coastguard Worker Read Dispatches:        2,       32KiB  Write Dispatches:        3,    1,344KiB
313*1a3d31e3SAndroid Build Coastguard Worker Reads Completed:        0,        0KiB  Writes Completed:        0,        0KiB
314*1a3d31e3SAndroid Build Coastguard Worker Read Merges:            0               Write Merges:          640
315*1a3d31e3SAndroid Build Coastguard Worker IO unplugs:             0               Timer unplugs:           0
316*1a3d31e3SAndroid Build Coastguard WorkerCPU3 (65,160):
317*1a3d31e3SAndroid Build Coastguard Worker Reads Queued:      20,572,  329,152KiB  Writes Queued:         594,  279,712KiB
318*1a3d31e3SAndroid Build Coastguard Worker Read Dispatches:   20,576,  329,216KiB  Write Dispatches:    1,474,  740,720KiB
319*1a3d31e3SAndroid Build Coastguard Worker Reads Completed:   22,985,  367,760KiB  Writes Completed:    1,390,  721,168KiB
320*1a3d31e3SAndroid Build Coastguard Worker Read Merges:            0               Write Merges:       16,888
321*1a3d31e3SAndroid Build Coastguard Worker IO unplugs:             0               Timer unplugs:           0
322*1a3d31e3SAndroid Build Coastguard Worker
323*1a3d31e3SAndroid Build Coastguard WorkerTotal (65,160):
324*1a3d31e3SAndroid Build Coastguard Worker Reads Queued:      22,985,  367,760KiB  Writes Queued:       1,390,  721,168KiB
325*1a3d31e3SAndroid Build Coastguard Worker Read Dispatches:   22,985,  367,760KiB  Write Dispatches:    1,595,  803,744KiB
326*1a3d31e3SAndroid Build Coastguard Worker Reads Completed:   22,985,  367,760KiB  Writes Completed:    1,390,  721,168KiB
327*1a3d31e3SAndroid Build Coastguard Worker Read Merges:            0               Write Merges:       43,683
328*1a3d31e3SAndroid Build Coastguard Worker IO unplugs:             0               Timer unplugs:           4
329*1a3d31e3SAndroid Build Coastguard Worker...
330*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
331*1a3d31e3SAndroid Build Coastguard Worker
332*1a3d31e3SAndroid Build Coastguard Worker%----------------------------
333*1a3d31e3SAndroid Build Coastguard Worker\newpage\section{\label{sec:blktrace-ug}blktrace User Guide}
334*1a3d31e3SAndroid Build Coastguard Worker
335*1a3d31e3SAndroid Build Coastguard WorkerThe \emph{blktrace} utility extracts event traces from the kernel (via
336*1a3d31e3SAndroid Build Coastguard Workerthe relaying through the debug file system). Some background details
337*1a3d31e3SAndroid Build Coastguard Workerconcerning the run-time behaviour of blktrace will help to understand some
338*1a3d31e3SAndroid Build Coastguard Workerof the more arcane command line options:
339*1a3d31e3SAndroid Build Coastguard Worker
340*1a3d31e3SAndroid Build Coastguard Worker\begin{itemize}
341*1a3d31e3SAndroid Build Coastguard Worker  \item blktrace receives data from the kernel in buffers passed up
342*1a3d31e3SAndroid Build Coastguard Worker  through the debug file system (relay). Each device being traced has
343*1a3d31e3SAndroid Build Coastguard Worker  a file created in the mounted directory for the debugfs, which defaults
344*1a3d31e3SAndroid Build Coastguard Worker  to \emph{/sys/kernel/debug} -- this can be overridden with the \emph{-r}
345*1a3d31e3SAndroid Build Coastguard Worker  command line argument.
346*1a3d31e3SAndroid Build Coastguard Worker
347*1a3d31e3SAndroid Build Coastguard Worker  \item blktrace defaults to collecting \emph{all} events that can be
348*1a3d31e3SAndroid Build Coastguard Worker  traced. To limit the events being captured, you can specify one or
349*1a3d31e3SAndroid Build Coastguard Worker  more filter masks via the \emph{-a} option.
350*1a3d31e3SAndroid Build Coastguard Worker
351*1a3d31e3SAndroid Build Coastguard Worker  Alternatively, one may specify the entire mask utilizing a hexadecimal
352*1a3d31e3SAndroid Build Coastguard Worker  value that is version-specific. (Requires understanding of the internal
353*1a3d31e3SAndroid Build Coastguard Worker  representation of the filter mask.)
354*1a3d31e3SAndroid Build Coastguard Worker
355*1a3d31e3SAndroid Build Coastguard Worker  \item As noted above, the events are passed up via a series of buffers
356*1a3d31e3SAndroid Build Coastguard Worker  stored into debugfs files. The size and number of buffers can be
357*1a3d31e3SAndroid Build Coastguard Worker  specified via the \emph{-b} and \emph{-n} arguments respectively.
358*1a3d31e3SAndroid Build Coastguard Worker
359*1a3d31e3SAndroid Build Coastguard Worker  \item blktrace stores the extracted data into files stored in the
360*1a3d31e3SAndroid Build Coastguard Worker  \emph{local} directory. The format of the file names is (by default)
361*1a3d31e3SAndroid Build Coastguard Worker  \emph{device}.blktrace.\emph{cpu}, where \emph{device} is the base
362*1a3d31e3SAndroid Build Coastguard Worker  device name (e.g, if we are tracing /dev/sda, the base device name would
363*1a3d31e3SAndroid Build Coastguard Worker  be \emph{sda}); and \emph{cpu} identifies a CPU for the event stream.
364*1a3d31e3SAndroid Build Coastguard Worker
365*1a3d31e3SAndroid Build Coastguard Worker  The \emph{device} portion of the event file name can be changed via
366*1a3d31e3SAndroid Build Coastguard Worker  the \emph{-o} option.
367*1a3d31e3SAndroid Build Coastguard Worker
368*1a3d31e3SAndroid Build Coastguard Worker  \item blktrace may also be run concurrently with blkparse to produce
369*1a3d31e3SAndroid Build Coastguard Worker  \emph{live} output -- to do this specify \emph{-o -} for blktrace.
370*1a3d31e3SAndroid Build Coastguard Worker
371*1a3d31e3SAndroid Build Coastguard Worker  \item The default behaviour for blktrace is to run forever until explicitly killed by the user (via a control-C, or \emph{kill} utility invocation). There are two ways to modify this:
372*1a3d31e3SAndroid Build Coastguard Worker
373*1a3d31e3SAndroid Build Coastguard Worker  \begin{enumerate}
374*1a3d31e3SAndroid Build Coastguard Worker    \item You may utilize the blktrace utility itself to \emph{kill}
375*1a3d31e3SAndroid Build Coastguard Worker    a running trace -- via the \emph{-k} option.
376*1a3d31e3SAndroid Build Coastguard Worker
377*1a3d31e3SAndroid Build Coastguard Worker    \item You can specify a run-time duration for blktrace via the
378*1a3d31e3SAndroid Build Coastguard Worker    \emph{-w} option -- then blktrace will run for the specified number
379*1a3d31e3SAndroid Build Coastguard Worker    of seconds, and then halt.
380*1a3d31e3SAndroid Build Coastguard Worker  \end{enumerate}
381*1a3d31e3SAndroid Build Coastguard Worker\end{itemize}
382*1a3d31e3SAndroid Build Coastguard Worker
383*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:blktrace-args}Command line arguments}
384*1a3d31e3SAndroid Build Coastguard Worker\begin{tabular}{|l|l|l|}\hline
385*1a3d31e3SAndroid Build Coastguard WorkerShort              & Long                       & Description \\ \hline\hline
386*1a3d31e3SAndroid Build Coastguard Worker-A \emph{hex-mask} & --set-mask=\emph{hex-mask} & Set filter mask to \emph{hex-mask} \\ \hline
387*1a3d31e3SAndroid Build Coastguard Worker-a \emph{mask}     & --act-mask=\emph{mask}     & Add \emph{mask} to current filter (see below for masks) \\ \hline
388*1a3d31e3SAndroid Build Coastguard Worker-b \emph{size}     & --buffer-size=\emph{size}  & Specifies buffer size for event extraction (scaled by $2^{10}$) \\ \hline
389*1a3d31e3SAndroid Build Coastguard Worker-d \emph{dev}      & --dev=\emph{dev}           & Adds \emph{dev} as a device to trace \\ \hline
390*1a3d31e3SAndroid Build Coastguard Worker-k                 & --kill                     & Kill on-going trace \\ \hline
391*1a3d31e3SAndroid Build Coastguard Worker-n \emph{num-sub}  & --num-sub=\emph{num-sub}   & Specifies number of buffers to use \\ \hline
392*1a3d31e3SAndroid Build Coastguard Worker-o \emph{file}     & --output=\emph{file}       & Prepend \emph{file} to output file name(s) \\
393*1a3d31e3SAndroid Build Coastguard Worker                   &                            & \textbf{This only works when using a single device} \\
394*1a3d31e3SAndroid Build Coastguard Worker                   &                            & \textbf{or when piping the output via \texttt{-o -}} \\
395*1a3d31e3SAndroid Build Coastguard Worker                   &                            & \textbf{with multiple devices.} \\ \hline
396*1a3d31e3SAndroid Build Coastguard Worker-r \emph{rel-path} & --relay=\emph{rel-path}    & Specifies debugfs mount point \\ \hline
397*1a3d31e3SAndroid Build Coastguard Worker-V                 & --version                  & Outputs version \\ \hline
398*1a3d31e3SAndroid Build Coastguard Worker-w \emph{seconds}  & --stopwatch=\emph{seconds} & Sets run time to the number of seconds specified \\ \hline
399*1a3d31e3SAndroid Build Coastguard Worker-I \emph{devs file}& --input-devs=\emph{devs file}& Adds devices found in \emph{devs file} to list of devices to trace. \\
400*1a3d31e3SAndroid Build Coastguard Worker                   &                              & (One device per line.) \\ \hline
401*1a3d31e3SAndroid Build Coastguard Worker\end{tabular}
402*1a3d31e3SAndroid Build Coastguard Worker
403*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\label{sec:filter-mask}Filter Masks}
404*1a3d31e3SAndroid Build Coastguard WorkerThe following masks may be passed with the \emph{-a} command line
405*1a3d31e3SAndroid Build Coastguard Workeroption, multiple filters may be combined via multiple \emph{-a} command
406*1a3d31e3SAndroid Build Coastguard Workerline options.\smallskip
407*1a3d31e3SAndroid Build Coastguard Worker
408*1a3d31e3SAndroid Build Coastguard Worker\begin{tabular}{|l|l|}\hline
409*1a3d31e3SAndroid Build Coastguard Workerbarrier & \emph{barrier} attribute \\ \hline
410*1a3d31e3SAndroid Build Coastguard Workercomplete & \emph{completed} by driver \\ \hline
411*1a3d31e3SAndroid Build Coastguard Workerfs & \emph{FS} requests \\ \hline
412*1a3d31e3SAndroid Build Coastguard Workerissue & \emph{issued} to driver \\ \hline
413*1a3d31e3SAndroid Build Coastguard Workerpc & \emph{packet command} events \\ \hline
414*1a3d31e3SAndroid Build Coastguard Workerqueue & \emph{queue} operations \\ \hline
415*1a3d31e3SAndroid Build Coastguard Workerread & \emph{read} traces \\ \hline
416*1a3d31e3SAndroid Build Coastguard Workerrequeue & \emph{requeue} operations \\ \hline
417*1a3d31e3SAndroid Build Coastguard Workersync & \emph{synchronous} attribute \\ \hline
418*1a3d31e3SAndroid Build Coastguard Workerwrite & \emph{write} traces \\ \hline
419*1a3d31e3SAndroid Build Coastguard Workernotify & \emph{notify} trace messages \\ \hline
420*1a3d31e3SAndroid Build Coastguard Worker\end{tabular}
421*1a3d31e3SAndroid Build Coastguard Worker
422*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\label{sec:request-types}Request types}
423*1a3d31e3SAndroid Build Coastguard Workerblktrace disguingishes between two types of block layer requests,
424*1a3d31e3SAndroid Build Coastguard Workerfile system and scsi commands. The former are dubbed \emph{fs}
425*1a3d31e3SAndroid Build Coastguard Workerrequests, the latter \emph{pc} requests. File system requests are
426*1a3d31e3SAndroid Build Coastguard Workernormal read/write operations, ie any type of read or write from a
427*1a3d31e3SAndroid Build Coastguard Workerspecific disk location at a given size. These requests typically
428*1a3d31e3SAndroid Build Coastguard Workeroriginate from a user process, but they may also be initiated by
429*1a3d31e3SAndroid Build Coastguard Workerthe vm flushing dirty data to disk or the file system syncing
430*1a3d31e3SAndroid Build Coastguard Workera super or journal block to disk. \emph{pc} requests are SCSI
431*1a3d31e3SAndroid Build Coastguard Workercommands. blktrace sends the command data block as a payload
432*1a3d31e3SAndroid Build Coastguard Workerso that blkparse can decode it.
433*1a3d31e3SAndroid Build Coastguard Worker
434*1a3d31e3SAndroid Build Coastguard Worker%----------------------------
435*1a3d31e3SAndroid Build Coastguard Worker\newpage\section{\label{sec:blkparse-ug}blkparse User Guide}
436*1a3d31e3SAndroid Build Coastguard Worker
437*1a3d31e3SAndroid Build Coastguard WorkerThe \emph{blkparse} utility will attempt to combine streams of events
438*1a3d31e3SAndroid Build Coastguard Workerfor various devices on various CPUs, and produce a formatted output of
439*1a3d31e3SAndroid Build Coastguard Workerthe event information. As with blktrace, some details concerning blkparse
440*1a3d31e3SAndroid Build Coastguard Workerwill help in understanding the command line options presented below.
441*1a3d31e3SAndroid Build Coastguard Worker
442*1a3d31e3SAndroid Build Coastguard Worker\begin{itemize}
443*1a3d31e3SAndroid Build Coastguard Worker  \item By default, blkparse expects to run in a post-processing mode
444*1a3d31e3SAndroid Build Coastguard Worker  -- one where the trace events have been saved by a previous run
445*1a3d31e3SAndroid Build Coastguard Worker  of blktrace, and blkparse is combining event streams and dumping
446*1a3d31e3SAndroid Build Coastguard Worker  formatted data.
447*1a3d31e3SAndroid Build Coastguard Worker
448*1a3d31e3SAndroid Build Coastguard Worker  blkparse \emph{may} be run in a \emph{live} manner concurrently with
449*1a3d31e3SAndroid Build Coastguard Worker  blktrace by specifying \emph{-i -} to blkparse, and combining it with
450*1a3d31e3SAndroid Build Coastguard Worker  the live option for blktrace. An example would be:
451*1a3d31e3SAndroid Build Coastguard Worker
452*1a3d31e3SAndroid Build Coastguard Worker  \begin{verbatim}
453*1a3d31e3SAndroid Build Coastguard Worker  % blktrace -d /dev/sda -o - | blkparse -i -
454*1a3d31e3SAndroid Build Coastguard Worker  \end{verbatim}
455*1a3d31e3SAndroid Build Coastguard Worker
456*1a3d31e3SAndroid Build Coastguard Worker  \item You can set how many blkparse batches event reads via the
457*1a3d31e3SAndroid Build Coastguard Worker  \emph{-b} option, the default is to handle events in batches of 512.
458*1a3d31e3SAndroid Build Coastguard Worker
459*1a3d31e3SAndroid Build Coastguard Worker  \item If you have saved event traces in blktrace with different output
460*1a3d31e3SAndroid Build Coastguard Worker  names (via the \emph{-o} option to blktrace), you must specify the
461*1a3d31e3SAndroid Build Coastguard Worker  same \emph{input} name via the \emph{-i} option.
462*1a3d31e3SAndroid Build Coastguard Worker
463*1a3d31e3SAndroid Build Coastguard Worker  \item The format of the output data can be controlled via the \emph{-f}
464*1a3d31e3SAndroid Build Coastguard Worker  or \emph{-F} options -- see section~\ref{sec:blkparse-format} for details.
465*1a3d31e3SAndroid Build Coastguard Worker
466*1a3d31e3SAndroid Build Coastguard Worker  By default, blkparse sends formatted data to standard output. This may
467*1a3d31e3SAndroid Build Coastguard Worker  be changed via the \emph{-o} option, or text output can be disabled
468*1a3d31e3SAndroid Build Coastguard Worker  via the\emph{-O} option. A merged binary stream can be produced using
469*1a3d31e3SAndroid Build Coastguard Worker  the \emph{-d} option.
470*1a3d31e3SAndroid Build Coastguard Worker
471*1a3d31e3SAndroid Build Coastguard Worker\end{itemize}
472*1a3d31e3SAndroid Build Coastguard Worker
473*1a3d31e3SAndroid Build Coastguard Worker\newpage\subsection{\label{sec:blkparse-args}Command line arguments}
474*1a3d31e3SAndroid Build Coastguard Worker\begin{tabular}{|l|l|l|}\hline
475*1a3d31e3SAndroid Build Coastguard WorkerShort              & Long                       & Description \\ \hline\hline
476*1a3d31e3SAndroid Build Coastguard Worker-b \emph{batch}    & --batch={batch}            & Standard input read batching \\ \hline
477*1a3d31e3SAndroid Build Coastguard Worker
478*1a3d31e3SAndroid Build Coastguard Worker-i \emph{file}     & --input=\emph{file}        & Specifies base name for input files -- default is \emph{device}.blktrace.\emph{cpu}. \\
479*1a3d31e3SAndroid Build Coastguard Worker                   &                            & As noted above, specifying \emph{-i -} runs in \emph{live} mode with blktrace \\
480*1a3d31e3SAndroid Build Coastguard Worker		   &                            & (reading data from standard in). \\ \hline
481*1a3d31e3SAndroid Build Coastguard Worker
482*1a3d31e3SAndroid Build Coastguard Worker-F \emph{typ,fmt}  & --format=\emph{typ,fmt}    & Sets output format \\
483*1a3d31e3SAndroid Build Coastguard Worker-f \emph{fmt}      & --format-spec=\emph{fmt}   & (See section~\ref{sec:blkparse-format} for details.) \\
484*1a3d31e3SAndroid Build Coastguard Worker                   &                            & \\
485*1a3d31e3SAndroid Build Coastguard Worker		   &                            & The -f form specifies a format for all events \\
486*1a3d31e3SAndroid Build Coastguard Worker                   &                            & \\
487*1a3d31e3SAndroid Build Coastguard Worker		   &                            & The -F form allows one to specify a format for a specific \\
488*1a3d31e3SAndroid Build Coastguard Worker		   &                            & event type. The single-character \emph{typ} field is one of the \\
489*1a3d31e3SAndroid Build Coastguard Worker		   &                            & action specifiers in section~\ref{sec:act-table} \\ \hline
490*1a3d31e3SAndroid Build Coastguard Worker
491*1a3d31e3SAndroid Build Coastguard Worker
492*1a3d31e3SAndroid Build Coastguard Worker-m                 & --missing                  & Print missing entries\\ \hline
493*1a3d31e3SAndroid Build Coastguard Worker
494*1a3d31e3SAndroid Build Coastguard Worker-h                 & --hash-by-name             & Hash processes by name, not by PID\\ \hline
495*1a3d31e3SAndroid Build Coastguard Worker
496*1a3d31e3SAndroid Build Coastguard Worker-o \emph{file}     & --output=\emph{file}       & Output file \\ \hline
497*1a3d31e3SAndroid Build Coastguard Worker-O                 & --no-text-output           & Do \emph{not} produce text output, used for binary (-d) only \\ \hline
498*1a3d31e3SAndroid Build Coastguard Worker
499*1a3d31e3SAndroid Build Coastguard Worker-d \emph{file}     & --dump-binary=\emph{file}  & Binary output file \\ \hline
500*1a3d31e3SAndroid Build Coastguard Worker
501*1a3d31e3SAndroid Build Coastguard Worker-q                 & --quiet                    & Quite mode \\ \hline
502*1a3d31e3SAndroid Build Coastguard Worker
503*1a3d31e3SAndroid Build Coastguard Worker-s                 & --per-program-stats        & Displays data sorted by program \\ \hline
504*1a3d31e3SAndroid Build Coastguard Worker
505*1a3d31e3SAndroid Build Coastguard Worker-t                 & --track-ios                & Display time deltas per IO \\ \hline
506*1a3d31e3SAndroid Build Coastguard Worker
507*1a3d31e3SAndroid Build Coastguard Worker-w \emph{span}     & --stopwatch=\emph{span}    & Display traces for the \emph{span} specified -- where span can be: \\
508*1a3d31e3SAndroid Build Coastguard Worker                   &                            & \emph{end-time} -- Display traces from time 0 through \emph{end-time} (in ns) \\
509*1a3d31e3SAndroid Build Coastguard Worker		   &                            & or \\
510*1a3d31e3SAndroid Build Coastguard Worker		   &                            & \emph{start:end-time} -- Display traces from time \emph{start} \\
511*1a3d31e3SAndroid Build Coastguard Worker		   &                            & through {end-time} (in ns). \\ \hline
512*1a3d31e3SAndroid Build Coastguard Worker
513*1a3d31e3SAndroid Build Coastguard Worker-M                 & --no-msgs                  & Do not add messages to binary output file \\\hline
514*1a3d31e3SAndroid Build Coastguard Worker-v                 & --verbose                  & More verbose marginal on marginal errors \\ \hline
515*1a3d31e3SAndroid Build Coastguard Worker-V                 & --version                  & Display version \\ \hline
516*1a3d31e3SAndroid Build Coastguard Worker
517*1a3d31e3SAndroid Build Coastguard Worker\end{tabular}
518*1a3d31e3SAndroid Build Coastguard Worker
519*1a3d31e3SAndroid Build Coastguard Worker\newpage
520*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:blkparse-actions}Trace actions}
521*1a3d31e3SAndroid Build Coastguard Worker
522*1a3d31e3SAndroid Build Coastguard Worker\begin{description}
523*1a3d31e3SAndroid Build Coastguard Worker  \item[C -- complete] A previously issued request has been completed.
524*1a3d31e3SAndroid Build Coastguard Worker  The output will detail the sector and size of that request, as well
525*1a3d31e3SAndroid Build Coastguard Worker  as the success or failure of it.
526*1a3d31e3SAndroid Build Coastguard Worker
527*1a3d31e3SAndroid Build Coastguard Worker  \item[D -- issued] A request that previously resided on the block layer
528*1a3d31e3SAndroid Build Coastguard Worker  queue or in the io scheduler has been sent to the driver.
529*1a3d31e3SAndroid Build Coastguard Worker
530*1a3d31e3SAndroid Build Coastguard Worker  \item[I -- inserted] A request is being sent to the io scheduler for
531*1a3d31e3SAndroid Build Coastguard Worker  addition to the internal queue and later service by the driver. The
532*1a3d31e3SAndroid Build Coastguard Worker  request is fully formed at this time.
533*1a3d31e3SAndroid Build Coastguard Worker
534*1a3d31e3SAndroid Build Coastguard Worker  \item[Q -- queued] This notes intent to queue io at the given location.
535*1a3d31e3SAndroid Build Coastguard Worker  No real requests exists yet.
536*1a3d31e3SAndroid Build Coastguard Worker
537*1a3d31e3SAndroid Build Coastguard Worker  \item[B -- bounced] The data pages attached to this \emph{bio} are
538*1a3d31e3SAndroid Build Coastguard Worker  not reachable by the hardware and must be bounced to a lower memory
539*1a3d31e3SAndroid Build Coastguard Worker  location. This causes a big slowdown in io performance, since the data
540*1a3d31e3SAndroid Build Coastguard Worker  must be copied to/from kernel buffers. Usually this can be fixed with
541*1a3d31e3SAndroid Build Coastguard Worker  using better hardware - either a better io controller, or a platform
542*1a3d31e3SAndroid Build Coastguard Worker  with an IOMMU.
543*1a3d31e3SAndroid Build Coastguard Worker
544*1a3d31e3SAndroid Build Coastguard Worker  \item[m -- message] Text message generated via kernel call to
545*1a3d31e3SAndroid Build Coastguard Worker  \texttt{blk\_add\_trace\_msg}.
546*1a3d31e3SAndroid Build Coastguard Worker
547*1a3d31e3SAndroid Build Coastguard Worker  \item[M -- back merge] A previously inserted request exists that ends
548*1a3d31e3SAndroid Build Coastguard Worker  on the boundary of where this io begins, so the io scheduler can merge
549*1a3d31e3SAndroid Build Coastguard Worker  them together.
550*1a3d31e3SAndroid Build Coastguard Worker
551*1a3d31e3SAndroid Build Coastguard Worker  \item[F -- front merge] Same as the back merge, except this io ends
552*1a3d31e3SAndroid Build Coastguard Worker  where a previously inserted requests starts.
553*1a3d31e3SAndroid Build Coastguard Worker
554*1a3d31e3SAndroid Build Coastguard Worker  \item[G -- get request] To send any type of request to a block device,
555*1a3d31e3SAndroid Build Coastguard Worker  a \emph{struct request} container must be allocated first.
556*1a3d31e3SAndroid Build Coastguard Worker
557*1a3d31e3SAndroid Build Coastguard Worker  \item[S -- sleep] No available request structures were available, so
558*1a3d31e3SAndroid Build Coastguard Worker  the issuer has to wait for one to be freed.
559*1a3d31e3SAndroid Build Coastguard Worker
560*1a3d31e3SAndroid Build Coastguard Worker  \item[P -- plug] When io is queued to a previously empty block device
561*1a3d31e3SAndroid Build Coastguard Worker  queue, Linux will plug the queue in anticipation of future ios being
562*1a3d31e3SAndroid Build Coastguard Worker  added before this data is needed.
563*1a3d31e3SAndroid Build Coastguard Worker
564*1a3d31e3SAndroid Build Coastguard Worker  \item[U -- unplug] Some request data already queued in the device,
565*1a3d31e3SAndroid Build Coastguard Worker  start sending requests to the driver. This may happen automatically
566*1a3d31e3SAndroid Build Coastguard Worker  if a timeout period has passed (see next entry) or if a number of
567*1a3d31e3SAndroid Build Coastguard Worker  requests have been added to the queue.
568*1a3d31e3SAndroid Build Coastguard Worker
569*1a3d31e3SAndroid Build Coastguard Worker  \item[T -- unplug due to timer] If nobody requests the io that was queued
570*1a3d31e3SAndroid Build Coastguard Worker  after plugging the queue, Linux will automatically unplug it after a
571*1a3d31e3SAndroid Build Coastguard Worker  defined period has passed.
572*1a3d31e3SAndroid Build Coastguard Worker
573*1a3d31e3SAndroid Build Coastguard Worker  \item[X -- split] On raid or device mapper setups, an incoming io may
574*1a3d31e3SAndroid Build Coastguard Worker  straddle a device or internal zone and needs to be chopped up into
575*1a3d31e3SAndroid Build Coastguard Worker  smaller pieces for service. This may indicate a performance problem due
576*1a3d31e3SAndroid Build Coastguard Worker  to a bad setup of that raid/dm device, but may also just be part of
577*1a3d31e3SAndroid Build Coastguard Worker  normal boundary conditions. dm is notably bad at this and will clone
578*1a3d31e3SAndroid Build Coastguard Worker  lots of io.
579*1a3d31e3SAndroid Build Coastguard Worker
580*1a3d31e3SAndroid Build Coastguard Worker  \item[A -- remap] For stacked devices, incoming io is remapped to device
581*1a3d31e3SAndroid Build Coastguard Worker  below it in the io stack. The remap action details what exactly is
582*1a3d31e3SAndroid Build Coastguard Worker  being remapped to what.
583*1a3d31e3SAndroid Build Coastguard Worker
584*1a3d31e3SAndroid Build Coastguard Worker\end{description}
585*1a3d31e3SAndroid Build Coastguard Worker
586*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:blkparse-format}Output Description and Formatting}
587*1a3d31e3SAndroid Build Coastguard Worker
588*1a3d31e3SAndroid Build Coastguard WorkerThe output from blkparse can be tailored for specific use - in particular,
589*1a3d31e3SAndroid Build Coastguard Workerto ease parsing of output, and/or limit output fields to those the user
590*1a3d31e3SAndroid Build Coastguard Workerwants to see. The data for fields which can be output include:
591*1a3d31e3SAndroid Build Coastguard Worker
592*1a3d31e3SAndroid Build Coastguard Worker\smallskip
593*1a3d31e3SAndroid Build Coastguard Worker\begin{tabular}{|l|l|}\hline
594*1a3d31e3SAndroid Build Coastguard WorkerField    & Description \\
595*1a3d31e3SAndroid Build Coastguard WorkerSpecifier & \\ \hline\hline
596*1a3d31e3SAndroid Build Coastguard Worker\emph{a} & Action, a (small) string (1 or 2 characters) -- see table below for more details \\ \hline
597*1a3d31e3SAndroid Build Coastguard Worker\emph{c} & CPU id \\ \hline
598*1a3d31e3SAndroid Build Coastguard Worker\emph{C} & Command \\ \hline
599*1a3d31e3SAndroid Build Coastguard Worker\emph{d} & RWBS field, a (small) string (1-3 characters)  -- see section below for more details \\ \hline
600*1a3d31e3SAndroid Build Coastguard Worker\emph{D} & 7-character string containing the major and minor numbers of
601*1a3d31e3SAndroid Build Coastguard Workerthe event's device \\
602*1a3d31e3SAndroid Build Coastguard Worker         & (separated by a comma). \\ \hline
603*1a3d31e3SAndroid Build Coastguard Worker\emph{e} & Error value \\ \hline
604*1a3d31e3SAndroid Build Coastguard Worker\emph{m} & Minor number of event's device. \\ \hline
605*1a3d31e3SAndroid Build Coastguard Worker\emph{M} & Major number of event's device. \\ \hline
606*1a3d31e3SAndroid Build Coastguard Worker\emph{n} & Number of blocks \\ \hline
607*1a3d31e3SAndroid Build Coastguard Worker\emph{N} & Number of bytes \\ \hline
608*1a3d31e3SAndroid Build Coastguard Worker\emph{p} & Process ID \\ \hline
609*1a3d31e3SAndroid Build Coastguard Worker\emph{P} & Display packet data -- series of hexadecimal values\\ \hline
610*1a3d31e3SAndroid Build Coastguard Worker\emph{s} & Sequence numbers \\ \hline
611*1a3d31e3SAndroid Build Coastguard Worker\emph{S} & Sector number \\ \hline
612*1a3d31e3SAndroid Build Coastguard Worker\emph{t} & Time stamp (nanoseconds) \\ \hline
613*1a3d31e3SAndroid Build Coastguard Worker\emph{T} & Time stamp (seconds) \\ \hline
614*1a3d31e3SAndroid Build Coastguard Worker\emph{u} & Elapsed value in microseconds (\emph{-t} command line option) \\ \hline
615*1a3d31e3SAndroid Build Coastguard Worker\emph{U} & Payload unsigned integer \\ \hline
616*1a3d31e3SAndroid Build Coastguard Worker\end{tabular}
617*1a3d31e3SAndroid Build Coastguard Worker
618*1a3d31e3SAndroid Build Coastguard WorkerNote that the user can optionally specify field display width, and
619*1a3d31e3SAndroid Build Coastguard Workeroptionally a left-aligned specifier. These precede field specifiers,
620*1a3d31e3SAndroid Build Coastguard Workerwith a '\%' character, followed by the optional left-alignment specifer
621*1a3d31e3SAndroid Build Coastguard Worker(-) followed by the width (a decimal number) and then the field.
622*1a3d31e3SAndroid Build Coastguard Worker
623*1a3d31e3SAndroid Build Coastguard WorkerThus, to specify the command in a 12-character field that is left aligned:
624*1a3d31e3SAndroid Build Coastguard Worker
625*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
626*1a3d31e3SAndroid Build Coastguard Worker-f "%-12C"
627*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
628*1a3d31e3SAndroid Build Coastguard Worker
629*1a3d31e3SAndroid Build Coastguard Worker\newpage
630*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\label{sec:act-table}Action Table}
631*1a3d31e3SAndroid Build Coastguard WorkerThe following table shows the various actions which may be output.
632*1a3d31e3SAndroid Build Coastguard Worker
633*1a3d31e3SAndroid Build Coastguard Worker\begin{tabular}{|l|l|}\hline
634*1a3d31e3SAndroid Build Coastguard WorkerAct & Description \\ \hline\hline
635*1a3d31e3SAndroid Build Coastguard WorkerA & IO was remapped to a different device \\ \hline
636*1a3d31e3SAndroid Build Coastguard WorkerB & IO bounced \\ \hline
637*1a3d31e3SAndroid Build Coastguard WorkerC & IO completion \\ \hline
638*1a3d31e3SAndroid Build Coastguard WorkerD & IO issued to driver \\ \hline
639*1a3d31e3SAndroid Build Coastguard WorkerF & IO front merged with request on queue \\ \hline
640*1a3d31e3SAndroid Build Coastguard WorkerG & Get request \\ \hline
641*1a3d31e3SAndroid Build Coastguard WorkerI & IO inserted onto request queue \\ \hline
642*1a3d31e3SAndroid Build Coastguard WorkerM & IO back merged with request on queue \\ \hline
643*1a3d31e3SAndroid Build Coastguard WorkerP & Plug request \\ \hline
644*1a3d31e3SAndroid Build Coastguard WorkerQ & IO handled by request queue code \\ \hline
645*1a3d31e3SAndroid Build Coastguard WorkerS & Sleep request \\ \hline
646*1a3d31e3SAndroid Build Coastguard WorkerT & Unplug due to timeout \\ \hline
647*1a3d31e3SAndroid Build Coastguard WorkerU & Unplug request \\ \hline
648*1a3d31e3SAndroid Build Coastguard WorkerX & Split \\ \hline
649*1a3d31e3SAndroid Build Coastguard Worker\end{tabular}
650*1a3d31e3SAndroid Build Coastguard Worker
651*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\label{sec:act-table}RWBS Description}
652*1a3d31e3SAndroid Build Coastguard WorkerThis is a small string containing at least one character ('R' for read,
653*1a3d31e3SAndroid Build Coastguard Worker'W' for write, or 'D' for block discard operation), and optionally either
654*1a3d31e3SAndroid Build Coastguard Workera 'B' (for barrier operations) or 'S' (for synchronous operations).
655*1a3d31e3SAndroid Build Coastguard Worker
656*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\label{sec:default-output}Default output}
657*1a3d31e3SAndroid Build Coastguard Worker
658*1a3d31e3SAndroid Build Coastguard WorkerThe standard \emph{header} (or initial fields displayed) include:
659*1a3d31e3SAndroid Build Coastguard Worker
660*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
661*1a3d31e3SAndroid Build Coastguard Worker"%D %2c %8s %5T.%9t %5p %2a %3d "
662*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
663*1a3d31e3SAndroid Build Coastguard Worker
664*1a3d31e3SAndroid Build Coastguard WorkerBreaking this down:
665*1a3d31e3SAndroid Build Coastguard Worker
666*1a3d31e3SAndroid Build Coastguard Worker\begin{description}
667*1a3d31e3SAndroid Build Coastguard Worker  \item[\%D] Displays the event's device major/minor as: \%3d,\%-3d.
668*1a3d31e3SAndroid Build Coastguard Worker  \item[\%2c] CPU ID (2-character field).
669*1a3d31e3SAndroid Build Coastguard Worker  \item[\%8s] Sequence number
670*1a3d31e3SAndroid Build Coastguard Worker  \item[\%5T.\%9t] 5-charcter field for the seconds portion of the
671*1a3d31e3SAndroid Build Coastguard Worker  time stamp and a 9-character field for the nanoseconds in the time stamp.
672*1a3d31e3SAndroid Build Coastguard Worker  \item[\%5p] 5-character field for the process ID.
673*1a3d31e3SAndroid Build Coastguard Worker  \item[\%2a] 2-character field for one of the actions.
674*1a3d31e3SAndroid Build Coastguard Worker  \item[\%3d] 3-character field for the RWBS data.
675*1a3d31e3SAndroid Build Coastguard Worker\end{description}
676*1a3d31e3SAndroid Build Coastguard Worker
677*1a3d31e3SAndroid Build Coastguard WorkerSeeing this in action:
678*1a3d31e3SAndroid Build Coastguard Worker
679*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
680*1a3d31e3SAndroid Build Coastguard Worker  8,0    3        1     0.000000000   697  G   W 223490 + 8 [kjournald]
681*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
682*1a3d31e3SAndroid Build Coastguard Worker
683*1a3d31e3SAndroid Build Coastguard WorkerThe header is the data in this line up to the 223490 (starting block).
684*1a3d31e3SAndroid Build Coastguard Worker
685*1a3d31e3SAndroid Build Coastguard WorkerThe default output for all event types includes this header.
686*1a3d31e3SAndroid Build Coastguard Worker
687*1a3d31e3SAndroid Build Coastguard Worker\paragraph{Default output per action}
688*1a3d31e3SAndroid Build Coastguard Worker
689*1a3d31e3SAndroid Build Coastguard Worker\begin{description}
690*1a3d31e3SAndroid Build Coastguard Worker  \item[C -- complete] If a payload is present, this is presented between
691*1a3d31e3SAndroid Build Coastguard Worker  parenthesis following the header, followed by the error value.
692*1a3d31e3SAndroid Build Coastguard Worker
693*1a3d31e3SAndroid Build Coastguard Worker  If no payload is present, the sector and number of blocks are presented
694*1a3d31e3SAndroid Build Coastguard Worker  (with an intervening plus (+) character). If the \emph{-t} option
695*1a3d31e3SAndroid Build Coastguard Worker  was specified, then the elapsed time is presented. In either case,
696*1a3d31e3SAndroid Build Coastguard Worker  it is followed by the error value for the completion.
697*1a3d31e3SAndroid Build Coastguard Worker
698*1a3d31e3SAndroid Build Coastguard Worker  \item[D -- issued]
699*1a3d31e3SAndroid Build Coastguard Worker  \item[I -- inserted]
700*1a3d31e3SAndroid Build Coastguard Worker  \item[Q -- queued]
701*1a3d31e3SAndroid Build Coastguard Worker  \item[B -- bounced] If a payload is present, the number of payload bytes
702*1a3d31e3SAndroid Build Coastguard Worker  is output, followed by the payload in hexadecimal between parenthesis.
703*1a3d31e3SAndroid Build Coastguard Worker
704*1a3d31e3SAndroid Build Coastguard Worker  If no payload is present, the sector and number of blocks are presented
705*1a3d31e3SAndroid Build Coastguard Worker  (with an intervening plus (+) character). If the \emph{-t} option was
706*1a3d31e3SAndroid Build Coastguard Worker  specified, then the elapsed time is presented (in parenthesis). In
707*1a3d31e3SAndroid Build Coastguard Worker  either case, it is followed by the command associated with the event
708*1a3d31e3SAndroid Build Coastguard Worker  (surrounded by square brackets).
709*1a3d31e3SAndroid Build Coastguard Worker
710*1a3d31e3SAndroid Build Coastguard Worker  \item[M -- back merge]
711*1a3d31e3SAndroid Build Coastguard Worker  \item[F -- front merge]
712*1a3d31e3SAndroid Build Coastguard Worker  \item[G -- get request]
713*1a3d31e3SAndroid Build Coastguard Worker  \item[S -- sleep] The starting sector and number of blocks is output
714*1a3d31e3SAndroid Build Coastguard Worker  (with an intervening plus (+) character), followed by the command
715*1a3d31e3SAndroid Build Coastguard Worker  associated with the event (surrounded by square brackets).
716*1a3d31e3SAndroid Build Coastguard Worker
717*1a3d31e3SAndroid Build Coastguard Worker  \item[P -- plug] The command associated with the event (surrounded by
718*1a3d31e3SAndroid Build Coastguard Worker  square brackets) is output.
719*1a3d31e3SAndroid Build Coastguard Worker
720*1a3d31e3SAndroid Build Coastguard Worker  \item[U -- unplug]
721*1a3d31e3SAndroid Build Coastguard Worker  \item[T -- unplug due to timer] The command associated with the event
722*1a3d31e3SAndroid Build Coastguard Worker  (surrounded by square brackets) is output, followed by the number of
723*1a3d31e3SAndroid Build Coastguard Worker  requests outstanding.
724*1a3d31e3SAndroid Build Coastguard Worker
725*1a3d31e3SAndroid Build Coastguard Worker  \item[X -- split] The original starting sector followed by the new
726*1a3d31e3SAndroid Build Coastguard Worker  sector (separated by a slash (/) is output, followed by the command
727*1a3d31e3SAndroid Build Coastguard Worker  associated with the event (surrounded by square brackets).
728*1a3d31e3SAndroid Build Coastguard Worker
729*1a3d31e3SAndroid Build Coastguard Worker  \item[A -- remap] Sector and length is output, along with the original
730*1a3d31e3SAndroid Build Coastguard Worker  device and sector offset.
731*1a3d31e3SAndroid Build Coastguard Worker
732*1a3d31e3SAndroid Build Coastguard Worker  \item[m -- message] The supplied message is appended to the end of
733*1a3d31e3SAndroid Build Coastguard Worker  the standard header.
734*1a3d31e3SAndroid Build Coastguard Worker
735*1a3d31e3SAndroid Build Coastguard Worker\end{description}
736*1a3d31e3SAndroid Build Coastguard Worker
737*1a3d31e3SAndroid Build Coastguard Worker%------------------------------
738*1a3d31e3SAndroid Build Coastguard Worker\newpage
739*1a3d31e3SAndroid Build Coastguard Worker\newpage\section*{\label{sec:blktrace-kg}Appendix: blktrace Kernel Guide}
740*1a3d31e3SAndroid Build Coastguard Worker
741*1a3d31e3SAndroid Build Coastguard WorkerThe blktrace facility provides an efficient event transfer mechanism which
742*1a3d31e3SAndroid Build Coastguard Workersupplies block IO layer state transition data via the relay
743*1a3d31e3SAndroid Build Coastguard Workerfilesystem. This section provides some details as to the interfaces
744*1a3d31e3SAndroid Build Coastguard Workerblktrace utilizes in the kernel to effect this. It is good background data
745*1a3d31e3SAndroid Build Coastguard Workerto help understand some of the outputs and command-line options above.
746*1a3d31e3SAndroid Build Coastguard Worker
747*1a3d31e3SAndroid Build Coastguard Worker\subsection{blktrace.h Definitions}
748*1a3d31e3SAndroid Build Coastguard WorkerFiles which include $<linux/blktrace.h>$ are supplied with the following
749*1a3d31e3SAndroid Build Coastguard Workerdefinitions:
750*1a3d31e3SAndroid Build Coastguard Worker
751*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{Trace Action Specifiers}
752*1a3d31e3SAndroid Build Coastguard Worker\begin{tabular}{|l|l|}\hline
753*1a3d31e3SAndroid Build Coastguard Worker  BLK\_TA\_QUEUE & (RQ) Command queued to request\_queue. \\
754*1a3d31e3SAndroid Build Coastguard Worker                 & (BIO) Command queued by elevator. \\ \hline
755*1a3d31e3SAndroid Build Coastguard Worker  BLK\_TA\_BACKMERGE & Back merging elevator operation \\ \hline
756*1a3d31e3SAndroid Build Coastguard Worker  BLK\_TA\_FRONTMERGE & Front merging elevator operation \\ \hline
757*1a3d31e3SAndroid Build Coastguard Worker  BLK\_TA\_GETRQ & Free request retrieved. \\ \hline
758*1a3d31e3SAndroid Build Coastguard Worker  BLK\_TA\_SLEEPRQ & No requests available, device unplugged. \\ \hline
759*1a3d31e3SAndroid Build Coastguard Worker  BLK\_TA\_REQUEUE & Request requeued. \\ \hline
760*1a3d31e3SAndroid Build Coastguard Worker  BLK\_TA\_ISSUE & Command set to driver for request\_queue. \\ \hline
761*1a3d31e3SAndroid Build Coastguard Worker  BLK\_TA\_COMPLETE & Command completed by driver. \\ \hline
762*1a3d31e3SAndroid Build Coastguard Worker  BLK\_TA\_PLUG & Device is plugged \\ \hline
763*1a3d31e3SAndroid Build Coastguard Worker  BLK\_TA\_UNPLUG\_IO & Unplug device as IO is made available. \\ \hline
764*1a3d31e3SAndroid Build Coastguard Worker  BLK\_TA\_UNPLUG\_TIMER & Unplug device after timer expired. \\ \hline
765*1a3d31e3SAndroid Build Coastguard Worker  BLK\_TA\_INSERT & Insert request into queue. \\ \hline
766*1a3d31e3SAndroid Build Coastguard Worker  BLK\_TA\_SPLIT & BIO split into 2 or more requests. \\ \hline
767*1a3d31e3SAndroid Build Coastguard Worker  BLK\_TA\_BOUNCE & BIO was bounced \\ \hline
768*1a3d31e3SAndroid Build Coastguard Worker  BLK\_TA\_REMAP & BIO was remapped \\ \hline
769*1a3d31e3SAndroid Build Coastguard Worker\end{tabular}
770*1a3d31e3SAndroid Build Coastguard Worker
771*1a3d31e3SAndroid Build Coastguard Worker%..........................................
772*1a3d31e3SAndroid Build Coastguard Worker\subsection{blktrace.h Routines}
773*1a3d31e3SAndroid Build Coastguard WorkerFiles which include $<linux/blktrace.h>$ are supplied with the following
774*1a3d31e3SAndroid Build Coastguard Workerkernel routine invocable interfaces:
775*1a3d31e3SAndroid Build Coastguard Worker
776*1a3d31e3SAndroid Build Coastguard Worker\begin{description}
777*1a3d31e3SAndroid Build Coastguard Worker  \item[blk\_add\_trace\_rq(struct request\_queue *q, struct request\_queue
778*1a3d31e3SAndroid Build Coastguard Worker  								*rq, u32 what)]
779*1a3d31e3SAndroid Build Coastguard Worker	Adds a trace event describing the state change of the passed in
780*1a3d31e3SAndroid Build Coastguard Worker	request\_queue. The \emph{what} parameter describes the change in
781*1a3d31e3SAndroid Build Coastguard Worker	the request\_queue state, and is one of the request queue action
782*1a3d31e3SAndroid Build Coastguard Worker	specifiers -- BLK\_TA\_QUEUE, BLK\_TA\_REQUEUE, BLK\_TA\_ISSUE,
783*1a3d31e3SAndroid Build Coastguard Worker	or BLK\_TA\_COMPLETE.
784*1a3d31e3SAndroid Build Coastguard Worker
785*1a3d31e3SAndroid Build Coastguard Worker  \item[blk\_add\_trace\_bio(struct request\_queue *q, struct bio *bio,
786*1a3d31e3SAndroid Build Coastguard Worker  								u32 what)]
787*1a3d31e3SAndroid Build Coastguard Worker	Adds a trace event for the BIO passed in. The \emph{what} parameter
788*1a3d31e3SAndroid Build Coastguard Worker	describes the action being performed on the BIO, and is one of
789*1a3d31e3SAndroid Build Coastguard Worker	BLK\_TA\_BACKMERGE, BLK\_TA\_FRONTMERGE, or BLK\_TA\_QUEUE.
790*1a3d31e3SAndroid Build Coastguard Worker
791*1a3d31e3SAndroid Build Coastguard Worker  \item[blk\_add\_trace\_generic(struct request\_queue *q, struct bio *bio,
792*1a3d31e3SAndroid Build Coastguard Worker							int rw, u32 what)]
793*1a3d31e3SAndroid Build Coastguard Worker	Adds a \emph{generic} trace event -- not one of the request queue
794*1a3d31e3SAndroid Build Coastguard Worker	or BIO traces. The \emph{what} parameter describes the action being
795*1a3d31e3SAndroid Build Coastguard Worker	performed on the BIO (if bio is non-NULL), and is one of
796*1a3d31e3SAndroid Build Coastguard Worker	BLK\_TA\_PLUG, BLK\_TA\_GETRQ or BLK\_TA\_SLEEPRQ.
797*1a3d31e3SAndroid Build Coastguard Worker
798*1a3d31e3SAndroid Build Coastguard Worker  \item[blk\_add\_trace\_pdu\_int(struct request\_queue *q, u32 what,
799*1a3d31e3SAndroid Build Coastguard Worker  								u32 pdu)]
800*1a3d31e3SAndroid Build Coastguard Worker	Adds a trace with some payload data -- in this case, an unsigned
801*1a3d31e3SAndroid Build Coastguard Worker	32-bit entity (the \emph{pdu} parameter). The \emph{what} parameter
802*1a3d31e3SAndroid Build Coastguard Worker	describes the nature of the payload, and is one of
803*1a3d31e3SAndroid Build Coastguard Worker	BLK\_TA\_UNPLUG\_IO or BLK\_TA\_UNPLUG\_TIMER.
804*1a3d31e3SAndroid Build Coastguard Worker
805*1a3d31e3SAndroid Build Coastguard Worker  \item[blk\_add\_trace\_remap(struct request\_queue *q, struct bio  *bio,
806*1a3d31e3SAndroid Build Coastguard Worker						dev\_t dev, sector\_t sector)]
807*1a3d31e3SAndroid Build Coastguard Worker	Adds a trace with a remap event. \emph{dev} and \emph{sector} denote
808*1a3d31e3SAndroid Build Coastguard Worker	the original device this \emph{bio} was mapped from.
809*1a3d31e3SAndroid Build Coastguard Worker
810*1a3d31e3SAndroid Build Coastguard Worker  \item[blk\_add\_trace\_msg(struct request\_queue *q, char *fmt, ...)]
811*1a3d31e3SAndroid Build Coastguard Worker	Adds a formatted message to the output stream. The total message
812*1a3d31e3SAndroid Build Coastguard Worker	size can not exceed BLK\_TN\_MSG\_MSG characters (currently
813*1a3d31e3SAndroid Build Coastguard Worker	1024). Standard format conversions are supported (as supplied
814*1a3d31e3SAndroid Build Coastguard Worker	by \texttt{vscnprintf}.
815*1a3d31e3SAndroid Build Coastguard Worker
816*1a3d31e3SAndroid Build Coastguard Worker\end{description}
817*1a3d31e3SAndroid Build Coastguard Worker\end{document}
818