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