\documentclass{article}

%
% Copyright (C) 2005, 2006 Alan D. Brunelle <Alan.Brunelle@hp.com>
%
%  This program is free software; you can redistribute it and/or modify
%  it under the terms of the GNU General Public License as published by
%  the Free Software Foundation; either version 2 of the License, or
%  (at your option) any later version.
%
%  This program is distributed in the hope that it will be useful,
%  but WITHOUT ANY WARRANTY; without even the implied warranty of
%  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
%  GNU General Public License for more details.
%
%  You should have received a copy of the GNU General Public License
%  along with this program; if not, write to the Free Software
%  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
%

\title{blktrace User Guide}
\author{blktrace: Jens Axboe (jens.axboe@oracle.com)\\
        User Guide: Alan D. Brunelle (Alan.Brunelle@hp.com)}
\date{27 May 2008}

\begin{document}
\maketitle
%---------------------
\section{\label{sec:intro}Introduction}

blktrace is a block layer IO tracing mechanism which provides detailed
information about request queue operations up to user space. There are
three major components that are provided:

\begin{description}
  \item[Kernel patch] A patch to the Linux kernel which includes the
  kernel event logging interfaces, and patches to areas within the block
  layer to emit event traces. If you run a 2.6.17-rc1 or newer kernel,
  you don't need to patch blktrace support as it is already included.

  \item[blktrace] A utility which transfers event traces from the kernel
  into either long-term on-disk storage, or provides direct formatted
  output (via blkparse).

  \item[blkparse] A utility which formats events stored in files, or when
  run in \emph{live} mode directly outputs data collected by blktrace.
\end{description}

\subsection{blktrace Download Area}

The blktrace and blkparse utilities and associated kernel patch are provided
as part of the following git repository:

git://git.kernel.org/pub/scm/linux/kernel/git/axboe/blktrace.git bt

%--------------------------
\newpage\section{\label{sec:quick-start}Quick Start Guide}

The following sections outline some quick steps towards utilizing
blktrace. Some of the specific instructions below may need to be tailored
to your environment.

\subsection{\label{sec:get-blktrace}Retrieving blktrace}

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

\begin{verbatim}
% git clone git://git.kernel.org/pub/scm/linux/kernel/git/axboe/blktrace.git bt
% cd bt
% git checkout
\end{verbatim}

\subsection{\label{sec:patching}Patching and configuring the Linux kernel}

A patch for a \emph{specific Linux kernel} is provided in bt/kernel (where
\emph{bt} is the name of the directory from the above git sequence). The
detailed actual patching instructions for a Linux kernel is outside the
scope of this document, but the following may be used as a sample template.
Note that you may skip this step, if you kernel is at least 2.6.17-rc1.

As an example, bt/kernel contains blk-trace-2.6.14-rc1-git-G2, download
linux-2.6.13.tar.bz2 and patch-2.6.14-rc1.bz2

\begin{verbatim}
% tar xjf linux-2.6.13.tar.bz2 
% mv linux-2.6.13 linux-2.6.14-rc1
% cd linux-2.6.14-rc1
% bunzip2 -c ../patch-2.6.14-rc1.bz2 | patch -p1
\end{verbatim}

At this point you may (optionally) remove linux-2.6.13.tar.bz2 and
patch-2.6.14-rc1.bz2.

At this point you should configure the Linux kernel for your specific
system -- again, outside the scope of this document -- and then enable
\emph{Support for tracing block io actions.} To do this, run

\begin{verbatim}
% make menuconfig                    or make xconfig, or edit .config, or ...
\end{verbatim}

and navigate through \emph{Device Drivers} and \emph{Block devices}
and then down to \emph{Support for tracing block io actions} and hit Y.

Install the new kernel (and modules\ldots) and reboot. 

\subsection{\label{sec:mount}Mounting the debugfs file system}

blktrace utilizes files under the debug file system, and thus must have
the mount point set up -- mounted on the directory /sys/kernel/debug.
To do this one may do either of the following:

\begin{enumerate}
  \item Manually mount after each boot:
\begin{verbatim}
% mount -t debugfs debugfs /sys/kernel/debug
\end{verbatim}

  \item Add an entry into /etc/fstab, and have it done automatically at
  each boot\footnote{Note: after adding the entry to /etc/fstab, you
  could then mount the directory this time only by doing: \% mount debug}:
\begin{verbatim}
debug /sys/kernel/debug debugfs default 0 0
\end{verbatim}
\end{enumerate}

\subsection{\label{sec:build}Build the tools}

To build and install the tools, execute the following sequence (as root):

\begin{verbatim}
% cd bt
% make && make install
\end{verbatim}

\subsection{\label{sec:live-blktrace}blktrace -- live}

Now to simply watch what is going on for a specific disk (to stop the
trace, hit control-C):

\begin{verbatim}
% blktrace -d /dev/sda -o - | blkparse -i -
  8,0    3        1     0.000000000   697  G   W 223490 + 8 [kjournald]
  8,0    3        2     0.000001829   697  P   R [kjournald]
  8,0    3        3     0.000002197   697  Q   W 223490 + 8 [kjournald]
  8,0    3        4     0.000005533   697  M   W 223498 + 8 [kjournald]
  8,0    3        5     0.000008607   697  M   W 223506 + 8 [kjournald]
  8,0    3        6     0.000011569   697  M   W 223514 + 8 [kjournald]
  8,0    3        7     0.000014407   697  M   W 223522 + 8 [kjournald]
  8,0    3        8     0.000017367   697  M   W 223530 + 8 [kjournald]
  8,0    3        9     0.000020161   697  M   W 223538 + 8 [kjournald]
  8,0    3       10     0.000024062   697  D   W 223490 + 56 [kjournald]
  8,0    1       11     0.009507758     0  C   W 223490 + 56 [0]
  8,0    1       12     0.009538995   697  G   W 223546 + 8 [kjournald]
  8,0    1       13     0.009540033   697  P   R [kjournald]
  8,0    1       14     0.009540313   697  Q   W 223546 + 8 [kjournald]
  8,0    1       15     0.009542980   697  D   W 223546 + 8 [kjournald]
  8,0    1       16     0.013542170     0  C   W 223546 + 8 [0]
...
^C
...
CPU1 (8,0):
 Reads Queued:           0,        0KiB  Writes Queued:           7,      128KiB
 Read Dispatches:        0,        0KiB  Write Dispatches:        7,      128KiB
 Reads Completed:        0,        0KiB  Writes Completed:       11,      168KiB
 Read Merges:            0               Write Merges:           25
 IO unplugs:             0               Timer unplugs:           0
...
CPU3 (8,0):
 Reads Queued:           0,        0KiB  Writes Queued:           1,       28KiB
 Read Dispatches:        0,        0KiB  Write Dispatches:        1,       28KiB
 Reads Completed:        0,        0KiB  Writes Completed:        0,        0KiB
 Read Merges:            0               Write Merges:            6
 IO unplugs:             0               Timer unplugs:           0

Total (8,0):
 Reads Queued:           0,        0KiB  Writes Queued:          11,      168KiB
 Read Dispatches:        0,        0KiB  Write Dispatches:       11,      168KiB
 Reads Completed:        0,        0KiB  Writes Completed:       11,      168KiB
 Read Merges:            0               Write Merges:           31
 IO unplugs:             0               Timer unplugs:           3

Events (8,0): 89 entries, 0 skips
\end{verbatim}

A \emph{btrace} script is included in the distribution to ease live
tracing of devices. The above could also be accomplished by issuing:

\begin{verbatim}
% btrace /dev/sda
\end{verbatim}

By default, \emph{btrace} runs the trace in quiet mode so it will not
include statistics when you break the run. Add the \emph{-S} option to
get that dumped as well.

\subsection{\label{sec:pc-blktrace}blktrace -- SCSI commands}

The previous section showed typical file system io actions, but blktrace
can also show SCSI commands going in and out of the queue as submitted
by applications using the SCSI Generic (\emph{sg}) interface.

\begin{verbatim}
% btrace /dev/cdrom
[...]
  3,0    0       25     0.004884107 13528  G   R 0 + 0 [inquiry]
  3,0    0       26     0.004890361 13528  I   R 56 (12 00 00 00 38 ..) [inquiry]
  3,0    0       27     0.004891223 13528  P   R [inquiry]
  3,0    0       28     0.004893250 13528  D   R 56 (12 00 00 00 38 ..) [inquiry]
  3,0    0       29     0.005344910     0  C   R (12 00 00 00 38 ..) [0]
\end{verbatim}

Here we see a program issuing an INQUIRY command to the CDROM device.
The program requested a read of 56 bytes of data, the CDB is included
in parenthesis after the data length. The completion event shows shows
that the command completed successfully. Tracing SCSI commands can be
very useful for debugging problems with programs talking directly to the
device. An example of that would be \emph{cdrecord} burning.

\subsection{\label{sec:blktrace-post}blktrace -- post-processing}

Another way to run blktrace is to have blktrace save data away for later
formatting by blkparse. This would be useful if you want to get 
measurements while running specific loads.

To do this, one would specify the device (or devices) to be watched. Then 
go run you test cases. Stop the trace, and at your leisure utilize
blkparse to see the results.

In this example, devices /dev/sdaa, /dev/sdc and /dev/sdo are used in an 
LVM volume called adb3/vol.

\begin{verbatim}
% blktrace /dev/sdaa /dev/sdc /dev/sdo &
[1] 9713
%
% mkfs -t ext3 /dev/adb3/vol
mke2fs 1.35 (28-Feb-2004)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
16793600 inodes, 33555456 blocks
1677772 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
1025 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872

Writing inode tables: done                            
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 27 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
%
% kill -15 9713
\end{verbatim}

Then you could process the events later:

\begin{verbatim}
%
% blkparse sdaa sdc sdo > events
% less events
  8,32   1        1     0.000000000  9728  G   R 384 + 32 [mkfs.ext3]
  8,32   1        2     0.000001959  9728  P   R [mkfs.ext3]
  8,32   1        3     0.000002446  9728  Q   R 384 + 32 [mkfs.ext3]
  8,32   1        4     0.000005110  9728  D   R 384 + 32 [mkfs.ext3]
  8,32   3        5     0.000200570     0  C   R 384 + 32 [0]
  8,224  3        1     0.021658989  9728  G   R 384 + 32 [mkfs.ext3]
...
 65,160  3   163392    41.117070504     0  C   W 87469088 + 1376 [0]
  8,32   3   163374    41.122683668     0  C   W 88168160 + 1376 [0]
 65,160  3   163393    41.129952433     0  C   W 87905984 + 1376 [0]
 65,160  3   163394    41.130049431     0  D   W 89129344 + 1376 [swapper]
 65,160  3   163395    41.130067135     0  D   W 89216704 + 1376 [swapper]
 65,160  3   163396    41.130083785     0  D   W 89304096 + 1376 [swapper]
 65,160  3   163397    41.130099455     0  D   W 89391488 + 1376 [swapper]
 65,160  3   163398    41.130114732     0  D   W 89478848 + 1376 [swapper]
 65,160  3   163399    41.130128885     0  D   W 89481536 + 64 [swapper]
  8,32   3   163375    41.134758196     0  C   W 86333152 + 1376 [0]
 65,160  3   163400    41.142229726     0  C   W 89129344 + 1376 [0]
 65,160  3   163401    41.144952314     0  C   W 89481536 + 64 [0]
  8,32   3   163376    41.147441930     0  C   W 88342912 + 1376 [0]
 65,160  3   163402    41.155869604     0  C   W 89478848 + 1376 [0]
  8,32   3   163377    41.159466082     0  C   W 86245760 + 1376 [0]
 65,160  3   163403    41.166944976     0  C   W 89216704 + 1376 [0]
 65,160  3   163404    41.178968252     0  C   W 89304096 + 1376 [0]
 65,160  3   163405    41.191860173     0  C   W 89391488 + 1376 [0]
...
Events (sdo): 0 entries, 0 skips

CPU0 (65,160):
 Reads Queued:           0,        0KiB  Writes Queued:           9,    5,520KiB
 Read Dispatches:        0,        0KiB  Write Dispatches:        0,        0KiB
 Reads Completed:        0,        0KiB  Writes Completed:        0,        0KiB
 Read Merges:            0               Write Merges:          336
 IO unplugs:             0               Timer unplugs:           0
CPU1 (65,160):
 Reads Queued:       2,411,   38,576KiB  Writes Queued:         769,  425,408KiB
 Read Dispatches:    2,407,   38,512KiB  Write Dispatches:      118,   61,680KiB
 Reads Completed:        0,        0KiB  Writes Completed:        0,        0KiB
 Read Merges:            0               Write Merges:       25,819
 IO unplugs:             0               Timer unplugs:           4
CPU2 (65,160):
 Reads Queued:           2,       32KiB  Writes Queued:          18,   10,528KiB
 Read Dispatches:        2,       32KiB  Write Dispatches:        3,    1,344KiB
 Reads Completed:        0,        0KiB  Writes Completed:        0,        0KiB
 Read Merges:            0               Write Merges:          640
 IO unplugs:             0               Timer unplugs:           0
CPU3 (65,160):
 Reads Queued:      20,572,  329,152KiB  Writes Queued:         594,  279,712KiB
 Read Dispatches:   20,576,  329,216KiB  Write Dispatches:    1,474,  740,720KiB
 Reads Completed:   22,985,  367,760KiB  Writes Completed:    1,390,  721,168KiB
 Read Merges:            0               Write Merges:       16,888
 IO unplugs:             0               Timer unplugs:           0

Total (65,160):
 Reads Queued:      22,985,  367,760KiB  Writes Queued:       1,390,  721,168KiB
 Read Dispatches:   22,985,  367,760KiB  Write Dispatches:    1,595,  803,744KiB
 Reads Completed:   22,985,  367,760KiB  Writes Completed:    1,390,  721,168KiB
 Read Merges:            0               Write Merges:       43,683
 IO unplugs:             0               Timer unplugs:           4
...
\end{verbatim}

%----------------------------
\newpage\section{\label{sec:blktrace-ug}blktrace User Guide}

The \emph{blktrace} utility extracts event traces from the kernel (via
the relaying through the debug file system). Some background details
concerning the run-time behaviour of blktrace will help to understand some
of the more arcane command line options:

\begin{itemize}
  \item blktrace receives data from the kernel in buffers passed up
  through the debug file system (relay). Each device being traced has
  a file created in the mounted directory for the debugfs, which defaults
  to \emph{/sys/kernel/debug} -- this can be overridden with the \emph{-r}
  command line argument.
  
  \item blktrace defaults to collecting \emph{all} events that can be
  traced. To limit the events being captured, you can specify one or
  more filter masks via the \emph{-a} option.

  Alternatively, one may specify the entire mask utilizing a hexadecimal
  value that is version-specific. (Requires understanding of the internal
  representation of the filter mask.)

  \item As noted above, the events are passed up via a series of buffers
  stored into debugfs files. The size and number of buffers can be
  specified via the \emph{-b} and \emph{-n} arguments respectively.

  \item blktrace stores the extracted data into files stored in the
  \emph{local} directory. The format of the file names is (by default)
  \emph{device}.blktrace.\emph{cpu}, where \emph{device} is the base
  device name (e.g, if we are tracing /dev/sda, the base device name would
  be \emph{sda}); and \emph{cpu} identifies a CPU for the event stream.

  The \emph{device} portion of the event file name can be changed via
  the \emph{-o} option.

  \item blktrace may also be run concurrently with blkparse to produce
  \emph{live} output -- to do this specify \emph{-o -} for blktrace.

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

  \begin{enumerate}
    \item You may utilize the blktrace utility itself to \emph{kill}
    a running trace -- via the \emph{-k} option.

    \item You can specify a run-time duration for blktrace via the
    \emph{-w} option -- then blktrace will run for the specified number
    of seconds, and then halt.
  \end{enumerate}
\end{itemize}

\subsection{\label{sec:blktrace-args}Command line arguments}
\begin{tabular}{|l|l|l|}\hline
Short              & Long                       & Description \\ \hline\hline
-A \emph{hex-mask} & --set-mask=\emph{hex-mask} & Set filter mask to \emph{hex-mask} \\ \hline
-a \emph{mask}     & --act-mask=\emph{mask}     & Add \emph{mask} to current filter (see below for masks) \\ \hline
-b \emph{size}     & --buffer-size=\emph{size}  & Specifies buffer size for event extraction (scaled by $2^{10}$) \\ \hline
-d \emph{dev}      & --dev=\emph{dev}           & Adds \emph{dev} as a device to trace \\ \hline
-k                 & --kill                     & Kill on-going trace \\ \hline
-n \emph{num-sub}  & --num-sub=\emph{num-sub}   & Specifies number of buffers to use \\ \hline
-o \emph{file}     & --output=\emph{file}       & Prepend \emph{file} to output file name(s) \\
                   &                            & \textbf{This only works when using a single device} \\
                   &                            & \textbf{or when piping the output via \texttt{-o -}} \\
                   &                            & \textbf{with multiple devices.} \\ \hline
-r \emph{rel-path} & --relay=\emph{rel-path}    & Specifies debugfs mount point \\ \hline
-V                 & --version                  & Outputs version \\ \hline
-w \emph{seconds}  & --stopwatch=\emph{seconds} & Sets run time to the number of seconds specified \\ \hline
-I \emph{devs file}& --input-devs=\emph{devs file}& Adds devices found in \emph{devs file} to list of devices to trace. \\
                   &                              & (One device per line.) \\ \hline
\end{tabular}

\subsubsection{\label{sec:filter-mask}Filter Masks}
The following masks may be passed with the \emph{-a} command line
option, multiple filters may be combined via multiple \emph{-a} command
line options.\smallskip

\begin{tabular}{|l|l|}\hline
barrier & \emph{barrier} attribute \\ \hline
complete & \emph{completed} by driver \\ \hline
fs & \emph{FS} requests \\ \hline
issue & \emph{issued} to driver \\ \hline
pc & \emph{packet command} events \\ \hline
queue & \emph{queue} operations \\ \hline
read & \emph{read} traces \\ \hline
requeue & \emph{requeue} operations \\ \hline
sync & \emph{synchronous} attribute \\ \hline
write & \emph{write} traces \\ \hline
notify & \emph{notify} trace messages \\ \hline
\end{tabular}

\subsubsection{\label{sec:request-types}Request types}
blktrace disguingishes between two types of block layer requests,
file system and scsi commands. The former are dubbed \emph{fs}
requests, the latter \emph{pc} requests. File system requests are
normal read/write operations, ie any type of read or write from a
specific disk location at a given size. These requests typically
originate from a user process, but they may also be initiated by
the vm flushing dirty data to disk or the file system syncing
a super or journal block to disk. \emph{pc} requests are SCSI
commands. blktrace sends the command data block as a payload
so that blkparse can decode it.

%----------------------------
\newpage\section{\label{sec:blkparse-ug}blkparse User Guide}

The \emph{blkparse} utility will attempt to combine streams of events
for various devices on various CPUs, and produce a formatted output of
the event information. As with blktrace, some details concerning blkparse
will help in understanding the command line options presented below.

\begin{itemize}
  \item By default, blkparse expects to run in a post-processing mode
  -- one where the trace events have been saved by a previous run
  of blktrace, and blkparse is combining event streams and dumping
  formatted data. 

  blkparse \emph{may} be run in a \emph{live} manner concurrently with
  blktrace by specifying \emph{-i -} to blkparse, and combining it with
  the live option for blktrace. An example would be:

  \begin{verbatim}
  % blktrace -d /dev/sda -o - | blkparse -i -
  \end{verbatim}

  \item You can set how many blkparse batches event reads via the
  \emph{-b} option, the default is to handle events in batches of 512.

  \item If you have saved event traces in blktrace with different output
  names (via the \emph{-o} option to blktrace), you must specify the
  same \emph{input} name via the \emph{-i} option.

  \item The format of the output data can be controlled via the \emph{-f}
  or \emph{-F} options -- see section~\ref{sec:blkparse-format} for details.

  By default, blkparse sends formatted data to standard output. This may
  be changed via the \emph{-o} option, or text output can be disabled
  via the\emph{-O} option. A merged binary stream can be produced using
  the \emph{-d} option.

\end{itemize}

\newpage\subsection{\label{sec:blkparse-args}Command line arguments}
\begin{tabular}{|l|l|l|}\hline
Short              & Long                       & Description \\ \hline\hline
-b \emph{batch}    & --batch={batch}            & Standard input read batching \\ \hline

-i \emph{file}     & --input=\emph{file}        & Specifies base name for input files -- default is \emph{device}.blktrace.\emph{cpu}. \\
                   &                            & As noted above, specifying \emph{-i -} runs in \emph{live} mode with blktrace \\
		   &                            & (reading data from standard in). \\ \hline

-F \emph{typ,fmt}  & --format=\emph{typ,fmt}    & Sets output format \\
-f \emph{fmt}      & --format-spec=\emph{fmt}   & (See section~\ref{sec:blkparse-format} for details.) \\ 
                   &                            & \\
		   &                            & The -f form specifies a format for all events \\
                   &                            & \\
		   &                            & The -F form allows one to specify a format for a specific \\
		   &                            & event type. The single-character \emph{typ} field is one of the \\
		   &                            & action specifiers in section~\ref{sec:act-table} \\ \hline


-m                 & --missing                  & Print missing entries\\ \hline

-h                 & --hash-by-name             & Hash processes by name, not by PID\\ \hline

-o \emph{file}     & --output=\emph{file}       & Output file \\ \hline
-O                 & --no-text-output           & Do \emph{not} produce text output, used for binary (-d) only \\ \hline

-d \emph{file}     & --dump-binary=\emph{file}  & Binary output file \\ \hline

-q                 & --quiet                    & Quite mode \\ \hline

-s                 & --per-program-stats        & Displays data sorted by program \\ \hline

-t                 & --track-ios                & Display time deltas per IO \\ \hline

-w \emph{span}     & --stopwatch=\emph{span}    & Display traces for the \emph{span} specified -- where span can be: \\ 
                   &                            & \emph{end-time} -- Display traces from time 0 through \emph{end-time} (in ns) \\
		   &                            & or \\
		   &                            & \emph{start:end-time} -- Display traces from time \emph{start} \\
		   &                            & through {end-time} (in ns). \\ \hline

-M                 & --no-msgs                  & Do not add messages to binary output file \\\hline
-v                 & --verbose                  & More verbose marginal on marginal errors \\ \hline
-V                 & --version                  & Display version \\ \hline

\end{tabular}

\newpage
\subsection{\label{sec:blkparse-actions}Trace actions}

\begin{description}
  \item[C -- complete] A previously issued request has been completed.
  The output will detail the sector and size of that request, as well
  as the success or failure of it.

  \item[D -- issued] A request that previously resided on the block layer
  queue or in the io scheduler has been sent to the driver.

  \item[I -- inserted] A request is being sent to the io scheduler for
  addition to the internal queue and later service by the driver. The
  request is fully formed at this time.

  \item[Q -- queued] This notes intent to queue io at the given location.
  No real requests exists yet.

  \item[B -- bounced] The data pages attached to this \emph{bio} are
  not reachable by the hardware and must be bounced to a lower memory
  location. This causes a big slowdown in io performance, since the data
  must be copied to/from kernel buffers. Usually this can be fixed with
  using better hardware - either a better io controller, or a platform
  with an IOMMU.

  \item[m -- message] Text message generated via kernel call to
  \texttt{blk\_add\_trace\_msg}.

  \item[M -- back merge] A previously inserted request exists that ends
  on the boundary of where this io begins, so the io scheduler can merge
  them together.

  \item[F -- front merge] Same as the back merge, except this io ends
  where a previously inserted requests starts.

  \item[G -- get request] To send any type of request to a block device,
  a \emph{struct request} container must be allocated first.

  \item[S -- sleep] No available request structures were available, so
  the issuer has to wait for one to be freed.

  \item[P -- plug] When io is queued to a previously empty block device
  queue, Linux will plug the queue in anticipation of future ios being
  added before this data is needed.

  \item[U -- unplug] Some request data already queued in the device,
  start sending requests to the driver. This may happen automatically
  if a timeout period has passed (see next entry) or if a number of
  requests have been added to the queue.

  \item[T -- unplug due to timer] If nobody requests the io that was queued
  after plugging the queue, Linux will automatically unplug it after a
  defined period has passed.

  \item[X -- split] On raid or device mapper setups, an incoming io may
  straddle a device or internal zone and needs to be chopped up into
  smaller pieces for service. This may indicate a performance problem due
  to a bad setup of that raid/dm device, but may also just be part of
  normal boundary conditions. dm is notably bad at this and will clone
  lots of io.

  \item[A -- remap] For stacked devices, incoming io is remapped to device
  below it in the io stack. The remap action details what exactly is
  being remapped to what.

\end{description}

\subsection{\label{sec:blkparse-format}Output Description and Formatting}

The output from blkparse can be tailored for specific use - in particular,
to ease parsing of output, and/or limit output fields to those the user
wants to see. The data for fields which can be output include:

\smallskip
\begin{tabular}{|l|l|}\hline
Field    & Description \\
Specifier & \\ \hline\hline
\emph{a} & Action, a (small) string (1 or 2 characters) -- see table below for more details \\ \hline
\emph{c} & CPU id \\ \hline
\emph{C} & Command \\ \hline
\emph{d} & RWBS field, a (small) string (1-3 characters)  -- see section below for more details \\ \hline
\emph{D} & 7-character string containing the major and minor numbers of
the event's device \\
         & (separated by a comma). \\ \hline
\emph{e} & Error value \\ \hline
\emph{m} & Minor number of event's device. \\ \hline
\emph{M} & Major number of event's device. \\ \hline
\emph{n} & Number of blocks \\ \hline
\emph{N} & Number of bytes \\ \hline
\emph{p} & Process ID \\ \hline
\emph{P} & Display packet data -- series of hexadecimal values\\ \hline
\emph{s} & Sequence numbers \\ \hline
\emph{S} & Sector number \\ \hline
\emph{t} & Time stamp (nanoseconds) \\ \hline
\emph{T} & Time stamp (seconds) \\ \hline
\emph{u} & Elapsed value in microseconds (\emph{-t} command line option) \\ \hline
\emph{U} & Payload unsigned integer \\ \hline
\end{tabular}

Note that the user can optionally specify field display width, and
optionally a left-aligned specifier. These precede field specifiers,
with a '\%' character, followed by the optional left-alignment specifer
(-) followed by the width (a decimal number) and then the field.

Thus, to specify the command in a 12-character field that is left aligned:

\begin{verbatim}
-f "%-12C"
\end{verbatim}

\newpage
\subsubsection{\label{sec:act-table}Action Table}
The following table shows the various actions which may be output.

\begin{tabular}{|l|l|}\hline
Act & Description \\ \hline\hline
A & IO was remapped to a different device \\ \hline
B & IO bounced \\ \hline
C & IO completion \\ \hline
D & IO issued to driver \\ \hline
F & IO front merged with request on queue \\ \hline
G & Get request \\ \hline
I & IO inserted onto request queue \\ \hline
M & IO back merged with request on queue \\ \hline
P & Plug request \\ \hline
Q & IO handled by request queue code \\ \hline
S & Sleep request \\ \hline
T & Unplug due to timeout \\ \hline
U & Unplug request \\ \hline
X & Split \\ \hline
\end{tabular}

\subsubsection{\label{sec:act-table}RWBS Description}
This is a small string containing at least one character ('R' for read,
'W' for write, or 'D' for block discard operation), and optionally either
a 'B' (for barrier operations) or 'S' (for synchronous operations).

\subsubsection{\label{sec:default-output}Default output}

The standard \emph{header} (or initial fields displayed) include:

\begin{verbatim}
"%D %2c %8s %5T.%9t %5p %2a %3d "
\end{verbatim}

Breaking this down:

\begin{description}
  \item[\%D] Displays the event's device major/minor as: \%3d,\%-3d.
  \item[\%2c] CPU ID (2-character field).
  \item[\%8s] Sequence number
  \item[\%5T.\%9t] 5-charcter field for the seconds portion of the
  time stamp and a 9-character field for the nanoseconds in the time stamp.
  \item[\%5p] 5-character field for the process ID.
  \item[\%2a] 2-character field for one of the actions.
  \item[\%3d] 3-character field for the RWBS data.
\end{description}

Seeing this in action:

\begin{verbatim}
  8,0    3        1     0.000000000   697  G   W 223490 + 8 [kjournald]
\end{verbatim}

The header is the data in this line up to the 223490 (starting block). 

The default output for all event types includes this header.

\paragraph{Default output per action}

\begin{description}
  \item[C -- complete] If a payload is present, this is presented between
  parenthesis following the header, followed by the error value. 

  If no payload is present, the sector and number of blocks are presented
  (with an intervening plus (+) character). If the \emph{-t} option
  was specified, then the elapsed time is presented. In either case,
  it is followed by the error value for the completion.

  \item[D -- issued]
  \item[I -- inserted]
  \item[Q -- queued]
  \item[B -- bounced] If a payload is present, the number of payload bytes
  is output, followed by the payload in hexadecimal between parenthesis.

  If no payload is present, the sector and number of blocks are presented
  (with an intervening plus (+) character). If the \emph{-t} option was
  specified, then the elapsed time is presented (in parenthesis). In
  either case, it is followed by the command associated with the event
  (surrounded by square brackets).

  \item[M -- back merge]
  \item[F -- front merge]
  \item[G -- get request]
  \item[S -- sleep] The starting sector and number of blocks is output
  (with an intervening plus (+) character), followed by the command
  associated with the event (surrounded by square brackets).

  \item[P -- plug] The command associated with the event (surrounded by
  square brackets) is output.

  \item[U -- unplug]
  \item[T -- unplug due to timer] The command associated with the event
  (surrounded by square brackets) is output, followed by the number of
  requests outstanding.

  \item[X -- split] The original starting sector followed by the new
  sector (separated by a slash (/) is output, followed by the command
  associated with the event (surrounded by square brackets).

  \item[A -- remap] Sector and length is output, along with the original
  device and sector offset.

  \item[m -- message] The supplied message is appended to the end of
  the standard header.

\end{description}

%------------------------------
\newpage
\newpage\section*{\label{sec:blktrace-kg}Appendix: blktrace Kernel Guide}

The blktrace facility provides an efficient event transfer mechanism which
supplies block IO layer state transition data via the relay
filesystem. This section provides some details as to the interfaces
blktrace utilizes in the kernel to effect this. It is good background data
to help understand some of the outputs and command-line options above.

\subsection{blktrace.h Definitions}
Files which include $<linux/blktrace.h>$ are supplied with the following
definitions:

\subsubsection{Trace Action Specifiers}
\begin{tabular}{|l|l|}\hline
  BLK\_TA\_QUEUE & (RQ) Command queued to request\_queue. \\
                 & (BIO) Command queued by elevator. \\ \hline
  BLK\_TA\_BACKMERGE & Back merging elevator operation \\ \hline
  BLK\_TA\_FRONTMERGE & Front merging elevator operation \\ \hline
  BLK\_TA\_GETRQ & Free request retrieved. \\ \hline
  BLK\_TA\_SLEEPRQ & No requests available, device unplugged. \\ \hline
  BLK\_TA\_REQUEUE & Request requeued. \\ \hline
  BLK\_TA\_ISSUE & Command set to driver for request\_queue. \\ \hline
  BLK\_TA\_COMPLETE & Command completed by driver. \\ \hline
  BLK\_TA\_PLUG & Device is plugged \\ \hline
  BLK\_TA\_UNPLUG\_IO & Unplug device as IO is made available. \\ \hline
  BLK\_TA\_UNPLUG\_TIMER & Unplug device after timer expired. \\ \hline
  BLK\_TA\_INSERT & Insert request into queue. \\ \hline
  BLK\_TA\_SPLIT & BIO split into 2 or more requests. \\ \hline
  BLK\_TA\_BOUNCE & BIO was bounced \\ \hline
  BLK\_TA\_REMAP & BIO was remapped \\ \hline
\end{tabular}

%..........................................
\subsection{blktrace.h Routines}
Files which include $<linux/blktrace.h>$ are supplied with the following
kernel routine invocable interfaces:

\begin{description}
  \item[blk\_add\_trace\_rq(struct request\_queue *q, struct request\_queue 
  								*rq, u32 what)]
	Adds a trace event describing the state change of the passed in
	request\_queue. The \emph{what} parameter describes the change in
	the request\_queue state, and is one of the request queue action 
	specifiers -- BLK\_TA\_QUEUE, BLK\_TA\_REQUEUE, BLK\_TA\_ISSUE,
	or BLK\_TA\_COMPLETE.

  \item[blk\_add\_trace\_bio(struct request\_queue *q, struct bio *bio, 
  								u32 what)]
	Adds a trace event for the BIO passed in. The \emph{what} parameter
	describes the action being performed on the BIO, and is one of
	BLK\_TA\_BACKMERGE, BLK\_TA\_FRONTMERGE, or BLK\_TA\_QUEUE.

  \item[blk\_add\_trace\_generic(struct request\_queue *q, struct bio *bio, 
							int rw, u32 what)]
	Adds a \emph{generic} trace event -- not one of the request queue
	or BIO traces. The \emph{what} parameter describes the action being 
	performed on the BIO (if bio is non-NULL), and is one of
	BLK\_TA\_PLUG, BLK\_TA\_GETRQ or BLK\_TA\_SLEEPRQ.

  \item[blk\_add\_trace\_pdu\_int(struct request\_queue *q, u32 what,
  								u32 pdu)]
	Adds a trace with some payload data -- in this case, an unsigned
	32-bit entity (the \emph{pdu} parameter). The \emph{what} parameter
	describes the nature of the payload, and is one of
	BLK\_TA\_UNPLUG\_IO or BLK\_TA\_UNPLUG\_TIMER.

  \item[blk\_add\_trace\_remap(struct request\_queue *q, struct bio  *bio,
						dev\_t dev, sector\_t sector)]
	Adds a trace with a remap event. \emph{dev} and \emph{sector} denote
	the original device this \emph{bio} was mapped from.

  \item[blk\_add\_trace\_msg(struct request\_queue *q, char *fmt, ...)]
	Adds a formatted message to the output stream. The total message
	size can not exceed BLK\_TN\_MSG\_MSG characters (currently
	1024). Standard format conversions are supported (as supplied
	by \texttt{vscnprintf}.

\end{description}
\end{document}
