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