xref: /aosp_15_r20/external/blktrace/btt/doc/btt.tex (revision 1a3d31e37cc95e9919fd86900a2b6a555f55952c)
1*1a3d31e3SAndroid Build Coastguard Worker\documentclass{article}
2*1a3d31e3SAndroid Build Coastguard Worker\usepackage{epsfig,placeins}
3*1a3d31e3SAndroid Build Coastguard Worker
4*1a3d31e3SAndroid Build Coastguard Worker%
5*1a3d31e3SAndroid Build Coastguard Worker% Copyright (C) 2007-2009 Alan D. Brunelle <[email protected]>
6*1a3d31e3SAndroid Build Coastguard Worker%
7*1a3d31e3SAndroid Build Coastguard Worker%  This program is free software; you can redistribute it and/or modify
8*1a3d31e3SAndroid Build Coastguard Worker%  it under the terms of the GNU General Public License as published by
9*1a3d31e3SAndroid Build Coastguard Worker%  the Free Software Foundation; either version 2 of the License, or
10*1a3d31e3SAndroid Build Coastguard Worker%  (at your option) any later version.
11*1a3d31e3SAndroid Build Coastguard Worker%
12*1a3d31e3SAndroid Build Coastguard Worker%  This program is distributed in the hope that it will be useful,
13*1a3d31e3SAndroid Build Coastguard Worker%  but WITHOUT ANY WARRANTY; without even the implied warranty of
14*1a3d31e3SAndroid Build Coastguard Worker%  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15*1a3d31e3SAndroid Build Coastguard Worker%  GNU General Public License for more details.
16*1a3d31e3SAndroid Build Coastguard Worker%
17*1a3d31e3SAndroid Build Coastguard Worker%  You should have received a copy of the GNU General Public License
18*1a3d31e3SAndroid Build Coastguard Worker%  along with this program; if not, write to the Free Software
19*1a3d31e3SAndroid Build Coastguard Worker%  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20*1a3d31e3SAndroid Build Coastguard Worker%
21*1a3d31e3SAndroid Build Coastguard Worker%  vi :set textwidth=75
22*1a3d31e3SAndroid Build Coastguard Worker
23*1a3d31e3SAndroid Build Coastguard Worker\title{\texttt{btt} User Guide}
24*1a3d31e3SAndroid Build Coastguard Worker\author{Alan D. Brunelle ([email protected])}
25*1a3d31e3SAndroid Build Coastguard Worker\date{8 October 2009}
26*1a3d31e3SAndroid Build Coastguard Worker
27*1a3d31e3SAndroid Build Coastguard Worker\begin{document}
28*1a3d31e3SAndroid Build Coastguard Worker\maketitle
29*1a3d31e3SAndroid Build Coastguard Worker%--------------
30*1a3d31e3SAndroid Build Coastguard Worker\section{\label{sec:intro}Introduction}
31*1a3d31e3SAndroid Build Coastguard Worker
32*1a3d31e3SAndroid Build Coastguard Worker\texttt{btt} is a post-processing tool for the block layer IO tracing
33*1a3d31e3SAndroid Build Coastguard Workertool called blktrace. As noted in its Users Guide, blktrace
34*1a3d31e3SAndroid Build Coastguard Worker
35*1a3d31e3SAndroid Build Coastguard Worker  \begin{quotation}
36*1a3d31e3SAndroid Build Coastguard Worker    is a block layer IO tracing mechanism which provides detailed
37*1a3d31e3SAndroid Build Coastguard Worker    information about request queue operations up to user space.
38*1a3d31e3SAndroid Build Coastguard Worker  \end{quotation}
39*1a3d31e3SAndroid Build Coastguard Worker
40*1a3d31e3SAndroid Build Coastguard Workerblktrace is capable of producing tremendous amounts of output in the
41*1a3d31e3SAndroid Build Coastguard Workerform of multiple individual traces per IO executed during the traced
42*1a3d31e3SAndroid Build Coastguard Workerrun. It is also capable of producing some general statistics concerning
43*1a3d31e3SAndroid Build Coastguard WorkerIO rates and the like. \texttt{btt} goes further and produces a variety
44*1a3d31e3SAndroid Build Coastguard Workerof overall statistics about each of the individual handling of IOs, and
45*1a3d31e3SAndroid Build Coastguard Workerprovides data we believe is useful to plot to provide visual comparisons
46*1a3d31e3SAndroid Build Coastguard Workerfor evaluation.
47*1a3d31e3SAndroid Build Coastguard Worker
48*1a3d31e3SAndroid Build Coastguard WorkerThis document will discuss \texttt{btt} usage, provide some sample output,
49*1a3d31e3SAndroid Build Coastguard Workerand also show some interesting plots generated from the data provided
50*1a3d31e3SAndroid Build Coastguard Workerby the \texttt{btt} utility.
51*1a3d31e3SAndroid Build Coastguard Worker
52*1a3d31e3SAndroid Build Coastguard Worker\bigskip
53*1a3d31e3SAndroid Build Coastguard WorkerA short note on the ordering of this document -- the actual
54*1a3d31e3SAndroid Build Coastguard Workercommand-line usage section occurs relatively late in the document (see
55*1a3d31e3SAndroid Build Coastguard Workersection~\ref{sec:cmd-line}), as we felt that discussing some of the
56*1a3d31e3SAndroid Build Coastguard Workercapabilities and output formats would make the parameter discussion
57*1a3d31e3SAndroid Build Coastguard Workereasier.
58*1a3d31e3SAndroid Build Coastguard Worker
59*1a3d31e3SAndroid Build Coastguard Worker\bigskip
60*1a3d31e3SAndroid Build Coastguard Worker  This document refers to the output formats generated by \texttt{btt}
61*1a3d31e3SAndroid Build Coastguard Worker  version 2.00.  However, the descriptions are general enough to cover
62*1a3d31e3SAndroid Build Coastguard Worker  output formats prior to that.
63*1a3d31e3SAndroid Build Coastguard Worker
64*1a3d31e3SAndroid Build Coastguard Worker\newpage\tableofcontents
65*1a3d31e3SAndroid Build Coastguard Worker
66*1a3d31e3SAndroid Build Coastguard Worker\newpage\section{\label{sec:getting-started}Getting Started}
67*1a3d31e3SAndroid Build Coastguard Worker
68*1a3d31e3SAndroid Build Coastguard Worker  The simple pipeline to get going with \texttt{btt} is to perform the
69*1a3d31e3SAndroid Build Coastguard Worker  following steps:
70*1a3d31e3SAndroid Build Coastguard Worker
71*1a3d31e3SAndroid Build Coastguard Worker  \begin{enumerate}
72*1a3d31e3SAndroid Build Coastguard Worker    \item Run \texttt{blktrace}, specifying whatever devices and other
73*1a3d31e3SAndroid Build Coastguard Worker    parameters you want. You must save the traces to disk in this step,
74*1a3d31e3SAndroid Build Coastguard Worker    btt does not work in live mode.
75*1a3d31e3SAndroid Build Coastguard Worker
76*1a3d31e3SAndroid Build Coastguard Worker    \item After tracing completes, run \texttt{blkrawverify}, specifying
77*1a3d31e3SAndroid Build Coastguard Worker    all devices that were traced (or at least on all devices that you
78*1a3d31e3SAndroid Build Coastguard Worker    will use \texttt{btt} with -- section~\ref{sec:o-D} shows how you
79*1a3d31e3SAndroid Build Coastguard Worker    can dictate which devices to use with btt). If blkrawverify finds
80*1a3d31e3SAndroid Build Coastguard Worker    errors in the trace streams saved, it is best to recapture the data
81*1a3d31e3SAndroid Build Coastguard Worker    -- utilizing \texttt{btt} on \emph{unclean} trace files produces
82*1a3d31e3SAndroid Build Coastguard Worker    inconsistent results.
83*1a3d31e3SAndroid Build Coastguard Worker
84*1a3d31e3SAndroid Build Coastguard Worker    While this step is optional, we have found that performing this
85*1a3d31e3SAndroid Build Coastguard Worker    helps to ensure data coming from \texttt{btt} makes the most sense.
86*1a3d31e3SAndroid Build Coastguard Worker
87*1a3d31e3SAndroid Build Coastguard Worker    \item Run \texttt{blkparse} with the \texttt{-d} option specifying
88*1a3d31e3SAndroid Build Coastguard Worker    a file to store the combined binary stream. (e.g.: \texttt{blkparse
89*1a3d31e3SAndroid Build Coastguard Worker    -d bp.bin ...}).
90*1a3d31e3SAndroid Build Coastguard Worker
91*1a3d31e3SAndroid Build Coastguard Worker    \texttt{blktrace} produces a series of binary files
92*1a3d31e3SAndroid Build Coastguard Worker    containing parallel trace streams -- one file per CPU per
93*1a3d31e3SAndroid Build Coastguard Worker    device. \texttt{blkparse} provides the ability to combine all the
94*1a3d31e3SAndroid Build Coastguard Worker    files into one time-ordered stream of traces for all devices.
95*1a3d31e3SAndroid Build Coastguard Worker
96*1a3d31e3SAndroid Build Coastguard Worker    \item Run \texttt{btt} specifying the file produced by
97*1a3d31e3SAndroid Build Coastguard Worker    \texttt{blkparse} utilizing the \texttt{-i} option (e.g.: \texttt{btt
98*1a3d31e3SAndroid Build Coastguard Worker    -i bp.bin ...}).
99*1a3d31e3SAndroid Build Coastguard Worker
100*1a3d31e3SAndroid Build Coastguard Worker  \end{enumerate}
101*1a3d31e3SAndroid Build Coastguard Worker
102*1a3d31e3SAndroid Build Coastguard Worker\newpage\section{\label{sec:output-overview}Output Overview}
103*1a3d31e3SAndroid Build Coastguard Worker
104*1a3d31e3SAndroid Build Coastguard Worker  The major default areas of output provided by \texttt{btt}
105*1a3d31e3SAndroid Build Coastguard Worker  include\label{tl-defs}:
106*1a3d31e3SAndroid Build Coastguard Worker
107*1a3d31e3SAndroid Build Coastguard Worker\begin{description}
108*1a3d31e3SAndroid Build Coastguard Worker  \item[average component times across all IOs] The time line of each IO
109*1a3d31e3SAndroid Build Coastguard Worker  is broken down into 3 major regions:
110*1a3d31e3SAndroid Build Coastguard Worker
111*1a3d31e3SAndroid Build Coastguard Worker    \begin{enumerate}
112*1a3d31e3SAndroid Build Coastguard Worker      \item Time needed to insert or merge an incoming IO onto the request
113*1a3d31e3SAndroid Build Coastguard Worker      queue. This is the average time from when the IO enters the block
114*1a3d31e3SAndroid Build Coastguard Worker      IO layer (queue trace) until it is inserted (insert trace).
115*1a3d31e3SAndroid Build Coastguard Worker
116*1a3d31e3SAndroid Build Coastguard Worker      This is denoted as \emph{Q2I} time.
117*1a3d31e3SAndroid Build Coastguard Worker
118*1a3d31e3SAndroid Build Coastguard Worker      This is also broken down into two component times\footnote{On
119*1a3d31e3SAndroid Build Coastguard Worker      occasion there are also some time spent \emph{sleeping} waiting
120*1a3d31e3SAndroid Build Coastguard Worker      for a request. That occurs between the Q and G operations. You
121*1a3d31e3SAndroid Build Coastguard Worker      will see these listed as \texttt{S2G} times.}:
122*1a3d31e3SAndroid Build Coastguard Worker
123*1a3d31e3SAndroid Build Coastguard Worker        \begin{description}
124*1a3d31e3SAndroid Build Coastguard Worker	  \item[Q2G] Time needed to \emph{get} a request (get request
125*1a3d31e3SAndroid Build Coastguard Worker	  trace).
126*1a3d31e3SAndroid Build Coastguard Worker
127*1a3d31e3SAndroid Build Coastguard Worker	  \item[G2I] Time needed to put that request onto the request
128*1a3d31e3SAndroid Build Coastguard Worker	  queue (insert trace).
129*1a3d31e3SAndroid Build Coastguard Worker        \end{description}
130*1a3d31e3SAndroid Build Coastguard Worker
131*1a3d31e3SAndroid Build Coastguard Worker      For \emph{merged} requests -- an incoming request that is merged
132*1a3d31e3SAndroid Build Coastguard Worker      with a previously submitted request -- we calculate \emph{Q2M}, the
133*1a3d31e3SAndroid Build Coastguard Worker      amount of time between the queue trace and the merge trace.
134*1a3d31e3SAndroid Build Coastguard Worker
135*1a3d31e3SAndroid Build Coastguard Worker      \item Time spent on the request queue. The average time from when
136*1a3d31e3SAndroid Build Coastguard Worker      the IO is inserted or merged onto the request queue, until it is
137*1a3d31e3SAndroid Build Coastguard Worker      issued (issue trace) to the lower level driver.
138*1a3d31e3SAndroid Build Coastguard Worker
139*1a3d31e3SAndroid Build Coastguard Worker      Referred to as \emph{I2D} time\footnote{The \emph{issue} trace
140*1a3d31e3SAndroid Build Coastguard Worker      is represented by a D in the blkparse output, hence its usage in
141*1a3d31e3SAndroid Build Coastguard Worker      btt to refer to issue traces. Note that an I is used to refer to
142*1a3d31e3SAndroid Build Coastguard Worker      \emph{insert} traces.}.
143*1a3d31e3SAndroid Build Coastguard Worker
144*1a3d31e3SAndroid Build Coastguard Worker      \item Driver and device time -- the average time from when the
145*1a3d31e3SAndroid Build Coastguard Worker      actual IO was issued to the driver until is completed (completion
146*1a3d31e3SAndroid Build Coastguard Worker      trace) back to the block IO layer.
147*1a3d31e3SAndroid Build Coastguard Worker
148*1a3d31e3SAndroid Build Coastguard Worker      This is referred to as the \emph{D2C} time\
149*1a3d31e3SAndroid Build Coastguard Worker    \end{enumerate}
150*1a3d31e3SAndroid Build Coastguard Worker
151*1a3d31e3SAndroid Build Coastguard Worker  Two other sets of results are presented in this section:
152*1a3d31e3SAndroid Build Coastguard Worker
153*1a3d31e3SAndroid Build Coastguard Worker    \begin{enumerate}
154*1a3d31e3SAndroid Build Coastguard Worker      \item \emph{Q2Q} which measures the time between queue traces
155*1a3d31e3SAndroid Build Coastguard Worker      in the system. This provides some idea as to how quickly IOs are
156*1a3d31e3SAndroid Build Coastguard Worker      being handed to the block IO layer.
157*1a3d31e3SAndroid Build Coastguard Worker
158*1a3d31e3SAndroid Build Coastguard Worker      \item \emph{Q2C} which measures the times for the complete life cycle
159*1a3d31e3SAndroid Build Coastguard Worker      of IOs during the run\footnote{One of the areas that needs some
160*1a3d31e3SAndroid Build Coastguard Worker      work in \texttt{btt} is to better understand the multiplex nature of
161*1a3d31e3SAndroid Build Coastguard Worker      IOs during a run. In theory, one would like ${Q2I} + {I2D} + {D2C}
162*1a3d31e3SAndroid Build Coastguard Worker      = {Q2C}$ however, typically there are multiple queue traces that
163*1a3d31e3SAndroid Build Coastguard Worker      are combined via merges into a single IO issued and completed. We
164*1a3d31e3SAndroid Build Coastguard Worker      currently average the queue-to-insert and queue-to-merge times,
165*1a3d31e3SAndroid Build Coastguard Worker      and thus tend to be quite close to the expected equation.}
166*1a3d31e3SAndroid Build Coastguard Worker
167*1a3d31e3SAndroid Build Coastguard Worker    \end{enumerate}
168*1a3d31e3SAndroid Build Coastguard Worker
169*1a3d31e3SAndroid Build Coastguard Worker  For each row in this output, we provide a minimum, average, maximum
170*1a3d31e3SAndroid Build Coastguard Worker  (which are all presented in seconds), and overall count. As an
171*1a3d31e3SAndroid Build Coastguard Worker  example\footnote{As with this display, the author has taken some liberty
172*1a3d31e3SAndroid Build Coastguard Worker  in reformatting the output for better display on the printed page.}:
173*1a3d31e3SAndroid Build Coastguard Worker
174*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
175*1a3d31e3SAndroid Build Coastguard WorkerALL            MIN           AVG           MAX           N
176*1a3d31e3SAndroid Build Coastguard Worker---- ------------- ------------- ------------- -----------
177*1a3d31e3SAndroid Build Coastguard WorkerQ2Q    0.000000058   0.000012761   9.547941661     2262310
178*1a3d31e3SAndroid Build Coastguard WorkerQ2I    0.000000272   0.000005995   0.104588839     2262311
179*1a3d31e3SAndroid Build Coastguard WorkerI2D    0.000001446   0.094992714   0.239636864     2262311
180*1a3d31e3SAndroid Build Coastguard WorkerD2C    0.000193721   0.030406554   1.634221408     2262311
181*1a3d31e3SAndroid Build Coastguard WorkerQ2C    0.000207665   0.125405263   1.830917198     2262311
182*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
183*1a3d31e3SAndroid Build Coastguard Worker
184*1a3d31e3SAndroid Build Coastguard Worker  When tracking \emph{device mapper} devices, we also break down the
185*1a3d31e3SAndroid Build Coastguard Worker  \emph{Q2A} and \emph{Q2C} times for those IOs.
186*1a3d31e3SAndroid Build Coastguard Worker
187*1a3d31e3SAndroid Build Coastguard Worker  \item[Device Overhead]
188*1a3d31e3SAndroid Build Coastguard Worker
189*1a3d31e3SAndroid Build Coastguard Worker  Using the data from the previous chart, we can then provide some idea
190*1a3d31e3SAndroid Build Coastguard Worker  as to where IO spend most of the time on average. The following output
191*1a3d31e3SAndroid Build Coastguard Worker  shows the percentage of time spent in each of the phases of an
192*1a3d31e3SAndroid Build Coastguard WorkerIO\footnote{It should be noted that incoming requests either go through:
193*1a3d31e3SAndroid Build Coastguard Worker
194*1a3d31e3SAndroid Build Coastguard Worker\begin{enumerate}
195*1a3d31e3SAndroid Build Coastguard Worker  \item Q2G + Q2I
196*1a3d31e3SAndroid Build Coastguard Worker
197*1a3d31e3SAndroid Build Coastguard Worker  or
198*1a3d31e3SAndroid Build Coastguard Worker
199*1a3d31e3SAndroid Build Coastguard Worker  \item Q2M
200*1a3d31e3SAndroid Build Coastguard Worker\end{enumerate}
201*1a3d31e3SAndroid Build Coastguard Worker  before proceeding to I2D and D2C.}
202*1a3d31e3SAndroid Build Coastguard Worker
203*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
204*1a3d31e3SAndroid Build Coastguard Worker       DEV |       Q2G       G2I       Q2M       I2D       D2C
205*1a3d31e3SAndroid Build Coastguard Worker---------- | --------- --------- --------- --------- ---------
206*1a3d31e3SAndroid Build Coastguard Worker (  8, 80) |   0.0013%   0.0004%   0.0006%  88.5005%  11.4988%
207*1a3d31e3SAndroid Build Coastguard Worker---------- | --------- --------- --------- --------- ---------
208*1a3d31e3SAndroid Build Coastguard Worker   Overall |   0.0003%   0.0001%   0.0041%  21.4998%  78.4958%
209*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
210*1a3d31e3SAndroid Build Coastguard Worker
211*1a3d31e3SAndroid Build Coastguard Worker  \item[Device Merge Information]
212*1a3d31e3SAndroid Build Coastguard Worker
213*1a3d31e3SAndroid Build Coastguard Worker  A key measurement when making changes in the system (software \emph{or}
214*1a3d31e3SAndroid Build Coastguard Worker  hardware) is to understand the block IO layer ends up merging incoming
215*1a3d31e3SAndroid Build Coastguard Worker  requests into fewer, but larger, IOs to the underlying driver. In this
216*1a3d31e3SAndroid Build Coastguard Worker  section, we show the number of incoming requests (Q), the number of
217*1a3d31e3SAndroid Build Coastguard Worker  issued requests (D) and the resultant ratio. We also provide values
218*1a3d31e3SAndroid Build Coastguard Worker  for the minimum, average and maximum IOs generated.
219*1a3d31e3SAndroid Build Coastguard Worker
220*1a3d31e3SAndroid Build Coastguard Worker  Looking at the following example:
221*1a3d31e3SAndroid Build Coastguard Worker
222*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
223*1a3d31e3SAndroid Build Coastguard Worker       DEV |      #Q    #D Ratio | BLKmin BLKavg BLKmax   Total
224*1a3d31e3SAndroid Build Coastguard Worker---------- | ------- ----- ----- | ------ ------ ------ -------
225*1a3d31e3SAndroid Build Coastguard Worker ( 68, 64) | 2262311 18178 124.5 |      2    124    128 2262382
226*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
227*1a3d31e3SAndroid Build Coastguard Worker
228*1a3d31e3SAndroid Build Coastguard Worker  we see that (on average) the block IO layer is combining upwards of
229*1a3d31e3SAndroid Build Coastguard Worker  125 incoming requests into a single request down the IO stack. The
230*1a3d31e3SAndroid Build Coastguard Worker  resultant average IO size is 124 blocks.
231*1a3d31e3SAndroid Build Coastguard Worker
232*1a3d31e3SAndroid Build Coastguard Worker  \item[Device Seek Information]
233*1a3d31e3SAndroid Build Coastguard Worker
234*1a3d31e3SAndroid Build Coastguard Worker  Another useful measure is the variability in the sector distances
235*1a3d31e3SAndroid Build Coastguard Worker  between consecutively \emph{received -- queued} and \emph{submitted
236*1a3d31e3SAndroid Build Coastguard Worker  -- issued} IOs. The next two sections provides some rudimentary
237*1a3d31e3SAndroid Build Coastguard Worker  statistics to gauge the general nature of the sector differences
238*1a3d31e3SAndroid Build Coastguard Worker  between IOs. Values provided include the number of seeks (number of IOs
239*1a3d31e3SAndroid Build Coastguard Worker  submitted to lower level drivers), the \emph{mean} distance between
240*1a3d31e3SAndroid Build Coastguard Worker  IOs, the \emph{median} value for all seeks, and the \emph{mode} -
241*1a3d31e3SAndroid Build Coastguard Worker  the value(s) and the counts are provided for the latter.
242*1a3d31e3SAndroid Build Coastguard Worker
243*1a3d31e3SAndroid Build Coastguard Worker  The first of the two sections displays values for Q2Q seek distances --
244*1a3d31e3SAndroid Build Coastguard Worker  providing a set of indicators showing how close incoming IO requests
245*1a3d31e3SAndroid Build Coastguard Worker  are to each other. The second section shows D2D seek distances --
246*1a3d31e3SAndroid Build Coastguard Worker  providing a set of indicators showing how close the IO requests are
247*1a3d31e3SAndroid Build Coastguard Worker  that are handled by underlying drivers.
248*1a3d31e3SAndroid Build Coastguard Worker
249*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
250*1a3d31e3SAndroid Build Coastguard Worker      DEV | NSEEKS    MEAN MEDIAN | MODE
251*1a3d31e3SAndroid Build Coastguard Worker--------- | ------ ------- ------ | -------
252*1a3d31e3SAndroid Build Coastguard Worker( 68, 64) |  18178 19611.3      0 | 0(17522)
253*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
254*1a3d31e3SAndroid Build Coastguard Worker
255*1a3d31e3SAndroid Build Coastguard Worker  We have almost exclusively seen median and mode values of 0, indicating
256*1a3d31e3SAndroid Build Coastguard Worker  that seeks tend to have an equal amount of forward and backwards
257*1a3d31e3SAndroid Build Coastguard Worker  seeks. The larger the count for the mode in comparison to the total
258*1a3d31e3SAndroid Build Coastguard Worker  number of seeks is indicative as to how many IOs are coming out of
259*1a3d31e3SAndroid Build Coastguard Worker  the block IO layer in adjacent sectors. (Obviously, the higher this
260*1a3d31e3SAndroid Build Coastguard Worker  percentage, the better the underlying subsystems can handle them.)
261*1a3d31e3SAndroid Build Coastguard Worker
262*1a3d31e3SAndroid Build Coastguard Worker  \item[Request Queue Plug Information]
263*1a3d31e3SAndroid Build Coastguard Worker
264*1a3d31e3SAndroid Build Coastguard Worker  During normal operation, requests queues are \emph{plugged} and during
265*1a3d31e3SAndroid Build Coastguard Worker  such times the IO request queue elements are not able to be processed
266*1a3d31e3SAndroid Build Coastguard Worker  by underlying drivers. The next section shows how often the request
267*1a3d31e3SAndroid Build Coastguard Worker  queue was in such a state.
268*1a3d31e3SAndroid Build Coastguard Worker
269*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
270*1a3d31e3SAndroid Build Coastguard Worker      DEV | # Plugs # Timer Us  | % Time Q Plugged
271*1a3d31e3SAndroid Build Coastguard Worker--------- | ------- ----------  | ----------------
272*1a3d31e3SAndroid Build Coastguard Worker( 68, 64) |     833(         0) |   0.356511895%
273*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
274*1a3d31e3SAndroid Build Coastguard Worker
275*1a3d31e3SAndroid Build Coastguard Worker  There are two major reasons why request queues are unplugged, and both
276*1a3d31e3SAndroid Build Coastguard Worker  are represented in the above table.
277*1a3d31e3SAndroid Build Coastguard Worker
278*1a3d31e3SAndroid Build Coastguard Worker  \begin{enumerate}
279*1a3d31e3SAndroid Build Coastguard Worker    \item Explicit unplug request from some subsystem in the kernel.
280*1a3d31e3SAndroid Build Coastguard Worker
281*1a3d31e3SAndroid Build Coastguard Worker    \item Timed unplugs, due to a request queue exceeding some temporal
282*1a3d31e3SAndroid Build Coastguard Worker    limit for being plugged.
283*1a3d31e3SAndroid Build Coastguard Worker  \end{enumerate}
284*1a3d31e3SAndroid Build Coastguard Worker
285*1a3d31e3SAndroid Build Coastguard Worker  The total number of unplugs is equal to the number of plugs less the
286*1a3d31e3SAndroid Build Coastguard Worker  ones due to timer unplugs.
287*1a3d31e3SAndroid Build Coastguard Worker
288*1a3d31e3SAndroid Build Coastguard Worker  \item[IOs per Unplug \& Unplugs-due-to-timeout]
289*1a3d31e3SAndroid Build Coastguard Worker
290*1a3d31e3SAndroid Build Coastguard Worker  In this subsection one can see the average number of IOs on the request
291*1a3d31e3SAndroid Build Coastguard Worker  queue at the time of an unplug or unplug due to a timeout. The following
292*1a3d31e3SAndroid Build Coastguard Worker  sample shows a sample of both unplug sections:
293*1a3d31e3SAndroid Build Coastguard Worker
294*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
295*1a3d31e3SAndroid Build Coastguard Worker==================== Plug Information ====================
296*1a3d31e3SAndroid Build Coastguard Worker
297*1a3d31e3SAndroid Build Coastguard Worker       DEV |    # Plugs # Timer Us  | % Time Q Plugged
298*1a3d31e3SAndroid Build Coastguard Worker---------- | ---------- ----------  | ----------------
299*1a3d31e3SAndroid Build Coastguard Worker (  8,  0) |       1171(       123) |   0.280946640%
300*1a3d31e3SAndroid Build Coastguard Worker (  8, 32) |          4(         0) |   0.000325469%
301*1a3d31e3SAndroid Build Coastguard Worker---------- | ---------- ----------  | ----------------
302*1a3d31e3SAndroid Build Coastguard Worker   Overall |    # Plugs # Timer Us  | % Time Q Plugged
303*1a3d31e3SAndroid Build Coastguard Worker   Average |        587(        61) |   0.140636055%
304*1a3d31e3SAndroid Build Coastguard Worker
305*1a3d31e3SAndroid Build Coastguard Worker       DEV |    IOs/Unp   IOs/Unp(to)
306*1a3d31e3SAndroid Build Coastguard Worker---------- | ----------   ----------
307*1a3d31e3SAndroid Build Coastguard Worker (  8,  0) |        9.2          8.8
308*1a3d31e3SAndroid Build Coastguard Worker (  8, 32) |        2.5          0.0
309*1a3d31e3SAndroid Build Coastguard Worker---------- | ----------   ----------
310*1a3d31e3SAndroid Build Coastguard Worker       DEV |    IOs/Unp   IOs/Unp(to)
311*1a3d31e3SAndroid Build Coastguard Worker   Overall |        9.2          8.8
312*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
313*1a3d31e3SAndroid Build Coastguard Worker
314*1a3d31e3SAndroid Build Coastguard Worker  This table and the preceding one have to be considered together --
315*1a3d31e3SAndroid Build Coastguard Worker  in the sample output in the immediately preceding table one can see
316*1a3d31e3SAndroid Build Coastguard Worker  how the larger number of data values for device (8,0) dominates in
317*1a3d31e3SAndroid Build Coastguard Worker  the overall average.
318*1a3d31e3SAndroid Build Coastguard Worker
319*1a3d31e3SAndroid Build Coastguard Worker  \newpage\item[Active Requests At Q Information]
320*1a3d31e3SAndroid Build Coastguard Worker
321*1a3d31e3SAndroid Build Coastguard Worker  An important consideration when analyzing block IO schedulers is to
322*1a3d31e3SAndroid Build Coastguard Worker  know how many requests the scheduler has to work with. The metric
323*1a3d31e3SAndroid Build Coastguard Worker  provided in this section details how many requests (on average) were
324*1a3d31e3SAndroid Build Coastguard Worker  being held by the IO scheduler when an incoming IO request was being
325*1a3d31e3SAndroid Build Coastguard Worker  handled. To determine this, \texttt{btt} keeps track of how many Q
326*1a3d31e3SAndroid Build Coastguard Worker  requests came in, and subtracts requests that have been issued (D).
327*1a3d31e3SAndroid Build Coastguard Worker
328*1a3d31e3SAndroid Build Coastguard Worker  Here is a sample output of this sections:
329*1a3d31e3SAndroid Build Coastguard Worker
330*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
331*1a3d31e3SAndroid Build Coastguard Worker==================== Active Requests At Q Information ====================
332*1a3d31e3SAndroid Build Coastguard Worker
333*1a3d31e3SAndroid Build Coastguard Worker       DEV |  Avg Reqs @ Q
334*1a3d31e3SAndroid Build Coastguard Worker---------- | -------------
335*1a3d31e3SAndroid Build Coastguard Worker ( 65, 80) |          12.0
336*1a3d31e3SAndroid Build Coastguard Worker ( 65,240) |          16.9
337*1a3d31e3SAndroid Build Coastguard Worker...
338*1a3d31e3SAndroid Build Coastguard Worker ( 66,112) |          44.2
339*1a3d31e3SAndroid Build Coastguard Worker---------- | -------------
340*1a3d31e3SAndroid Build Coastguard Worker   Overall | Avgs Reqs @ Q
341*1a3d31e3SAndroid Build Coastguard Worker   Average |          17.4
342*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
343*1a3d31e3SAndroid Build Coastguard Worker
344*1a3d31e3SAndroid Build Coastguard Worker  \item[I/O Active Period Information]
345*1a3d31e3SAndroid Build Coastguard Worker
346*1a3d31e3SAndroid Build Coastguard Worker  In this subsection data is tabulated showing I/O activity on a
347*1a3d31e3SAndroid Build Coastguard Worker  per-device as well across all devices being traced. ``I/O activity''
348*1a3d31e3SAndroid Build Coastguard Worker  is defined as periods of time when the underlying device driver and
349*1a3d31e3SAndroid Build Coastguard Worker  device have at least one I/O to work upon. The values presented include:
350*1a3d31e3SAndroid Build Coastguard Worker
351*1a3d31e3SAndroid Build Coastguard Worker  \begin{description}
352*1a3d31e3SAndroid Build Coastguard Worker    \item[\# Live] Number of periods of ``liveness.''
353*1a3d31e3SAndroid Build Coastguard Worker    \item[Avg. Act] Average length of each period ov ``liveness.''
354*1a3d31e3SAndroid Build Coastguard Worker    \item[Avg. !Act] Aerage length of each non-active period.
355*1a3d31e3SAndroid Build Coastguard Worker    \item[\% Live] Percent of total time spent with the driver/device active.
356*1a3d31e3SAndroid Build Coastguard Worker  \end{description}
357*1a3d31e3SAndroid Build Coastguard Worker
358*1a3d31e3SAndroid Build Coastguard Worker  Here is a sample portion of this type of chart:
359*1a3d31e3SAndroid Build Coastguard Worker
360*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
361*1a3d31e3SAndroid Build Coastguard Worker       DEV |     # Live      Avg. Act     Avg. !Act % Live
362*1a3d31e3SAndroid Build Coastguard Worker---------- | ---------- ------------- ------------- ------
363*1a3d31e3SAndroid Build Coastguard Worker (  8, 16) |         29   0.909596815   0.094646263  90.87
364*1a3d31e3SAndroid Build Coastguard Worker (  8, 32) |        168   0.097848226   0.068231948  59.06
365*1a3d31e3SAndroid Build Coastguard Worker---------- | ---------- ------------- ------------- ------
366*1a3d31e3SAndroid Build Coastguard Worker Total Sys |         33   0.799808811   0.082334758  90.92
367*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
368*1a3d31e3SAndroid Build Coastguard Worker
369*1a3d31e3SAndroid Build Coastguard Worker  For information on generating data files that can be plotted with
370*1a3d31e3SAndroid Build Coastguard Worker  per-device and system-wide I/O activity see section~\ref{sec:o-Z}.
371*1a3d31e3SAndroid Build Coastguard Worker
372*1a3d31e3SAndroid Build Coastguard Worker\end{description}
373*1a3d31e3SAndroid Build Coastguard Worker
374*1a3d31e3SAndroid Build Coastguard Worker\newpage
375*1a3d31e3SAndroid Build Coastguard Worker\subsection*{\label{sec:detailed-data}Detailed Data}
376*1a3d31e3SAndroid Build Coastguard Worker
377*1a3d31e3SAndroid Build Coastguard Worker  In addition to the default sections output, if one supplies the
378*1a3d31e3SAndroid Build Coastguard Worker  \texttt{--all-data} or \texttt{-A} argument (see section~\ref{sec:o-A})
379*1a3d31e3SAndroid Build Coastguard Worker  to \texttt{btt} further sections are output:
380*1a3d31e3SAndroid Build Coastguard Worker
381*1a3d31e3SAndroid Build Coastguard Worker\begin{description}
382*1a3d31e3SAndroid Build Coastguard Worker  \item[Per Process] As traces are emitted, they are tagged with the
383*1a3d31e3SAndroid Build Coastguard Worker  process ID of the currently running thread in the kernel. The process
384*1a3d31e3SAndroid Build Coastguard Worker  names are also preserved, and mapped to the ID. For each of the parts
385*1a3d31e3SAndroid Build Coastguard Worker  of the time line discussed above on page~\pageref{tl-defs}, a chart is
386*1a3d31e3SAndroid Build Coastguard Worker  provided which breaks down the traces according to process ID (name).
387*1a3d31e3SAndroid Build Coastguard Worker
388*1a3d31e3SAndroid Build Coastguard Worker  One must be aware, however, that the process ID may not have anything
389*1a3d31e3SAndroid Build Coastguard Worker  to do with the originating IO. For example, if an application is
390*1a3d31e3SAndroid Build Coastguard Worker  doing buffered IO, then the actual submitted IOs will most likely
391*1a3d31e3SAndroid Build Coastguard Worker  come from some page buffer management daemon thread (like pdflush,
392*1a3d31e3SAndroid Build Coastguard Worker  or kjournald for example). Similarly, completion traces are rarely
393*1a3d31e3SAndroid Build Coastguard Worker  (if ever?) going to be associated with the process which submitted
394*1a3d31e3SAndroid Build Coastguard Worker  the IO in the first place.
395*1a3d31e3SAndroid Build Coastguard Worker
396*1a3d31e3SAndroid Build Coastguard Worker  Here is a sample portion of this type of chart, showing Q2Q times
397*1a3d31e3SAndroid Build Coastguard Worker  per process:
398*1a3d31e3SAndroid Build Coastguard Worker
399*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
400*1a3d31e3SAndroid Build Coastguard Worker          Q2Q         MIN         AVG         MAX       N
401*1a3d31e3SAndroid Build Coastguard Worker------------- ----------- ----------- ----------- -------
402*1a3d31e3SAndroid Build Coastguard Workermkfs.ext3     0.000000778 0.000009074 1.797176188 1899371
403*1a3d31e3SAndroid Build Coastguard Workermount         0.000000885 0.000672513 0.030638128      73
404*1a3d31e3SAndroid Build Coastguard Workerpdflush       0.000000790 0.000006752 0.247231307  179791
405*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
406*1a3d31e3SAndroid Build Coastguard Worker
407*1a3d31e3SAndroid Build Coastguard Worker  \item[Per Process Averages] The average columns from the above charts,
408*1a3d31e3SAndroid Build Coastguard Worker  are also presented in their own chart.
409*1a3d31e3SAndroid Build Coastguard Worker
410*1a3d31e3SAndroid Build Coastguard Worker  \item[Per Device] Similar to the per-process display, \texttt{btt}
411*1a3d31e3SAndroid Build Coastguard Worker  will also break down the various parts of an IOs time line based upon a
412*1a3d31e3SAndroid Build Coastguard Worker  per-device criteria. Here's a portion of this area, displayed showing
413*1a3d31e3SAndroid Build Coastguard Worker  the issued to complete times (D2C).
414*1a3d31e3SAndroid Build Coastguard Worker
415*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
416*1a3d31e3SAndroid Build Coastguard Worker      D2C         MIN         AVG         MAX      N
417*1a3d31e3SAndroid Build Coastguard Worker--------- ----------- ----------- ----------- ------
418*1a3d31e3SAndroid Build Coastguard Worker( 65, 80) 0.000140488 0.001076906 0.149739869 169112
419*1a3d31e3SAndroid Build Coastguard Worker( 65, 96) 0.000142762 0.001215221 0.173263182 155488
420*1a3d31e3SAndroid Build Coastguard Worker( 65,112) 0.000145221 0.001254966 0.124929936 165726
421*1a3d31e3SAndroid Build Coastguard Worker( 65,128) 0.000141896 0.001159596 0.775231052 169015
422*1a3d31e3SAndroid Build Coastguard Worker( 65,144) 0.000140832 0.001290985 0.211384698 210661
423*1a3d31e3SAndroid Build Coastguard Worker( 65,160) 0.000139915 0.001175554 0.073512063 133973
424*1a3d31e3SAndroid Build Coastguard Worker( 65,176) 0.000141254 0.001104870 0.073231310 145764
425*1a3d31e3SAndroid Build Coastguard Worker( 65,192) 0.000141453 0.001234460 0.167622507 140618
426*1a3d31e3SAndroid Build Coastguard Worker...
427*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
428*1a3d31e3SAndroid Build Coastguard Worker
429*1a3d31e3SAndroid Build Coastguard Worker  \item[Per Device Averages] The average columns from the above charts,
430*1a3d31e3SAndroid Build Coastguard Worker  are also presented in their own chart.
431*1a3d31e3SAndroid Build Coastguard Worker
432*1a3d31e3SAndroid Build Coastguard Worker  \item[Q2D Histogram] A display of histogram buckets for the Q to D times
433*1a3d31e3SAndroid Build Coastguard Worker  -- basically, from where an IO enters the block IO layer for a given
434*1a3d31e3SAndroid Build Coastguard Worker  device, and when it is dispatched. The buckets are arranged via the
435*1a3d31e3SAndroid Build Coastguard Worker  time in seconds, as in:
436*1a3d31e3SAndroid Build Coastguard Worker
437*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
438*1a3d31e3SAndroid Build Coastguard Worker==================== Q2D Histogram ====================
439*1a3d31e3SAndroid Build Coastguard Worker
440*1a3d31e3SAndroid Build Coastguard Worker       DEV | <.005 <.010 <.025 <.050 <.075 <.100 <.250 <.500 < 1.0 >=1.0
441*1a3d31e3SAndroid Build Coastguard Worker --------- | ===== ===== ===== ===== ===== ===== ===== ===== ===== =====
442*1a3d31e3SAndroid Build Coastguard Worker ( 66, 80) |  61.2   7.9  12.1   7.9   3.0   1.4   1.5   0.2   0.0   4.6
443*1a3d31e3SAndroid Build Coastguard Worker ( 65,192) |  42.3   5.0   8.7  30.0   8.9   3.0   1.8   0.1   0.0   0.1
444*1a3d31e3SAndroid Build Coastguard Worker ( 65,128) |  34.3   5.3   8.9  32.0   9.7   3.7   5.3   0.6   0.0   0.1
445*1a3d31e3SAndroid Build Coastguard Worker...
446*1a3d31e3SAndroid Build Coastguard Worker ( 65, 64) |  59.9   4.2   6.0  24.6   4.2   0.8   0.1   0.0   0.0   0.1
447*1a3d31e3SAndroid Build Coastguard Worker ( 66, 64) |  62.6   8.1  12.7   7.9   2.4   0.6   0.1   0.0   0.0   5.4
448*1a3d31e3SAndroid Build Coastguard Worker========== | ===== ===== ===== ===== ===== ===== ===== ===== ===== =====
449*1a3d31e3SAndroid Build Coastguard Worker       AVG |  52.9   6.2  10.0  20.1   5.3   1.7   1.4   0.2   0.0   2.1
450*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
451*1a3d31e3SAndroid Build Coastguard Worker
452*1a3d31e3SAndroid Build Coastguard Worker\end{description}
453*1a3d31e3SAndroid Build Coastguard Worker
454*1a3d31e3SAndroid Build Coastguard Worker\newpage\section{\label{sec:data-files}Data Files Output}
455*1a3d31e3SAndroid Build Coastguard Worker
456*1a3d31e3SAndroid Build Coastguard Worker  Besides the averages output by default, the following 5(+) files are also
457*1a3d31e3SAndroid Build Coastguard Worker  created with data points which may be plotted.
458*1a3d31e3SAndroid Build Coastguard Worker
459*1a3d31e3SAndroid Build Coastguard Worker\begin{description}
460*1a3d31e3SAndroid Build Coastguard Worker  \item[\emph{file}.dat] This file provides a notion of \emph{activity}
461*1a3d31e3SAndroid Build Coastguard Worker  for the system, devices and processes. The details of this file are
462*1a3d31e3SAndroid Build Coastguard Worker  provided in section~\ref{sec:activity}.
463*1a3d31e3SAndroid Build Coastguard Worker
464*1a3d31e3SAndroid Build Coastguard Worker  \item[\emph{file}\_qhist.dat] Provides histogram data for the size of
465*1a3d31e3SAndroid Build Coastguard Worker  incoming IO requests, for more information see section~\ref{sec:qhist}.
466*1a3d31e3SAndroid Build Coastguard Worker
467*1a3d31e3SAndroid Build Coastguard Worker  \item[\emph{file}\_dhist.dat] Provides histogram data for the size
468*1a3d31e3SAndroid Build Coastguard Worker  of IO requests submitted to lower layer drivers, for more information
469*1a3d31e3SAndroid Build Coastguard Worker  see section~\ref{sec:dhist}.
470*1a3d31e3SAndroid Build Coastguard Worker
471*1a3d31e3SAndroid Build Coastguard Worker  \item[\emph{file}\_mbps\_fp.dat] Provides a set of data for
472*1a3d31e3SAndroid Build Coastguard Worker  mb-per-second values each second
473*1a3d31e3SAndroid Build Coastguard Worker  - for more information see section~\ref{sec:rstat}.
474*1a3d31e3SAndroid Build Coastguard Worker
475*1a3d31e3SAndroid Build Coastguard Worker  \item[\emph{file}\_iops\_fp.dat] Provides a set of data for
476*1a3d31e3SAndroid Build Coastguard Worker  I/Os-per-second values each second
477*1a3d31e3SAndroid Build Coastguard Worker  - for more information see section~\ref{sec:rstat}.
478*1a3d31e3SAndroid Build Coastguard Worker
479*1a3d31e3SAndroid Build Coastguard Worker\end{description}
480*1a3d31e3SAndroid Build Coastguard Worker
481*1a3d31e3SAndroid Build Coastguard Worker  In addition to the default data files output, there are optional data
482*1a3d31e3SAndroid Build Coastguard Worker  files which can be generated by btt. These include:
483*1a3d31e3SAndroid Build Coastguard Worker
484*1a3d31e3SAndroid Build Coastguard Worker  \begin{description}
485*1a3d31e3SAndroid Build Coastguard Worker    \item[subset of \texttt{.avg} data, easily parsed ] When the
486*1a3d31e3SAndroid Build Coastguard Worker    \texttt{-X} option is specified \emph{and} the \texttt{-o} has also
487*1a3d31e3SAndroid Build Coastguard Worker    been specified, then a subset of the data produced by default is
488*1a3d31e3SAndroid Build Coastguard Worker    copied to another file that is \emph{more easily parsed.} Refer to
489*1a3d31e3SAndroid Build Coastguard Worker    section~\ref{sec:o-X} for full details.
490*1a3d31e3SAndroid Build Coastguard Worker
491*1a3d31e3SAndroid Build Coastguard Worker    \item[iostat] iostat-like data can be distilled by btt, and is
492*1a3d31e3SAndroid Build Coastguard Worker    described in section~\ref{sec:iostat}.
493*1a3d31e3SAndroid Build Coastguard Worker
494*1a3d31e3SAndroid Build Coastguard Worker    \item[per IO detail] Each and every IO traced can be output in a form
495*1a3d31e3SAndroid Build Coastguard Worker    that shows each of the IO components on consecutive lines (rather
496*1a3d31e3SAndroid Build Coastguard Worker    than grepping through a blkparse output file for example). The
497*1a3d31e3SAndroid Build Coastguard Worker    details on this file is included in section~\ref{sec:per-io}.
498*1a3d31e3SAndroid Build Coastguard Worker
499*1a3d31e3SAndroid Build Coastguard Worker    \item[iostat] Latency information -- both Q2d, D2c and Q2C --
500*1a3d31e3SAndroid Build Coastguard Worker    on a per-IO basis can be generated. These are described in
501*1a3d31e3SAndroid Build Coastguard Worker    section~\ref{sec:lat}.
502*1a3d31e3SAndroid Build Coastguard Worker
503*1a3d31e3SAndroid Build Coastguard Worker    \item[seek details] A set of data files containing all IO-to-IO
504*1a3d31e3SAndroid Build Coastguard Worker    sector differences can be output, with details found in
505*1a3d31e3SAndroid Build Coastguard Worker    section~\ref{sec:seek}.
506*1a3d31e3SAndroid Build Coastguard Worker
507*1a3d31e3SAndroid Build Coastguard Worker    \item[unplug histogram details] A data file per device containing
508*1a3d31e3SAndroid Build Coastguard Worker    histogram output for the amount of IOs released at unplug time.
509*1a3d31e3SAndroid Build Coastguard Worker    Section~\ref{sec:o-u} has more details.
510*1a3d31e3SAndroid Build Coastguard Worker  \end{description}
511*1a3d31e3SAndroid Build Coastguard Worker
512*1a3d31e3SAndroid Build Coastguard Worker\newpage\section{\label{sec:activity}Activity Data File}
513*1a3d31e3SAndroid Build Coastguard Worker
514*1a3d31e3SAndroid Build Coastguard Worker  The activity data file contains a series of data values that indicate
515*1a3d31e3SAndroid Build Coastguard Worker  those periods of time when queue and complete traces are being
516*1a3d31e3SAndroid Build Coastguard Worker  processed.  The values happen to be in a format easily handled by
517*1a3d31e3SAndroid Build Coastguard Worker  xmgrace\footnote{\texttt{http://plasma-gate.weizmann.ac.il/Grace/}
518*1a3d31e3SAndroid Build Coastguard Worker  ``Grace is a WYSIWYG 2D plotting tool for the X Window System and
519*1a3d31e3SAndroid Build Coastguard Worker  M*tif.''}, but is easy to parse for other plotting and/or analysis
520*1a3d31e3SAndroid Build Coastguard Worker  programs.
521*1a3d31e3SAndroid Build Coastguard Worker
522*1a3d31e3SAndroid Build Coastguard Worker  The file is split into pairs of sets of data points, where each pair
523*1a3d31e3SAndroid Build Coastguard Worker  contains a set of queue activity and a set of completion activity. The
524*1a3d31e3SAndroid Build Coastguard Worker  points are presented with the first column (X values) being the time
525*1a3d31e3SAndroid Build Coastguard Worker  (in seconds), and the second column (Y values) providing an on/off
526*1a3d31e3SAndroid Build Coastguard Worker  type of setting. For each pair, the Y values have two settings off
527*1a3d31e3SAndroid Build Coastguard Worker  (low) and on (high). For example, here is a snippet of a file showing
528*1a3d31e3SAndroid Build Coastguard Worker  some Q activity:
529*1a3d31e3SAndroid Build Coastguard Worker
530*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
531*1a3d31e3SAndroid Build Coastguard Worker# Total System
532*1a3d31e3SAndroid Build Coastguard Worker#     Total System : q activity
533*1a3d31e3SAndroid Build Coastguard Worker0.000000000   0.0
534*1a3d31e3SAndroid Build Coastguard Worker0.000000000   0.4
535*1a3d31e3SAndroid Build Coastguard Worker0.000070381   0.4
536*1a3d31e3SAndroid Build Coastguard Worker0.000070381   0.0
537*1a3d31e3SAndroid Build Coastguard Worker1.023482637   0.0
538*1a3d31e3SAndroid Build Coastguard Worker1.023482637   0.4
539*1a3d31e3SAndroid Build Coastguard Worker6.998746618   0.4
540*1a3d31e3SAndroid Build Coastguard Worker6.998746618   0.0
541*1a3d31e3SAndroid Build Coastguard Worker7.103336799   0.0
542*1a3d31e3SAndroid Build Coastguard Worker7.103336799   0.4
543*1a3d31e3SAndroid Build Coastguard Worker17.235419786   0.4
544*1a3d31e3SAndroid Build Coastguard Worker17.235419786   0.0
545*1a3d31e3SAndroid Build Coastguard Worker26.783361447   0.0
546*1a3d31e3SAndroid Build Coastguard Worker26.783361447   0.4
547*1a3d31e3SAndroid Build Coastguard Worker26.832454929   0.4
548*1a3d31e3SAndroid Build Coastguard Worker26.832454929   0.0
549*1a3d31e3SAndroid Build Coastguard Worker28.870431266   0.0
550*1a3d31e3SAndroid Build Coastguard Worker28.870431266   0.4
551*1a3d31e3SAndroid Build Coastguard Worker28.870431266   0.4
552*1a3d31e3SAndroid Build Coastguard Worker28.870431266   0.0
553*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
554*1a3d31e3SAndroid Build Coastguard Worker
555*1a3d31e3SAndroid Build Coastguard Worker  What this indicates is that there was q activity for the system
556*1a3d31e3SAndroid Build Coastguard Worker  from 0.000000000 through 0.000070381, but was inactive from there to
557*1a3d31e3SAndroid Build Coastguard Worker  1.023482637, and so on. Section~\ref{sec:o-d} contains details on how
558*1a3d31e3SAndroid Build Coastguard Worker  to adjust btt's notion of what constitutes activity.
559*1a3d31e3SAndroid Build Coastguard Worker
560*1a3d31e3SAndroid Build Coastguard Worker  The pairs are arranged as follows:
561*1a3d31e3SAndroid Build Coastguard Worker
562*1a3d31e3SAndroid Build Coastguard Worker  \begin{itemize}
563*1a3d31e3SAndroid Build Coastguard Worker    \item First there is the total system activity -- meaning activity
564*1a3d31e3SAndroid Build Coastguard Worker    in either queue or completion traces across all devices.
565*1a3d31e3SAndroid Build Coastguard Worker
566*1a3d31e3SAndroid Build Coastguard Worker    \item Next comes per-device activity information -- for each device
567*1a3d31e3SAndroid Build Coastguard Worker    being traced, that request queues Q and C traces are presented.
568*1a3d31e3SAndroid Build Coastguard Worker
569*1a3d31e3SAndroid Build Coastguard Worker    \item Last we present pairs per-process.
570*1a3d31e3SAndroid Build Coastguard Worker  \end{itemize}
571*1a3d31e3SAndroid Build Coastguard Worker
572*1a3d31e3SAndroid Build Coastguard Worker  Using this, one is then able to plot regions of activity versus
573*1a3d31e3SAndroid Build Coastguard Worker  inactivity -- and one can gather a sense of deltas between the queueing
574*1a3d31e3SAndroid Build Coastguard Worker  of IOs and when they are completed. Figure~\ref{fig:activity} shows
575*1a3d31e3SAndroid Build Coastguard Worker  a very simplistic chart showing some activity:
576*1a3d31e3SAndroid Build Coastguard Worker
577*1a3d31e3SAndroid Build Coastguard Worker  \begin{figure}[hb]
578*1a3d31e3SAndroid Build Coastguard Worker  \leavevmode\centering
579*1a3d31e3SAndroid Build Coastguard Worker  \epsfig{file=activity.eps,width=4.5in}
580*1a3d31e3SAndroid Build Coastguard Worker  \caption{\label{fig:activity}Simple Activity Chart}
581*1a3d31e3SAndroid Build Coastguard Worker  \end{figure}
582*1a3d31e3SAndroid Build Coastguard Worker
583*1a3d31e3SAndroid Build Coastguard Worker  When the black line (system Q activity) is \emph{high}, then the system
584*1a3d31e3SAndroid Build Coastguard Worker  is seeing relatively continuous incoming queues. Conversely, when it is
585*1a3d31e3SAndroid Build Coastguard Worker  low, it represents an extended period of time where no queue requests
586*1a3d31e3SAndroid Build Coastguard Worker  were coming in. Similarly for the red line and C activity.
587*1a3d31e3SAndroid Build Coastguard Worker
588*1a3d31e3SAndroid Build Coastguard Worker\newpage\section{\label{sec:hist}Histogram Data Files}
589*1a3d31e3SAndroid Build Coastguard Worker
590*1a3d31e3SAndroid Build Coastguard Worker  The histogram data files provide information concerning incoming and
591*1a3d31e3SAndroid Build Coastguard Worker  outgoing IO sizes (in blocks). For simplicity, the histogram buckets
592*1a3d31e3SAndroid Build Coastguard Worker  are one-for-one for sizes up to 1,024 blocks in the IO, and then a
593*1a3d31e3SAndroid Build Coastguard Worker  single bucket for all sizes greater than or equal to 1,024 blocks.
594*1a3d31e3SAndroid Build Coastguard Worker
595*1a3d31e3SAndroid Build Coastguard Worker  The files are again in grace-friendly format, with the first set
596*1a3d31e3SAndroid Build Coastguard Worker  containing data for the first 1,023 buckets, and a separate set
597*1a3d31e3SAndroid Build Coastguard Worker  representing sizes $\ge 1024$ blocks. (This is done so that one can
598*1a3d31e3SAndroid Build Coastguard Worker  easily use a separate formatting specification for the latter set.)
599*1a3d31e3SAndroid Build Coastguard Worker
600*1a3d31e3SAndroid Build Coastguard Worker  The first column (X values) is the various IO sizes, and the second
601*1a3d31e3SAndroid Build Coastguard Worker  column (Y values) represents the number of IOs of that size.
602*1a3d31e3SAndroid Build Coastguard Worker
603*1a3d31e3SAndroid Build Coastguard Worker\subsection*{\label{sec:qhist}Q Histogram Data File}
604*1a3d31e3SAndroid Build Coastguard Worker
605*1a3d31e3SAndroid Build Coastguard Worker  Figure~\ref{fig:qhist} is a sample graph generated from data used during
606*1a3d31e3SAndroid Build Coastguard Worker  some real-world analysis\footnote{Note the logarithmic nature of the
607*1a3d31e3SAndroid Build Coastguard Worker  Y axis for this chart.}. With the visual representation provided by
608*1a3d31e3SAndroid Build Coastguard Worker  this, one can quickly discern some different characteristics between
609*1a3d31e3SAndroid Build Coastguard Worker  the 3 runs -- in particular, one can see that there is only a single
610*1a3d31e3SAndroid Build Coastguard Worker  red point (representing 8 blocks per IO), whereas the other two had
611*1a3d31e3SAndroid Build Coastguard Worker  multiple data points greater than 8 blocks.
612*1a3d31e3SAndroid Build Coastguard Worker
613*1a3d31e3SAndroid Build Coastguard Worker  \begin{figure}[hb]
614*1a3d31e3SAndroid Build Coastguard Worker  \leavevmode\centering
615*1a3d31e3SAndroid Build Coastguard Worker  \epsfig{file=qhist.eps,width=4.5in}
616*1a3d31e3SAndroid Build Coastguard Worker  \caption{\label{fig:qhist}Q Histogram}
617*1a3d31e3SAndroid Build Coastguard Worker  \end{figure}
618*1a3d31e3SAndroid Build Coastguard Worker
619*1a3d31e3SAndroid Build Coastguard Worker\subsection*{\label{sec:dhist}D Histogram Data File}
620*1a3d31e3SAndroid Build Coastguard Worker
621*1a3d31e3SAndroid Build Coastguard Worker  Figure~\ref{fig:dhist} is a sample graph generated from data used during
622*1a3d31e3SAndroid Build Coastguard Worker  some real-world analysis\footnote{Note the logarithmic nature of the
623*1a3d31e3SAndroid Build Coastguard Worker  Y axis for this chart.}. Again, visually, one can see that the black
624*1a3d31e3SAndroid Build Coastguard Worker  and blue dots are somewhat similar below about 192 blocks per IO going
625*1a3d31e3SAndroid Build Coastguard Worker  out. And then one can make the broad generalization of higher reds,
626*1a3d31e3SAndroid Build Coastguard Worker  lower blues and blacks in the middle.
627*1a3d31e3SAndroid Build Coastguard Worker
628*1a3d31e3SAndroid Build Coastguard Worker  \begin{figure}[hb]
629*1a3d31e3SAndroid Build Coastguard Worker  \leavevmode\centering
630*1a3d31e3SAndroid Build Coastguard Worker  \epsfig{file=dhist.eps,width=4.5in}
631*1a3d31e3SAndroid Build Coastguard Worker  \caption{\label{fig:dhist}D Histogram}
632*1a3d31e3SAndroid Build Coastguard Worker  \end{figure}
633*1a3d31e3SAndroid Build Coastguard Worker
634*1a3d31e3SAndroid Build Coastguard Worker\newpage\section{\label{sec:rstat}Running Stats Files}
635*1a3d31e3SAndroid Build Coastguard Worker
636*1a3d31e3SAndroid Build Coastguard WorkerThere are two files produced for each of all devices being traced
637*1a3d31e3SAndroid Build Coastguard Worker(prefixed with \emph{sys\_}) and per-device (prefixed with the device
638*1a3d31e3SAndroid Build Coastguard Workeridentifier).
639*1a3d31e3SAndroid Build Coastguard Worker
640*1a3d31e3SAndroid Build Coastguard WorkerThe two files are for reporting I/O rate (I/Os per second - name ends
641*1a3d31e3SAndroid Build Coastguard Workerwith \texttt{iops\_fp.dat}) and throughput (MiB per second - name ends
642*1a3d31e3SAndroid Build Coastguard Workerwith \texttt{mbps\_fp.dat}).
643*1a3d31e3SAndroid Build Coastguard Worker
644*1a3d31e3SAndroid Build Coastguard WorkerThe data in the files has two columns:\smallskip
645*1a3d31e3SAndroid Build Coastguard Worker
646*1a3d31e3SAndroid Build Coastguard Worker\begin{tabular}{lll}
647*1a3d31e3SAndroid Build Coastguard Worker\textbf{File Type} & \textbf{X values} & \textbf{Y values}\\\hline
648*1a3d31e3SAndroid Build Coastguard Worker\textbf{iops} & Runtime (seconds) & I/Os per second\\\hline
649*1a3d31e3SAndroid Build Coastguard Worker\textbf{mbps} & Runtime (seconds) & MiB per second\\\hline
650*1a3d31e3SAndroid Build Coastguard Worker\end{tabular}
651*1a3d31e3SAndroid Build Coastguard Worker
652*1a3d31e3SAndroid Build Coastguard WorkerAs an example:
653*1a3d31e3SAndroid Build Coastguard Worker
654*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
655*1a3d31e3SAndroid Build Coastguard Worker# ls *fp.dat
656*1a3d31e3SAndroid Build Coastguard Worker008,064_iops_fp.dat
657*1a3d31e3SAndroid Build Coastguard Worker008,064_mbps_fp.dat
658*1a3d31e3SAndroid Build Coastguard Workersys_iops_fp.dat
659*1a3d31e3SAndroid Build Coastguard Workersys_mbps_fp.dat
660*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
661*1a3d31e3SAndroid Build Coastguard Worker
662*1a3d31e3SAndroid Build Coastguard WorkerThese can be plotted using various tools (e.g., xmgrace as in
663*1a3d31e3SAndroid Build Coastguard Workerfigure~\ref{fig:rstats}).
664*1a3d31e3SAndroid Build Coastguard Worker
665*1a3d31e3SAndroid Build Coastguard Worker  \begin{figure}[b!]
666*1a3d31e3SAndroid Build Coastguard Worker  \leavevmode\centering
667*1a3d31e3SAndroid Build Coastguard Worker  \epsfig{file=rstats.eps,width=4.5in}
668*1a3d31e3SAndroid Build Coastguard Worker  \caption{\label{fig:rstats}Running Stats}
669*1a3d31e3SAndroid Build Coastguard Worker  \end{figure}
670*1a3d31e3SAndroid Build Coastguard Worker
671*1a3d31e3SAndroid Build Coastguard Worker\newpage\section{\label{sec:iostat}iostat Data File}
672*1a3d31e3SAndroid Build Coastguard Worker  \texttt{btt} attempts to produce the results from running an
673*1a3d31e3SAndroid Build Coastguard Worker  \texttt{iostat -x} command in parallel with the system as it is being
674*1a3d31e3SAndroid Build Coastguard Worker  traced. The fields (columns) generated by the \texttt{--iostat} or
675*1a3d31e3SAndroid Build Coastguard Worker  \texttt{-I} option can be seen from the following output snippet --
676*1a3d31e3SAndroid Build Coastguard Worker  note that the line has been split to fit on the printed page:
677*1a3d31e3SAndroid Build Coastguard Worker
678*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
679*1a3d31e3SAndroid Build Coastguard WorkerDevice:       rrqm/s   wrqm/s     r/s     w/s    rsec/s    wsec/s
680*1a3d31e3SAndroid Build Coastguard Worker             rkB/s     wkB/s avgrq-sz avgqu-sz   await   svctm  %util   Stamp
681*1a3d31e3SAndroid Build Coastguard Worker...
682*1a3d31e3SAndroid Build Coastguard Worker(  8, 16)       0.00     0.00    0.00 1005.30      0.00 152806.36
683*1a3d31e3SAndroid Build Coastguard Worker              0.00  76403.18   152.00    31.00    0.00    0.00   0.00   71.79
684*1a3d31e3SAndroid Build Coastguard Worker...
685*1a3d31e3SAndroid Build Coastguard Worker(  8, 16)       1.02     5.80    0.34    1.07      4.03     55.62
686*1a3d31e3SAndroid Build Coastguard Worker              2.02     27.81    42.13     0.61    0.00   21.90   0.00   TOTAL
687*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
688*1a3d31e3SAndroid Build Coastguard Worker
689*1a3d31e3SAndroid Build Coastguard Worker  Note that the STAMP field contains the runtime (in seconds) for that
690*1a3d31e3SAndroid Build Coastguard Worker  line of data.
691*1a3d31e3SAndroid Build Coastguard Worker
692*1a3d31e3SAndroid Build Coastguard Worker\newpage\section{\label{sec:per-io}Per-IO Data File}
693*1a3d31e3SAndroid Build Coastguard Worker
694*1a3d31e3SAndroid Build Coastguard Worker  \texttt{btt} can produce a text file containing time line data for each
695*1a3d31e3SAndroid Build Coastguard Worker  IO processed. The time line data contains rudimentary information for
696*1a3d31e3SAndroid Build Coastguard Worker  the following stages:
697*1a3d31e3SAndroid Build Coastguard Worker
698*1a3d31e3SAndroid Build Coastguard Worker  \begin{itemize}
699*1a3d31e3SAndroid Build Coastguard Worker    \item queue traces
700*1a3d31e3SAndroid Build Coastguard Worker    \item get request traces
701*1a3d31e3SAndroid Build Coastguard Worker    \item insert traces
702*1a3d31e3SAndroid Build Coastguard Worker    \item merge traces
703*1a3d31e3SAndroid Build Coastguard Worker    \item issue traces
704*1a3d31e3SAndroid Build Coastguard Worker    \item completion traces
705*1a3d31e3SAndroid Build Coastguard Worker    \item remap traces
706*1a3d31e3SAndroid Build Coastguard Worker  \end{itemize}
707*1a3d31e3SAndroid Build Coastguard Worker
708*1a3d31e3SAndroid Build Coastguard Worker  The \emph{--per-io-dump} or \emph{-p} option triggers this behavior,
709*1a3d31e3SAndroid Build Coastguard Worker  and will produce a file containing streams of IOs (separated by blank
710*1a3d31e3SAndroid Build Coastguard Worker  spaces). As an example, here is a snippet of 4 IOs that were merged
711*1a3d31e3SAndroid Build Coastguard Worker  together, you will note there are 3 merged IOs, and 1 inserted in the
712*1a3d31e3SAndroid Build Coastguard Worker  stream. The issue and completion traces are replicated per IO.
713*1a3d31e3SAndroid Build Coastguard Worker
714*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
715*1a3d31e3SAndroid Build Coastguard Worker 66,0  :     0.763283556 Q       6208+8
716*1a3d31e3SAndroid Build Coastguard Worker             0.763300157 I       6208+8
717*1a3d31e3SAndroid Build Coastguard Worker             0.763296365 G       6208+8
718*1a3d31e3SAndroid Build Coastguard Worker             0.763338848 D       6208+32
719*1a3d31e3SAndroid Build Coastguard Worker             0.763705760 C       6208+32
720*1a3d31e3SAndroid Build Coastguard Worker
721*1a3d31e3SAndroid Build Coastguard Worker 66,0  :     0.763314550 Q       6224+8
722*1a3d31e3SAndroid Build Coastguard Worker             0.763315341 M       6224+8
723*1a3d31e3SAndroid Build Coastguard Worker             0.763338848 D       6208+32
724*1a3d31e3SAndroid Build Coastguard Worker             0.763705760 C       6208+32
725*1a3d31e3SAndroid Build Coastguard Worker
726*1a3d31e3SAndroid Build Coastguard Worker 66,0  :     0.763321010 Q       6232+8
727*1a3d31e3SAndroid Build Coastguard Worker             0.763321775 M       6232+8
728*1a3d31e3SAndroid Build Coastguard Worker             0.763338848 D       6208+32
729*1a3d31e3SAndroid Build Coastguard Worker             0.763705760 C       6208+32
730*1a3d31e3SAndroid Build Coastguard Worker
731*1a3d31e3SAndroid Build Coastguard Worker 65,240:     0.763244173 Q       6216+8
732*1a3d31e3SAndroid Build Coastguard Worker             0.763244974 M       6216+8
733*1a3d31e3SAndroid Build Coastguard Worker             0.763374288 D       6208+32
734*1a3d31e3SAndroid Build Coastguard Worker             0.763826610 C       6208+32
735*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
736*1a3d31e3SAndroid Build Coastguard Worker
737*1a3d31e3SAndroid Build Coastguard Worker  The columns provide the following information:
738*1a3d31e3SAndroid Build Coastguard Worker
739*1a3d31e3SAndroid Build Coastguard Worker  \begin{enumerate}
740*1a3d31e3SAndroid Build Coastguard Worker    \item Device major/minor.
741*1a3d31e3SAndroid Build Coastguard Worker
742*1a3d31e3SAndroid Build Coastguard Worker    \item Time of the trace (seconds from the start of the run)
743*1a3d31e3SAndroid Build Coastguard Worker
744*1a3d31e3SAndroid Build Coastguard Worker    \item Trace type
745*1a3d31e3SAndroid Build Coastguard Worker
746*1a3d31e3SAndroid Build Coastguard Worker    \item start block + number of blocks
747*1a3d31e3SAndroid Build Coastguard Worker  \end{enumerate}
748*1a3d31e3SAndroid Build Coastguard Worker
749*1a3d31e3SAndroid Build Coastguard Worker\newpage\section{\label{sec:lat}\label{sec:lat-q2d}\label{sec:lat-q2c}\label{sec:lat-d2c}Latency Data Files}
750*1a3d31e3SAndroid Build Coastguard Worker
751*1a3d31e3SAndroid Build Coastguard Worker  The latency data files which can be optionally produced by \texttt{btt}
752*1a3d31e3SAndroid Build Coastguard Worker  provide per-IO latency information, one for queue time (Q2D), one
753*1a3d31e3SAndroid Build Coastguard Worker  for total IO time (Q2C) and one for latencies induced by lower layer
754*1a3d31e3SAndroid Build Coastguard Worker  drivers and devices (D2C).
755*1a3d31e3SAndroid Build Coastguard Worker
756*1a3d31e3SAndroid Build Coastguard Worker  In both cases, the first column (X values) represent runtime (seconds),
757*1a3d31e3SAndroid Build Coastguard Worker  while the second column (Y values) shows the actual latency for a
758*1a3d31e3SAndroid Build Coastguard Worker  command at that time (either Q2D, D2C or Q2C).
759*1a3d31e3SAndroid Build Coastguard Worker
760*1a3d31e3SAndroid Build Coastguard Worker\newpage\section{\label{sec:seek}Seek Data Files}
761*1a3d31e3SAndroid Build Coastguard Worker
762*1a3d31e3SAndroid Build Coastguard Worker  \texttt{btt} can also produce two data files containing all IO-to-IO sector
763*1a3d31e3SAndroid Build Coastguard Worker  deltas, providing seek information which can then be plotted. The
764*1a3d31e3SAndroid Build Coastguard Worker  produced data file contains 3 sets of data:
765*1a3d31e3SAndroid Build Coastguard Worker
766*1a3d31e3SAndroid Build Coastguard Worker  \begin{enumerate}
767*1a3d31e3SAndroid Build Coastguard Worker     \item Combined data -- all read and write IOs
768*1a3d31e3SAndroid Build Coastguard Worker
769*1a3d31e3SAndroid Build Coastguard Worker     \item Read data -- just seek deltas for reads
770*1a3d31e3SAndroid Build Coastguard Worker
771*1a3d31e3SAndroid Build Coastguard Worker     \item Write data -- just seek deltas for writes
772*1a3d31e3SAndroid Build Coastguard Worker  \end{enumerate}
773*1a3d31e3SAndroid Build Coastguard Worker
774*1a3d31e3SAndroid Build Coastguard Worker  The format of the output file names is to have the name generated by
775*1a3d31e3SAndroid Build Coastguard Worker  the following fields separated by underscores (\texttt{\_}):
776*1a3d31e3SAndroid Build Coastguard Worker
777*1a3d31e3SAndroid Build Coastguard Worker  \begin{itemize}
778*1a3d31e3SAndroid Build Coastguard Worker    \item The prefix provided as the argument to the \texttt{-s} option.
779*1a3d31e3SAndroid Build Coastguard Worker    \item The major and minor numbers of the device separated by a comma.
780*1a3d31e3SAndroid Build Coastguard Worker    \item The string \texttt{q2q} or \texttt{d2d}, indicating the Q2Q or
781*1a3d31e3SAndroid Build Coastguard Worker          D2D seeks, respectively.
782*1a3d31e3SAndroid Build Coastguard Worker    \item One of the following characters:
783*1a3d31e3SAndroid Build Coastguard Worker    	\begin{description}
784*1a3d31e3SAndroid Build Coastguard Worker	  \item[r] For read (device to system) IOs
785*1a3d31e3SAndroid Build Coastguard Worker	  \item[w] For write (system to device) IOs
786*1a3d31e3SAndroid Build Coastguard Worker	  \item[c] Combined -- both read and write IOs
787*1a3d31e3SAndroid Build Coastguard Worker	\end{description}
788*1a3d31e3SAndroid Build Coastguard Worker  \end{itemize}
789*1a3d31e3SAndroid Build Coastguard Worker
790*1a3d31e3SAndroid Build Coastguard Worker  An example name would be after specifying \texttt{-s seek} would be:
791*1a3d31e3SAndroid Build Coastguard Worker  \texttt{seek\_065,048\_q2q\_w.dat}.
792*1a3d31e3SAndroid Build Coastguard Worker
793*1a3d31e3SAndroid Build Coastguard Worker  The format of the data is to have the runtime values (seconds since
794*1a3d31e3SAndroid Build Coastguard Worker  the start of the run) in column 1 (X values); and the difference in
795*1a3d31e3SAndroid Build Coastguard Worker  sectors from the previous IO in column 2 (Y values). Here is a snippet
796*1a3d31e3SAndroid Build Coastguard Worker  of the first few items from a file:
797*1a3d31e3SAndroid Build Coastguard Worker
798*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
799*1a3d31e3SAndroid Build Coastguard Worker# Combined
800*1a3d31e3SAndroid Build Coastguard Worker     0.000034733           35283790.0
801*1a3d31e3SAndroid Build Coastguard Worker     0.000106453           35283790.0
802*1a3d31e3SAndroid Build Coastguard Worker     0.005239009           35283950.0
803*1a3d31e3SAndroid Build Coastguard Worker     0.006968575           35283886.0
804*1a3d31e3SAndroid Build Coastguard Worker     0.007218709           35283694.0
805*1a3d31e3SAndroid Build Coastguard Worker     0.012145393           35283566.0
806*1a3d31e3SAndroid Build Coastguard Worker     0.014980835          -35848914.0
807*1a3d31e3SAndroid Build Coastguard Worker     0.024239323          -35848914.0
808*1a3d31e3SAndroid Build Coastguard Worker     0.024249402          -35848914.0
809*1a3d31e3SAndroid Build Coastguard Worker     0.025707095          -35849072.0
810*1a3d31e3SAndroid Build Coastguard Worker     ...
811*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
812*1a3d31e3SAndroid Build Coastguard Worker
813*1a3d31e3SAndroid Build Coastguard Worker  Figure~\ref{fig:seek} shows a simple graph that can be produced which
814*1a3d31e3SAndroid Build Coastguard Worker  provides visual details concerning seek patterns.
815*1a3d31e3SAndroid Build Coastguard Worker
816*1a3d31e3SAndroid Build Coastguard Worker  \begin{figure}[h!]
817*1a3d31e3SAndroid Build Coastguard Worker  \leavevmode\centering
818*1a3d31e3SAndroid Build Coastguard Worker  \epsfig{file=seek.eps,width=4.5in}
819*1a3d31e3SAndroid Build Coastguard Worker  \caption{\label{fig:seek}Seek Chart}
820*1a3d31e3SAndroid Build Coastguard Worker  \end{figure}
821*1a3d31e3SAndroid Build Coastguard Worker  \FloatBarrier
822*1a3d31e3SAndroid Build Coastguard Worker
823*1a3d31e3SAndroid Build Coastguard Worker  The seek difference is calculated in one of two ways:
824*1a3d31e3SAndroid Build Coastguard Worker
825*1a3d31e3SAndroid Build Coastguard Worker  \begin{description}
826*1a3d31e3SAndroid Build Coastguard Worker    \item[default] By default, the seek distance is calculated as the
827*1a3d31e3SAndroid Build Coastguard Worker    \emph{closest} distance between the previous IO and this IO. The
828*1a3d31e3SAndroid Build Coastguard Worker    concept of \emph{closeness} means that it could either be the
829*1a3d31e3SAndroid Build Coastguard Worker    \emph{end} of the previous IO and the beginning of the next, or the
830*1a3d31e3SAndroid Build Coastguard Worker    end of this IO and the start of the next.
831*1a3d31e3SAndroid Build Coastguard Worker
832*1a3d31e3SAndroid Build Coastguard Worker    \item[\texttt{-a}] If the \texttt{-a} or \texttt{--seek-absolute}
833*1a3d31e3SAndroid Build Coastguard Worker    option is specified, then the seek distance is simply the difference
834*1a3d31e3SAndroid Build Coastguard Worker    between the end of the previous IO and the start of this IO.
835*1a3d31e3SAndroid Build Coastguard Worker  \end{description}
836*1a3d31e3SAndroid Build Coastguard Worker
837*1a3d31e3SAndroid Build Coastguard Worker\newpage\subsection{\label{sec:sps-spec}Seeks Per Second}
838*1a3d31e3SAndroid Build Coastguard Worker
839*1a3d31e3SAndroid Build Coastguard Worker  When the \texttt{-m} option provides a name, Q2Q and/or D2D seeks
840*1a3d31e3SAndroid Build Coastguard Worker  will trigger \texttt{btt} to output seeks-per-second information. The
841*1a3d31e3SAndroid Build Coastguard Worker  first column will contain a time value (seconds), and the second column
842*1a3d31e3SAndroid Build Coastguard Worker  will indicate the number of seeks per second at that point.
843*1a3d31e3SAndroid Build Coastguard Worker
844*1a3d31e3SAndroid Build Coastguard Worker  When there is only a single data point within a 1-second window,
845*1a3d31e3SAndroid Build Coastguard Worker  \texttt{btt} will just output the time value for the point, and the
846*1a3d31e3SAndroid Build Coastguard Worker  value 1.0 in the second column. If there is no perceived difference
847*1a3d31e3SAndroid Build Coastguard Worker  in the times present for the current sample, then the second columns
848*1a3d31e3SAndroid Build Coastguard Worker  value is the number of seeks present at that time.
849*1a3d31e3SAndroid Build Coastguard Worker
850*1a3d31e3SAndroid Build Coastguard Worker  Otherwise, if $\alpha$ and $\Omega$ are the first and last times
851*1a3d31e3SAndroid Build Coastguard Worker  seen within a 1-second window, and $\nu$ are the number of seeks seen
852*1a3d31e3SAndroid Build Coastguard Worker  in that time frame, then:
853*1a3d31e3SAndroid Build Coastguard Worker
854*1a3d31e3SAndroid Build Coastguard Worker  \begin{description}
855*1a3d31e3SAndroid Build Coastguard Worker    \item[column 1] Midway point in time for this span, or: \hfill$\alpha +
856*1a3d31e3SAndroid Build Coastguard Worker    {{(\Omega - \alpha)} / 2}$
857*1a3d31e3SAndroid Build Coastguard Worker
858*1a3d31e3SAndroid Build Coastguard Worker    \item[column 2] Average seeks per second over this span, or: \hfill$\nu  /
859*1a3d31e3SAndroid Build Coastguard Worker    {(\Omega - \alpha)}$
860*1a3d31e3SAndroid Build Coastguard Worker  \end{description}
861*1a3d31e3SAndroid Build Coastguard Worker
862*1a3d31e3SAndroid Build Coastguard Worker  Figure~\ref{fig:sps} shows a simple pair of graphs generated from
863*1a3d31e3SAndroid Build Coastguard Worker  \texttt{-m} output:
864*1a3d31e3SAndroid Build Coastguard Worker
865*1a3d31e3SAndroid Build Coastguard Worker  \begin{figure}[h!]
866*1a3d31e3SAndroid Build Coastguard Worker  \leavevmode\centering
867*1a3d31e3SAndroid Build Coastguard Worker  \epsfig{file=sps.eps,width=4.5in}
868*1a3d31e3SAndroid Build Coastguard Worker  \caption{\label{fig:sps}Seeks-per-second Chart}
869*1a3d31e3SAndroid Build Coastguard Worker  \end{figure}
870*1a3d31e3SAndroid Build Coastguard Worker  \FloatBarrier
871*1a3d31e3SAndroid Build Coastguard Worker
872*1a3d31e3SAndroid Build Coastguard Worker\newpage\section{\label{sec:cmd-line}Command Line}
873*1a3d31e3SAndroid Build Coastguard Worker
874*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
875*1a3d31e3SAndroid Build Coastguard WorkerUsage: btt 2.09
876*1a3d31e3SAndroid Build Coastguard Worker[ -a               | --seek-absolute ]
877*1a3d31e3SAndroid Build Coastguard Worker[ -A               | --all-data ]
878*1a3d31e3SAndroid Build Coastguard Worker[ -B <output name> | --dump-blocknos=<output name> ]
879*1a3d31e3SAndroid Build Coastguard Worker[ -d <seconds>     | --range-delta=<seconds> ]
880*1a3d31e3SAndroid Build Coastguard Worker[ -D <dev;...>     | --devices=<dev;...> ]
881*1a3d31e3SAndroid Build Coastguard Worker[ -e <exe,...>     | --exes=<exe,...>  ]
882*1a3d31e3SAndroid Build Coastguard Worker[ -h               | --help ]
883*1a3d31e3SAndroid Build Coastguard Worker[ -i <input name>  | --input-file=<input name> ]
884*1a3d31e3SAndroid Build Coastguard Worker[ -I <output name> | --iostat=<output name> ]
885*1a3d31e3SAndroid Build Coastguard Worker[ -l <output name> | --d2c-latencies=<output name> ]
886*1a3d31e3SAndroid Build Coastguard Worker[ -L <freq>        | --periodic-latencies=<freq> ]
887*1a3d31e3SAndroid Build Coastguard Worker[ -m <output name> | --seeks-per-second=<output name> ]
888*1a3d31e3SAndroid Build Coastguard Worker[ -M <dev map>     | --dev-maps=<dev map>
889*1a3d31e3SAndroid Build Coastguard Worker[ -o <output name> | --output-file=<output name> ]
890*1a3d31e3SAndroid Build Coastguard Worker[ -p <output name> | --per-io-dump=<output name> ]
891*1a3d31e3SAndroid Build Coastguard Worker[ -P <output name> | --per-io-trees=<output name> ]
892*1a3d31e3SAndroid Build Coastguard Worker[ -q <output name> | --q2c-latencies=<output name> ]
893*1a3d31e3SAndroid Build Coastguard Worker[ -Q <output name> | --active-queue-depth=<output name> ]
894*1a3d31e3SAndroid Build Coastguard Worker[ -r               | --no-remaps ]
895*1a3d31e3SAndroid Build Coastguard Worker[ -s <output name> | --seeks=<output name> ]
896*1a3d31e3SAndroid Build Coastguard Worker[ -S <interval>    | --iostat-interval=<interval> ]
897*1a3d31e3SAndroid Build Coastguard Worker[ -t <sec>         | --time-start=<sec> ]
898*1a3d31e3SAndroid Build Coastguard Worker[ -T <sec>         | --time-end=<sec> ]
899*1a3d31e3SAndroid Build Coastguard Worker[ -u <output name> | --unplug-hist=<output name> ]
900*1a3d31e3SAndroid Build Coastguard Worker[ -V               | --version ]
901*1a3d31e3SAndroid Build Coastguard Worker[ -v               | --verbose ]
902*1a3d31e3SAndroid Build Coastguard Worker[ -X               | --easy-parse-avgs ]
903*1a3d31e3SAndroid Build Coastguard Worker[ -z <output name> | --q2d-latencies=<output name> ]
904*1a3d31e3SAndroid Build Coastguard Worker[ -Z               | --do-active
905*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
906*1a3d31e3SAndroid Build Coastguard Worker
907*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-a}\texttt{--seek-absolute}/\texttt{-a}}
908*1a3d31e3SAndroid Build Coastguard Worker
909*1a3d31e3SAndroid Build Coastguard Worker  When specified on the command line, this directs btt to calculate
910*1a3d31e3SAndroid Build Coastguard Worker  seek distances based solely upon the ending block address of one IO,
911*1a3d31e3SAndroid Build Coastguard Worker  and the start of the next.  By default \texttt{btt} uses the concept
912*1a3d31e3SAndroid Build Coastguard Worker  of the closeness to either the beginning or end of the previous IO. See
913*1a3d31e3SAndroid Build Coastguard Worker  section~\ref{sec:seek} for more details about seek distances.
914*1a3d31e3SAndroid Build Coastguard Worker
915*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-A}\texttt{--all-data}/\texttt{-A}}
916*1a3d31e3SAndroid Build Coastguard Worker
917*1a3d31e3SAndroid Build Coastguard Worker  Normally \texttt{btt} will not print out verbose information
918*1a3d31e3SAndroid Build Coastguard Worker  concerning per-process and per-device data (as outlined in
919*1a3d31e3SAndroid Build Coastguard Worker  section~\ref{sec:detailed-data}). If you desire that level of
920*1a3d31e3SAndroid Build Coastguard Worker  detail you can specify this option.
921*1a3d31e3SAndroid Build Coastguard Worker
922*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-B}\texttt{--dump-blocknos}/\texttt{-B}}
923*1a3d31e3SAndroid Build Coastguard Worker
924*1a3d31e3SAndroid Build Coastguard Worker  This option will output absolute block numbers to three files prefixed
925*1a3d31e3SAndroid Build Coastguard Worker  by the specified output name:
926*1a3d31e3SAndroid Build Coastguard Worker
927*1a3d31e3SAndroid Build Coastguard Worker  \begin{description}
928*1a3d31e3SAndroid Build Coastguard Worker    \item[\emph{prefix}\_\emph{device}\_r.dat] All read block numbers are
929*1a3d31e3SAndroid Build Coastguard Worker    output, first column is time (seconds), second is the block number,
930*1a3d31e3SAndroid Build Coastguard Worker    and the third column is the ending block number.
931*1a3d31e3SAndroid Build Coastguard Worker
932*1a3d31e3SAndroid Build Coastguard Worker    \item[\emph{prefix}\_\emph{device}\_w.dat] All write block numbers are
933*1a3d31e3SAndroid Build Coastguard Worker    output, first column is time (seconds), second is the block number,
934*1a3d31e3SAndroid Build Coastguard Worker    and the third column is the ending block number.
935*1a3d31e3SAndroid Build Coastguard Worker
936*1a3d31e3SAndroid Build Coastguard Worker    \item[\emph{prefix}\_\emph{device}\_c.dat] All block numbers (read
937*1a3d31e3SAndroid Build Coastguard Worker    and write) are output, first column is time (seconds), second is
938*1a3d31e3SAndroid Build Coastguard Worker    the block number, and the third column is the ending block number.
939*1a3d31e3SAndroid Build Coastguard Worker  \end{description}
940*1a3d31e3SAndroid Build Coastguard Worker
941*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-d}\texttt{--range-delta}/\texttt{-d}}
942*1a3d31e3SAndroid Build Coastguard Worker
943*1a3d31e3SAndroid Build Coastguard Worker  Section~\ref{sec:activity} discussed how \texttt{btt} outputs a file
944*1a3d31e3SAndroid Build Coastguard Worker  containing Q and C activity, the notion of \emph{active} traces simply
945*1a3d31e3SAndroid Build Coastguard Worker  means that there are Q or C traces occurring within a certain period
946*1a3d31e3SAndroid Build Coastguard Worker  of each other. The default values is 0.1 seconds; with this option
947*1a3d31e3SAndroid Build Coastguard Worker  allowing one to change that granularity. The smaller the value, the
948*1a3d31e3SAndroid Build Coastguard Worker  more data points provided.
949*1a3d31e3SAndroid Build Coastguard Worker
950*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-D}\texttt{--devices}/\texttt{-D}}
951*1a3d31e3SAndroid Build Coastguard Worker
952*1a3d31e3SAndroid Build Coastguard Worker  Normally, \texttt{btt} will produce data for all devices detected in
953*1a3d31e3SAndroid Build Coastguard Worker  the traces parsed. With this option, one can reduce the analysis to
954*1a3d31e3SAndroid Build Coastguard Worker  one or more devices provided in the string passed to this option. The
955*1a3d31e3SAndroid Build Coastguard Worker  device identifiers are the major and minor number of each device, and
956*1a3d31e3SAndroid Build Coastguard Worker  each device identifier is separated by a colon (:). A valid specifier
957*1a3d31e3SAndroid Build Coastguard Worker  for devices 8,0 and 8,8 would then be: \texttt{"8,0:8,8"}.
958*1a3d31e3SAndroid Build Coastguard Worker
959*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-e}\texttt{--exes}/\texttt{-e}}
960*1a3d31e3SAndroid Build Coastguard Worker
961*1a3d31e3SAndroid Build Coastguard Worker  Likewise, \texttt{btt} will produce data for all processes (executables)
962*1a3d31e3SAndroid Build Coastguard Worker  found in the traces. With this option, one can specify which processes
963*1a3d31e3SAndroid Build Coastguard Worker  you want displayed in the output. The format of the string passed is
964*1a3d31e3SAndroid Build Coastguard Worker  a list of executable \emph{names} separated by commas (,). An example
965*1a3d31e3SAndroid Build Coastguard Worker  would be \texttt{"-e mkfs.ext3,mount"}.
966*1a3d31e3SAndroid Build Coastguard Worker
967*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-h}\texttt{--help}/\texttt{-h}}
968*1a3d31e3SAndroid Build Coastguard Worker
969*1a3d31e3SAndroid Build Coastguard Worker  Prints out the simple help information, as seen at the top of
970*1a3d31e3SAndroid Build Coastguard Worker  section~\ref{sec:cmd-line}.
971*1a3d31e3SAndroid Build Coastguard Worker
972*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-i}\texttt{--input-file}/\texttt{-i}}
973*1a3d31e3SAndroid Build Coastguard Worker
974*1a3d31e3SAndroid Build Coastguard Worker  Specifies the binary input file that \texttt{btt} will interpret traces
975*1a3d31e3SAndroid Build Coastguard Worker  in. See section~\ref{sec:getting-started} for information concerning
976*1a3d31e3SAndroid Build Coastguard Worker  binary trace files.
977*1a3d31e3SAndroid Build Coastguard Worker
978*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-I}\texttt{--iostat}/\texttt{-I}}
979*1a3d31e3SAndroid Build Coastguard Worker
980*1a3d31e3SAndroid Build Coastguard Worker  This option triggers \texttt{btt} to generate iostat-like output to the
981*1a3d31e3SAndroid Build Coastguard Worker  file specified. Refer to section~\ref{sec:iostat} for more information
982*1a3d31e3SAndroid Build Coastguard Worker  on the output produced.
983*1a3d31e3SAndroid Build Coastguard Worker
984*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-l}\texttt{--d2c-latencies}/\texttt{-l}}
985*1a3d31e3SAndroid Build Coastguard Worker
986*1a3d31e3SAndroid Build Coastguard Worker  This option instructs \texttt{btt} to generate the D2C latency file
987*1a3d31e3SAndroid Build Coastguard Worker  discussed in section~\ref{sec:lat-d2c}.
988*1a3d31e3SAndroid Build Coastguard Worker
989*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-L}\texttt{--periodic-latencies}/\texttt{-L}}
990*1a3d31e3SAndroid Build Coastguard Worker
991*1a3d31e3SAndroid Build Coastguard Worker  When given a value greater than 0, this option will create two data
992*1a3d31e3SAndroid Build Coastguard Worker  files (q2c \& d2c) per device containing a periodic timestamp \&
993*1a3d31e3SAndroid Build Coastguard Worker  average latency over that period.
994*1a3d31e3SAndroid Build Coastguard Worker
995*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-m}\texttt{--seeks-per-second}\texttt{-m}}
996*1a3d31e3SAndroid Build Coastguard Worker
997*1a3d31e3SAndroid Build Coastguard Worker  Tells \texttt{btt} to output seeks per second information.  Each device
998*1a3d31e3SAndroid Build Coastguard Worker  being measured can have up to 2 files output: One with Q2Q information
999*1a3d31e3SAndroid Build Coastguard Worker  and one with D2D seek information. Information on the output produced
1000*1a3d31e3SAndroid Build Coastguard Worker  can be found in section~\ref{sec:sps-spec}.
1001*1a3d31e3SAndroid Build Coastguard Worker
1002*1a3d31e3SAndroid Build Coastguard Worker  \begin{quote}
1003*1a3d31e3SAndroid Build Coastguard Worker    \textbf{Note: This requires seek output to be selected -- see
1004*1a3d31e3SAndroid Build Coastguard Worker    section~\ref{sec:seek}.}
1005*1a3d31e3SAndroid Build Coastguard Worker  \end{quote}
1006*1a3d31e3SAndroid Build Coastguard Worker
1007*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-M}\texttt{--dev-maps}/\texttt{-M}}
1008*1a3d31e3SAndroid Build Coastguard Worker
1009*1a3d31e3SAndroid Build Coastguard Worker  Internal option, still under construction.
1010*1a3d31e3SAndroid Build Coastguard Worker
1011*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-o}\texttt{--output-file}/\texttt{-o}}
1012*1a3d31e3SAndroid Build Coastguard Worker
1013*1a3d31e3SAndroid Build Coastguard Worker  Normally \texttt{btt} sends the statistical output (covered in
1014*1a3d31e3SAndroid Build Coastguard Worker  section~\ref{sec:output-overview}) to standard out, if you specify
1015*1a3d31e3SAndroid Build Coastguard Worker  this option this data is redirected to the file specified.
1016*1a3d31e3SAndroid Build Coastguard Worker
1017*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-p}\texttt{--per-io-dump}/\texttt{-p}}
1018*1a3d31e3SAndroid Build Coastguard Worker
1019*1a3d31e3SAndroid Build Coastguard Worker  This option tells \texttt{btt} to generate the per IO dump file as
1020*1a3d31e3SAndroid Build Coastguard Worker  discussed in section~\ref{sec:per-io}.
1021*1a3d31e3SAndroid Build Coastguard Worker
1022*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-P}\texttt{--per-io-tress}/\texttt{-P}}
1023*1a3d31e3SAndroid Build Coastguard Worker
1024*1a3d31e3SAndroid Build Coastguard WorkerThe \texttt{-P} option will generate a file that contains a list of all IO
1025*1a3d31e3SAndroid Build Coastguard Worker"sequences" - showing only the Q, D \& C operation times. The D \& C
1026*1a3d31e3SAndroid Build Coastguard Workertime values are separated from the Q time values with a vertical bar.
1027*1a3d31e3SAndroid Build Coastguard Worker
1028*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-q}\texttt{--q2c-latencies}/\texttt{-q}}
1029*1a3d31e3SAndroid Build Coastguard Worker
1030*1a3d31e3SAndroid Build Coastguard Worker  This option instructs \texttt{btt} to generate the Q2C latency file
1031*1a3d31e3SAndroid Build Coastguard Worker  discussed in section~\ref{sec:lat-q2c}.
1032*1a3d31e3SAndroid Build Coastguard Worker
1033*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-Q}\texttt{--active-queue-depth}/\texttt{-Q}}
1034*1a3d31e3SAndroid Build Coastguard Worker
1035*1a3d31e3SAndroid Build Coastguard Worker  This option tells \texttt{btt} to generate a data file (using the given
1036*1a3d31e3SAndroid Build Coastguard Worker  name as a base) which contains: A time stamp in the first column,
1037*1a3d31e3SAndroid Build Coastguard Worker  and then the number of \emph{active} requests issued to the device
1038*1a3d31e3SAndroid Build Coastguard Worker  driver. (The value is incremented when an \emph{issue} is performend,
1039*1a3d31e3SAndroid Build Coastguard Worker  and decremented when a \emph{complete} is performed.
1040*1a3d31e3SAndroid Build Coastguard Worker
1041*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-r}\texttt{--no-remaps}/\texttt{-r}}
1042*1a3d31e3SAndroid Build Coastguard Worker
1043*1a3d31e3SAndroid Build Coastguard Worker  Ignore remap traces; older kernels did not implement the full remap PDU.
1044*1a3d31e3SAndroid Build Coastguard Worker
1045*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-s}\texttt{--seeks}/\texttt{-s}}
1046*1a3d31e3SAndroid Build Coastguard Worker
1047*1a3d31e3SAndroid Build Coastguard Worker  This option instructs \texttt{btt} to generate the seek data file
1048*1a3d31e3SAndroid Build Coastguard Worker  discussed in section~\ref{sec:seek}.
1049*1a3d31e3SAndroid Build Coastguard Worker
1050*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-S}\texttt{--iostat-interval}/\texttt{-S}}
1051*1a3d31e3SAndroid Build Coastguard Worker
1052*1a3d31e3SAndroid Build Coastguard Worker  The normal \texttt{iostat} command allows one to specify the snapshot
1053*1a3d31e3SAndroid Build Coastguard Worker  interval, likewise, \texttt{btt} allows one to specify how many seconds
1054*1a3d31e3SAndroid Build Coastguard Worker  between its generation of snapshots of the data via this option. Details
1055*1a3d31e3SAndroid Build Coastguard Worker  about the iostat-like capabilities of \texttt{btt} may be found in
1056*1a3d31e3SAndroid Build Coastguard Worker  section~\ref{sec:iostat}.
1057*1a3d31e3SAndroid Build Coastguard Worker
1058*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-tT}\texttt{--time-start}/\texttt{-t} and
1059*1a3d31e3SAndroid Build Coastguard Worker\texttt{--time-end}/\texttt{T}}
1060*1a3d31e3SAndroid Build Coastguard Worker
1061*1a3d31e3SAndroid Build Coastguard Worker  \begin{quote}
1062*1a3d31e3SAndroid Build Coastguard Worker    \emph{This \texttt{btt} capability is still under construction, results are
1063*1a3d31e3SAndroid Build Coastguard Worker    not always consistent at this point in time.}
1064*1a3d31e3SAndroid Build Coastguard Worker  \end{quote}
1065*1a3d31e3SAndroid Build Coastguard Worker
1066*1a3d31e3SAndroid Build Coastguard Worker  These options allow one to dictate to \texttt{btt} when to start and stop
1067*1a3d31e3SAndroid Build Coastguard Worker  parsing of trace data in terms of seconds since the start of the run. The
1068*1a3d31e3SAndroid Build Coastguard Worker  trace chosen will be between the start time (or 0.0 if not
1069*1a3d31e3SAndroid Build Coastguard Worker  specified) and end time (or the end of the run) specified.
1070*1a3d31e3SAndroid Build Coastguard Worker
1071*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-u}\texttt{--unplug-hist}/\texttt{-u}}
1072*1a3d31e3SAndroid Build Coastguard Worker
1073*1a3d31e3SAndroid Build Coastguard Worker  This option instructs \texttt{btt} to generate a data file containing
1074*1a3d31e3SAndroid Build Coastguard Worker  histogram information for \emph{unplug} traces on a per device
1075*1a3d31e3SAndroid Build Coastguard Worker  basis. It shows how many times an unplug was hit with a specified
1076*1a3d31e3SAndroid Build Coastguard Worker  number of IOs released. There are 21 output values into the file, as
1077*1a3d31e3SAndroid Build Coastguard Worker  follows:
1078*1a3d31e3SAndroid Build Coastguard Worker
1079*1a3d31e3SAndroid Build Coastguard Worker  \medskip
1080*1a3d31e3SAndroid Build Coastguard Worker  \begin{tabular}{ll}
1081*1a3d31e3SAndroid Build Coastguard Worker\textbf{X value} & \textbf{Representing Counts} \\\hline
1082*1a3d31e3SAndroid Build Coastguard Worker0 & 0\dots\/4 \\
1083*1a3d31e3SAndroid Build Coastguard Worker1 & 5\dots\/9 \\
1084*1a3d31e3SAndroid Build Coastguard Worker2 & 10\dots\/14 \\
1085*1a3d31e3SAndroid Build Coastguard Worker\dots & \dots\dots\\
1086*1a3d31e3SAndroid Build Coastguard Worker19 & 95\dots\/99 \\
1087*1a3d31e3SAndroid Build Coastguard Worker20 & 100+ \\
1088*1a3d31e3SAndroid Build Coastguard Worker  \end{tabular}
1089*1a3d31e3SAndroid Build Coastguard Worker
1090*1a3d31e3SAndroid Build Coastguard Worker  \medskip
1091*1a3d31e3SAndroid Build Coastguard Worker  The file name(s) generated use the text string passed as an argument for
1092*1a3d31e3SAndroid Build Coastguard Worker  the prefix, followed by the device identifier in \texttt{major,minor}
1093*1a3d31e3SAndroid Build Coastguard Worker  form, with a \texttt{.dat} extension (as an example, with \texttt{-u
1094*1a3d31e3SAndroid Build Coastguard Worker  up\_hist} specified on the command line: \texttt{up\_hist\_008,032.dat}.
1095*1a3d31e3SAndroid Build Coastguard Worker
1096*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-V}\texttt{--version}/\texttt{-V}}
1097*1a3d31e3SAndroid Build Coastguard Worker
1098*1a3d31e3SAndroid Build Coastguard Worker  Prints out the \texttt{btt} version, and exits.
1099*1a3d31e3SAndroid Build Coastguard Worker
1100*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-v}\texttt{--verbose}/\texttt{-v}}
1101*1a3d31e3SAndroid Build Coastguard Worker
1102*1a3d31e3SAndroid Build Coastguard Worker  While \texttt{btt} is processing data, it will put out periodic (1-second
1103*1a3d31e3SAndroid Build Coastguard Worker  granularity) values describing the progress it is making through the
1104*1a3d31e3SAndroid Build Coastguard Worker  input trace stream. The value describes how many traces have been
1105*1a3d31e3SAndroid Build Coastguard Worker  processed. At the end of the run, the overall number of traces, trace
1106*1a3d31e3SAndroid Build Coastguard Worker  rate (number of thousands of traces per second), and the real time for
1107*1a3d31e3SAndroid Build Coastguard Worker  trace processing and output are displayed. Example (note: the interim
1108*1a3d31e3SAndroid Build Coastguard Worker  trace counts are put out with carriage returns, hence, they overwrite
1109*1a3d31e3SAndroid Build Coastguard Worker  each time):
1110*1a3d31e3SAndroid Build Coastguard Worker
1111*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
1112*1a3d31e3SAndroid Build Coastguard Worker# btt -i bp.bin -o btt -v
1113*1a3d31e3SAndroid Build Coastguard WorkerSending range data to bttX.dat
1114*1a3d31e3SAndroid Build Coastguard WorkerSending stats data to bttX.avg
1115*1a3d31e3SAndroid Build Coastguard Worker 287857 t
1116*1a3d31e3SAndroid Build Coastguard Worker1414173 t
1117*1a3d31e3SAndroid Build Coastguard Worker1691581 t
1118*1a3d31e3SAndroid Build Coastguard Worker...
1119*1a3d31e3SAndroid Build Coastguard Worker4581291 traces @ 279.7 Ktps
1120*1a3d31e3SAndroid Build Coastguard Worker16.379036+0.000005=16.379041
1121*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
1122*1a3d31e3SAndroid Build Coastguard Worker
1123*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-X}\texttt{--easy-parse-avgs}/\texttt{-X}}
1124*1a3d31e3SAndroid Build Coastguard Worker
1125*1a3d31e3SAndroid Build Coastguard Worker  \emph{Some} of the data produced by default can also be shipped
1126*1a3d31e3SAndroid Build Coastguard Worker  simultaneously to another file in an easy to parse form. When
1127*1a3d31e3SAndroid Build Coastguard Worker  the \texttt{-o} option is selected (thus producing a file with a
1128*1a3d31e3SAndroid Build Coastguard Worker  \texttt{.avg} exentsion), \emph{and} the \texttt{-X} flag is present,
1129*1a3d31e3SAndroid Build Coastguard Worker  then \texttt{btt} will generate this file.
1130*1a3d31e3SAndroid Build Coastguard Worker
1131*1a3d31e3SAndroid Build Coastguard Worker  The format is space-delimited values starting with a 3-character
1132*1a3d31e3SAndroid Build Coastguard Worker  \emph{record} indicator, then the device information (either major,minor
1133*1a3d31e3SAndroid Build Coastguard Worker  or the device name when \texttt{-M} is specified), and then a number of
1134*1a3d31e3SAndroid Build Coastguard Worker  fields representing data values. The following table shows the record
1135*1a3d31e3SAndroid Build Coastguard Worker  identifiers and the fields provided:
1136*1a3d31e3SAndroid Build Coastguard Worker
1137*1a3d31e3SAndroid Build Coastguard Worker  \bigskip
1138*1a3d31e3SAndroid Build Coastguard Worker  \begin{tabular}{|l|l|}\hline
1139*1a3d31e3SAndroid Build Coastguard Worker  \textbf{Record} & \textbf{Description}\\\hline
1140*1a3d31e3SAndroid Build Coastguard Worker  \texttt{DMI}	& Device Merge Information:\\
1141*1a3d31e3SAndroid Build Coastguard Worker		& \#Q \#D Ratio BLKmin BLKavg BLKmax Total\\\hline
1142*1a3d31e3SAndroid Build Coastguard Worker  \texttt{QSK}	& Device Q2Q Seek Information:\\
1143*1a3d31e3SAndroid Build Coastguard Worker		& NSEEKS MEAN MEDIAN MODE N-MODE mode\ldots\\\hline
1144*1a3d31e3SAndroid Build Coastguard Worker  \texttt{DSK}	& Device D2D Seek Information:\\
1145*1a3d31e3SAndroid Build Coastguard Worker		& NSEEKS MEAN MEDIAN MODE N-MODE mode\ldots\\\hline
1146*1a3d31e3SAndroid Build Coastguard Worker  \texttt{PLG}	& Plug Information:\\
1147*1a3d31e3SAndroid Build Coastguard Worker		& \#Plugs \#TimerUnplugs \%TimeQPlugged\\\hline
1148*1a3d31e3SAndroid Build Coastguard Worker  \texttt{UPG}	& Unplug Information:\\
1149*1a3d31e3SAndroid Build Coastguard Worker		& IOsPerUnplug IOsPerUnplugTimeout\\\hline
1150*1a3d31e3SAndroid Build Coastguard Worker  \texttt{ARQ}	& Active Requests at Q Information:\\
1151*1a3d31e3SAndroid Build Coastguard Worker  		& AvgReqs@Q\\\hline\hline
1152*1a3d31e3SAndroid Build Coastguard Worker  \texttt{Q2Q}  & Queue-to-Queue times:\\
1153*1a3d31e3SAndroid Build Coastguard Worker  \texttt{Q2G}  & Queue-to-GetRequest times:\\
1154*1a3d31e3SAndroid Build Coastguard Worker  \texttt{S2G}  & Sleep-to-GetRequest times:\\
1155*1a3d31e3SAndroid Build Coastguard Worker  \texttt{G2I}  & GetRequest-to-Insert times:\\
1156*1a3d31e3SAndroid Build Coastguard Worker  \texttt{Q2M}  & Queue-to-Merge times:\\
1157*1a3d31e3SAndroid Build Coastguard Worker  \texttt{I2D}  & Insert-to-Issue times:\\
1158*1a3d31e3SAndroid Build Coastguard Worker  \texttt{M2D}  & Merge-to-Issue times:\\
1159*1a3d31e3SAndroid Build Coastguard Worker  \texttt{D2C}  & Issue-to-Complete times:\\
1160*1a3d31e3SAndroid Build Coastguard Worker  \texttt{Q2C}  & Queue-to-Complete times:\\
1161*1a3d31e3SAndroid Build Coastguard Worker                & MIN AVG MAX N\\\hline
1162*1a3d31e3SAndroid Build Coastguard Worker  \end{tabular}
1163*1a3d31e3SAndroid Build Coastguard Worker
1164*1a3d31e3SAndroid Build Coastguard Worker  \bigskip
1165*1a3d31e3SAndroid Build Coastguard Worker  A sample output file would look like:
1166*1a3d31e3SAndroid Build Coastguard Worker
1167*1a3d31e3SAndroid Build Coastguard Worker  \begin{verbatim}
1168*1a3d31e3SAndroid Build Coastguard WorkerQ2Q 0.000000001 0.003511356 9.700000000 309906
1169*1a3d31e3SAndroid Build Coastguard WorkerQ2G 0.000000001 0.774586535 805.300000000 106732
1170*1a3d31e3SAndroid Build Coastguard WorkerS2G 0.000000001 0.072525952 0.370000000 578
1171*1a3d31e3SAndroid Build Coastguard WorkerG2I 0.000000001 0.000001125 0.010000000 106732
1172*1a3d31e3SAndroid Build Coastguard WorkerQ2M 0.000000001 0.730763626 751.820000000 204040
1173*1a3d31e3SAndroid Build Coastguard WorkerI2D 0.000000001 1.270720538 612.880000000 106948
1174*1a3d31e3SAndroid Build Coastguard WorkerM2D 0.000000001 0.992355230 428.930000000 203114
1175*1a3d31e3SAndroid Build Coastguard WorkerD2C 0.000000001 0.008681311 137.020000000 307343
1176*1a3d31e3SAndroid Build Coastguard WorkerQ2C 0.000000001 1.304370794 805.660000000 308921
1177*1a3d31e3SAndroid Build Coastguard WorkerDMI 8,16 309907 106729 2.903681286 8 182 1024 19504768
1178*1a3d31e3SAndroid Build Coastguard WorkerQSK 8,16 309907 167200.935561314 0 0 235708
1179*1a3d31e3SAndroid Build Coastguard WorkerDSK 8,16 106729 433247.436563633 0 0 33974
1180*1a3d31e3SAndroid Build Coastguard WorkerPLG 8,16 40824 382 0.008881420
1181*1a3d31e3SAndroid Build Coastguard WorkerUPG 8,16 1.993361748 1.866492147
1182*1a3d31e3SAndroid Build Coastguard WorkerARQ 8,16 12.938165321
1183*1a3d31e3SAndroid Build Coastguard Worker  \end{verbatim}
1184*1a3d31e3SAndroid Build Coastguard Worker
1185*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-z}\texttt{--q2d-latencies}/\texttt{-z}}
1186*1a3d31e3SAndroid Build Coastguard Worker
1187*1a3d31e3SAndroid Build Coastguard Worker  This option instructs \texttt{btt} to generate the Q2D latency file
1188*1a3d31e3SAndroid Build Coastguard Worker  discussed in section~\ref{sec:lat-q2d}.
1189*1a3d31e3SAndroid Build Coastguard Worker
1190*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-Z}\texttt{--q2d-latencies}/\texttt{-Z}}
1191*1a3d31e3SAndroid Build Coastguard Worker
1192*1a3d31e3SAndroid Build Coastguard Worker  This option generates per-device (and total system) data files. Each
1193*1a3d31e3SAndroid Build Coastguard Worker  file contain a data line which resembles a timing graph: low meaning
1194*1a3d31e3SAndroid Build Coastguard Worker  I/O inactive, high meaning I/O active. A sample section of two ``active'' regions would be:
1195*1a3d31e3SAndroid Build Coastguard Worker
1196*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
1197*1a3d31e3SAndroid Build Coastguard Worker0.000000000 1.0
1198*1a3d31e3SAndroid Build Coastguard Worker0.000025733 1.0
1199*1a3d31e3SAndroid Build Coastguard Worker0.000025733 1.9
1200*1a3d31e3SAndroid Build Coastguard Worker0.000107089 1.9
1201*1a3d31e3SAndroid Build Coastguard Worker0.000107089 1.0
1202*1a3d31e3SAndroid Build Coastguard Worker0.000107089 1.0
1203*1a3d31e3SAndroid Build Coastguard Worker0.005637386 1.0
1204*1a3d31e3SAndroid Build Coastguard Worker0.005637386 1.9
1205*1a3d31e3SAndroid Build Coastguard Worker0.017323909 1.9
1206*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
1207*1a3d31e3SAndroid Build Coastguard Worker
1208*1a3d31e3SAndroid Build Coastguard Worker  Which shows an active area from 0.000025733 through
1209*1a3d31e3SAndroid Build Coastguard Worker  0.000107089 followed by another at 0.005637386 through
1210*1a3d31e3SAndroid Build Coastguard Worker  0.017323909. Figure~\ref{fig:live_plot} shows a sample plot that can
1211*1a3d31e3SAndroid Build Coastguard Worker  be generated by such data.
1212*1a3d31e3SAndroid Build Coastguard Worker
1213*1a3d31e3SAndroid Build Coastguard Worker\begin{figure}[b!]
1214*1a3d31e3SAndroid Build Coastguard Worker\leavevmode\centering
1215*1a3d31e3SAndroid Build Coastguard Worker\epsfig{file=live.eps,width=5.5in}
1216*1a3d31e3SAndroid Build Coastguard Worker\caption{\label{fig:live_plot}Sample graph using data from \texttt{-Z}}
1217*1a3d31e3SAndroid Build Coastguard Worker\end{figure}
1218*1a3d31e3SAndroid Build Coastguard Worker
1219*1a3d31e3SAndroid Build Coastguard Worker\newpage\section{\label{sec:bno_plot}bno\_plot.py}
1220*1a3d31e3SAndroid Build Coastguard Worker
1221*1a3d31e3SAndroid Build Coastguard WorkerIncluded with the distribution is a simple 3D plotting utility based
1222*1a3d31e3SAndroid Build Coastguard Workerupon the block numbers output when \texttt{-B} is specified (see
1223*1a3d31e3SAndroid Build Coastguard Workersection~\ref{sec:o-B} for more details about the \texttt{-B option}). The
1224*1a3d31e3SAndroid Build Coastguard Workerdisplay will display \emph{each} IO generated, with the time (seconds)
1225*1a3d31e3SAndroid Build Coastguard Workeralong the X-axis, the block number (start) along the Y-axis and the
1226*1a3d31e3SAndroid Build Coastguard Workernumber of blocks transferred in the IO represented along the Z-axis.
1227*1a3d31e3SAndroid Build Coastguard Worker
1228*1a3d31e3SAndroid Build Coastguard WorkerThe script requires Python\footnote{\texttt{www.python.org}} and
1229*1a3d31e3SAndroid Build Coastguard Workergnuplot\footnote{\texttt{www.gnuplot.info}}, and will enter interactive
1230*1a3d31e3SAndroid Build Coastguard Workermode after the image is produced. In this interactive mode one can enter
1231*1a3d31e3SAndroid Build Coastguard Workergnuplot commands at the \texttt{'gnuplot>'} prompt, and/or can change
1232*1a3d31e3SAndroid Build Coastguard Workerthe viewpoint within the 3D image by \emph{left-click-hold} and moving
1233*1a3d31e3SAndroid Build Coastguard Workerthe mouse. A sample screen shot can be seen in figure~\ref{fig:bno_plot}.
1234*1a3d31e3SAndroid Build Coastguard Worker
1235*1a3d31e3SAndroid Build Coastguard Worker\subsection*{\texttt{bno\_plot.py} Command Line Options}
1236*1a3d31e3SAndroid Build Coastguard Worker
1237*1a3d31e3SAndroid Build Coastguard Worker\begin{quotation}
1238*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim}
1239*1a3d31e3SAndroid Build Coastguard Worker
1240*1a3d31e3SAndroid Build Coastguard Worker$ bno_plot.py --help
1241*1a3d31e3SAndroid Build Coastguard Worker
1242*1a3d31e3SAndroid Build Coastguard Workerbno_plot.py
1243*1a3d31e3SAndroid Build Coastguard Worker	[ -h | --help       ]
1244*1a3d31e3SAndroid Build Coastguard Worker	[ -K | --keys-below ]
1245*1a3d31e3SAndroid Build Coastguard Worker	[ -v | --verbose    ]
1246*1a3d31e3SAndroid Build Coastguard Worker	[ <file...>         ]
1247*1a3d31e3SAndroid Build Coastguard Worker
1248*1a3d31e3SAndroid Build Coastguard WorkerUtilizes gnuplot to generate a 3D plot of the block number
1249*1a3d31e3SAndroid Build Coastguard Workeroutput from btt.  If no <files> are specified, it will
1250*1a3d31e3SAndroid Build Coastguard Workerutilize all files generated after btt was run with -B
1251*1a3d31e3SAndroid Build Coastguard Workerblknos (meaning: all files of the form blknos*[rw].dat).
1252*1a3d31e3SAndroid Build Coastguard Worker
1253*1a3d31e3SAndroid Build Coastguard WorkerThe -K option forces bno_plot.py to put the keys below the
1254*1a3d31e3SAndroid Build Coastguard Workergraph, typically all keys for input files are put in the
1255*1a3d31e3SAndroid Build Coastguard Workerupper right corner of the graph. If the number of devices
1256*1a3d31e3SAndroid Build Coastguard Workerexceed 10, then bno_plot.py will automatically push the
1257*1a3d31e3SAndroid Build Coastguard Workerkeys under the graph.
1258*1a3d31e3SAndroid Build Coastguard Worker
1259*1a3d31e3SAndroid Build Coastguard WorkerTo exit the plotter, enter 'quit' or ^D at the 'gnuplot> '
1260*1a3d31e3SAndroid Build Coastguard Workerprompt.
1261*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim}
1262*1a3d31e3SAndroid Build Coastguard Worker\end{quotation}
1263*1a3d31e3SAndroid Build Coastguard Worker
1264*1a3d31e3SAndroid Build Coastguard Worker\begin{figure}[b!]
1265*1a3d31e3SAndroid Build Coastguard Worker\leavevmode\centering
1266*1a3d31e3SAndroid Build Coastguard Worker\epsfig{file=bno_plot.eps,width=5.5in}
1267*1a3d31e3SAndroid Build Coastguard Worker\caption{\label{fig:bno_plot}Sample \texttt{bno\_plot.py} Screen Shot}
1268*1a3d31e3SAndroid Build Coastguard Worker\end{figure}
1269*1a3d31e3SAndroid Build Coastguard Worker
1270*1a3d31e3SAndroid Build Coastguard Worker\clearpage
1271*1a3d31e3SAndroid Build Coastguard Worker\newpage\section{\label{sec:appendix}Sample \texttt{btt}
1272*1a3d31e3SAndroid Build Coastguard WorkerOutput}
1273*1a3d31e3SAndroid Build Coastguard Worker  Here is a complete output file from a btt run, illustrating a lot of the
1274*1a3d31e3SAndroid Build Coastguard Worker  capabilities of btt.
1275*1a3d31e3SAndroid Build Coastguard Worker\input{sample-btt-output.tex}
1276*1a3d31e3SAndroid Build Coastguard Worker
1277*1a3d31e3SAndroid Build Coastguard Worker\end{document}
1278*1a3d31e3SAndroid Build Coastguard Worker\subsection{\label{sec:o-B}\texttt{--dump-blocknos}/\texttt{-B}}
1279