1*1a3d31e3SAndroid Build Coastguard Worker% 2*1a3d31e3SAndroid Build Coastguard Worker% Copyright (C) 2007 Alan D. Brunelle <[email protected]> 3*1a3d31e3SAndroid Build Coastguard Worker% 4*1a3d31e3SAndroid Build Coastguard Worker% This program is free software; you can redistribute it and/or modify 5*1a3d31e3SAndroid Build Coastguard Worker% it under the terms of the GNU General Public License as published by 6*1a3d31e3SAndroid Build Coastguard Worker% the Free Software Foundation; either version 2 of the License, or 7*1a3d31e3SAndroid Build Coastguard Worker% (at your option) any later version. 8*1a3d31e3SAndroid Build Coastguard Worker% 9*1a3d31e3SAndroid Build Coastguard Worker% This program is distributed in the hope that it will be useful, 10*1a3d31e3SAndroid Build Coastguard Worker% but WITHOUT ANY WARRANTY; without even the implied warranty of 11*1a3d31e3SAndroid Build Coastguard Worker% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12*1a3d31e3SAndroid Build Coastguard Worker% GNU General Public License for more details. 13*1a3d31e3SAndroid Build Coastguard Worker% 14*1a3d31e3SAndroid Build Coastguard Worker% You should have received a copy of the GNU General Public License 15*1a3d31e3SAndroid Build Coastguard Worker% along with this program; if not, write to the Free Software 16*1a3d31e3SAndroid Build Coastguard Worker% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 17*1a3d31e3SAndroid Build Coastguard Worker% 18*1a3d31e3SAndroid Build Coastguard Worker% vi :set textwidth=75 19*1a3d31e3SAndroid Build Coastguard Worker% 20*1a3d31e3SAndroid Build Coastguard Worker\documentclass{article} 21*1a3d31e3SAndroid Build Coastguard Worker\usepackage{multirow,graphicx,placeins} 22*1a3d31e3SAndroid Build Coastguard Worker 23*1a3d31e3SAndroid Build Coastguard Worker\begin{document} 24*1a3d31e3SAndroid Build Coastguard Worker%--------------------- 25*1a3d31e3SAndroid Build Coastguard Worker\title{\texttt{btrecord} and \texttt{btreplay} User Guide} 26*1a3d31e3SAndroid Build Coastguard Worker\author{Alan D. Brunelle ([email protected])} 27*1a3d31e3SAndroid Build Coastguard Worker\date{\today} 28*1a3d31e3SAndroid Build Coastguard Worker\maketitle 29*1a3d31e3SAndroid Build Coastguard Worker\begin{abstract} 30*1a3d31e3SAndroid Build Coastguard Worker\input{abstract.tex} 31*1a3d31e3SAndroid Build Coastguard Worker\end{abstract} 32*1a3d31e3SAndroid Build Coastguard Worker\thispagestyle{empty}\newpage 33*1a3d31e3SAndroid Build Coastguard Worker%--------------------- 34*1a3d31e3SAndroid Build Coastguard Worker\tableofcontents\thispagestyle{empty}\newpage 35*1a3d31e3SAndroid Build Coastguard Worker%--------------------- 36*1a3d31e3SAndroid Build Coastguard Worker\section{Introduction} 37*1a3d31e3SAndroid Build Coastguard Worker\input{abstract.tex} 38*1a3d31e3SAndroid Build Coastguard Worker 39*1a3d31e3SAndroid Build Coastguard Worker\bigskip 40*1a3d31e3SAndroid Build Coastguard WorkerThis document presents the command line overview for 41*1a3d31e3SAndroid Build Coastguard Worker\texttt{btrecord} and \texttt{btreplay}, and shows some commonly used 42*1a3d31e3SAndroid Build Coastguard Workerexample usages of it in everyday work here at OSLO's Scalability and 43*1a3d31e3SAndroid Build Coastguard WorkerPerformance Group. 44*1a3d31e3SAndroid Build Coastguard Worker 45*1a3d31e3SAndroid Build Coastguard Worker\subsection*{Build Note} 46*1a3d31e3SAndroid Build Coastguard Worker 47*1a3d31e3SAndroid Build Coastguard WorkerTo build these tools, one needs to 48*1a3d31e3SAndroid Build Coastguard Workerplace the source directory next to a valid 49*1a3d31e3SAndroid Build Coastguard Worker\texttt{blktrace}\footnote{\texttt{git://git.kernel.dk/blktrace.git}} 50*1a3d31e3SAndroid Build Coastguard Workerdirectory, as it includes \texttt{../blktrace} in the \texttt{Makefile}. 51*1a3d31e3SAndroid Build Coastguard Worker 52*1a3d31e3SAndroid Build Coastguard Worker 53*1a3d31e3SAndroid Build Coastguard Worker%--------------------- 54*1a3d31e3SAndroid Build Coastguard Worker\newpage\section{\texttt{btrecord} and \texttt{btreplay} Operating Model} 55*1a3d31e3SAndroid Build Coastguard Worker 56*1a3d31e3SAndroid Build Coastguard WorkerThe \texttt{blktrace} utility provides the ability to collect detailed 57*1a3d31e3SAndroid Build Coastguard Workertraces from the kernel for each IO processed by the block IO layer. The 58*1a3d31e3SAndroid Build Coastguard Workertraces provide a complete timeline for each IO processed, including 59*1a3d31e3SAndroid Build Coastguard Workerdetailed information concerning when an IO was first received by the block 60*1a3d31e3SAndroid Build Coastguard WorkerIO layer -- indicating the device, CPU number, time stamp, IO direction, 61*1a3d31e3SAndroid Build Coastguard Workersector number and IO size (number of sectors). Using this information, 62*1a3d31e3SAndroid Build Coastguard Workerone is able to \emph{replay} the IO again on the same machine or another 63*1a3d31e3SAndroid Build Coastguard Workerset up entirely. 64*1a3d31e3SAndroid Build Coastguard Worker 65*1a3d31e3SAndroid Build Coastguard Worker\subsection{Basic Workflow} 66*1a3d31e3SAndroid Build Coastguard WorkerThe basic operating work-flow to replay IOs would be something like: 67*1a3d31e3SAndroid Build Coastguard Worker 68*1a3d31e3SAndroid Build Coastguard Worker\begin{enumerate} 69*1a3d31e3SAndroid Build Coastguard Worker \item Run \texttt{blktrace} to collect traces. Here you specify the 70*1a3d31e3SAndroid Build Coastguard Worker device or devices that you wish to trace and later replay IOs upon. Note: 71*1a3d31e3SAndroid Build Coastguard Worker the only traces you are interested in are \emph{QUEUE} requests -- 72*1a3d31e3SAndroid Build Coastguard Worker thus, to save system resources (including storage for traces), one could 73*1a3d31e3SAndroid Build Coastguard Worker specify the \texttt{-a queue} command line option to \texttt{blktrace}. 74*1a3d31e3SAndroid Build Coastguard Worker 75*1a3d31e3SAndroid Build Coastguard Worker \item While \texttt{blktrace} is running, you run the workload that you 76*1a3d31e3SAndroid Build Coastguard Worker are interested in. 77*1a3d31e3SAndroid Build Coastguard Worker 78*1a3d31e3SAndroid Build Coastguard Worker \item When the work load has completed, you stop the \texttt{blktrace} 79*1a3d31e3SAndroid Build Coastguard Worker utility (thus saving all traces over the complete workload). 80*1a3d31e3SAndroid Build Coastguard Worker 81*1a3d31e3SAndroid Build Coastguard Worker \item You extract the pertinent IO information from the traces saved by 82*1a3d31e3SAndroid Build Coastguard Worker \texttt{blktrace} using the \texttt{btrecord} utility. This will parse 83*1a3d31e3SAndroid Build Coastguard Worker each trace file created by \texttt{blktrace}, and craft IO descriptions 84*1a3d31e3SAndroid Build Coastguard Worker to be used in the next phase of the workload processing. 85*1a3d31e3SAndroid Build Coastguard Worker 86*1a3d31e3SAndroid Build Coastguard Worker \item Once \texttt{btrecord} has successfully created a series of data 87*1a3d31e3SAndroid Build Coastguard Worker files to be processed, you can run the \texttt{btreplay} utility which 88*1a3d31e3SAndroid Build Coastguard Worker attempts to generate the same IOs seen during the sample workload phase. 89*1a3d31e3SAndroid Build Coastguard Worker\end{enumerate} 90*1a3d31e3SAndroid Build Coastguard Worker 91*1a3d31e3SAndroid Build Coastguard Worker\subsection{IO Stream Replay Characteristics} 92*1a3d31e3SAndroid Build Coastguard Worker The major characteristics of the IO stream that are kept intact include: 93*1a3d31e3SAndroid Build Coastguard Worker 94*1a3d31e3SAndroid Build Coastguard Worker \begin{description} 95*1a3d31e3SAndroid Build Coastguard Worker \item[Device] The IOs are replayed on the same device as was seen 96*1a3d31e3SAndroid Build Coastguard Worker during the sample workload. 97*1a3d31e3SAndroid Build Coastguard Worker 98*1a3d31e3SAndroid Build Coastguard Worker \item[IO direction] The same IO direction (read/write) is maintained. 99*1a3d31e3SAndroid Build Coastguard Worker 100*1a3d31e3SAndroid Build Coastguard Worker \item[IO offset] The same device offset is maintained. 101*1a3d31e3SAndroid Build Coastguard Worker 102*1a3d31e3SAndroid Build Coastguard Worker \item[IO size] The same number of sectors are transferred. 103*1a3d31e3SAndroid Build Coastguard Worker 104*1a3d31e3SAndroid Build Coastguard Worker \item[Time differential] The time stamps stored during the 105*1a3d31e3SAndroid Build Coastguard Worker \texttt{blktrace} run are used to determine the amount of time between 106*1a3d31e3SAndroid Build Coastguard Worker IOs during the sample workload. \texttt{btreplay} \emph{attempts} to 107*1a3d31e3SAndroid Build Coastguard Worker maintain the same time differential between IOs, but no guarantees as 108*1a3d31e3SAndroid Build Coastguard Worker to complete accuracy are provided by the utility. 109*1a3d31e3SAndroid Build Coastguard Worker 110*1a3d31e3SAndroid Build Coastguard Worker \item[Device IO Stream Ordering] All IOs on a device are submitted in 111*1a3d31e3SAndroid Build Coastguard Worker the precise order they were seen during the sample workload run. 112*1a3d31e3SAndroid Build Coastguard Worker \end{description} 113*1a3d31e3SAndroid Build Coastguard Worker 114*1a3d31e3SAndroid Build Coastguard Worker As noted above, the time between IOs may not be accurately maintained 115*1a3d31e3SAndroid Build Coastguard Worker during replays. In addition the actual ordering of IOs \emph{between} 116*1a3d31e3SAndroid Build Coastguard Worker devices is not necessarily maintained. (Each device with an IO stream 117*1a3d31e3SAndroid Build Coastguard Worker maintains its own concept of time, and thus there may be slippage of the 118*1a3d31e3SAndroid Build Coastguard Worker time kept between managing threads.) 119*1a3d31e3SAndroid Build Coastguard Worker 120*1a3d31e3SAndroid Build Coastguard Worker \begin{quotation} 121*1a3d31e3SAndroid Build Coastguard Worker We have prototyped a different approach, wherein a single managing 122*1a3d31e3SAndroid Build Coastguard Worker thread handles all IOs across all devices. This approach, while 123*1a3d31e3SAndroid Build Coastguard Worker guaranteeing correct ordering of IOs across all devices, resulted in 124*1a3d31e3SAndroid Build Coastguard Worker much worse timing on a per IO basis. 125*1a3d31e3SAndroid Build Coastguard Worker \end{quotation} 126*1a3d31e3SAndroid Build Coastguard Worker 127*1a3d31e3SAndroid Build Coastguard Worker\subsection{\texttt{btrecord/btreplay} Method of Operation} 128*1a3d31e3SAndroid Build Coastguard Worker 129*1a3d31e3SAndroid Build Coastguard WorkerAs noted above, \texttt{btrecord} extracts \texttt{QUEUE} operations from 130*1a3d31e3SAndroid Build Coastguard Worker\texttt{blktrace} output. These \texttt{QUEUE} operations indicate the 131*1a3d31e3SAndroid Build Coastguard Workerentrance of IOs into the block IO layer. In order to replay these IOs with 132*1a3d31e3SAndroid Build Coastguard Workersome accuracy in regards to ordering and timeliness, we decided to take 133*1a3d31e3SAndroid Build Coastguard Workermultiple sequential (in time) IOs and put them in a single \emph{bunch} of 134*1a3d31e3SAndroid Build Coastguard WorkerIOs that will be processed as a single \emph{asynchronous IO} call to the 135*1a3d31e3SAndroid Build Coastguard Workerkernel\footnote{Attempts to do them individually resulted in too large of a 136*1a3d31e3SAndroid Build Coastguard Workerturnaround time penalty (user-space to kernel and back). Note that in a 137*1a3d31e3SAndroid Build Coastguard Workernumber of workloads, the IOs are coming in from the page cache handling 138*1a3d31e3SAndroid Build Coastguard Workercode, and thus are submitted to the block IO layer with \emph{very small} 139*1a3d31e3SAndroid Build Coastguard Workertime intervals between issues.}. To manage the size of the \emph{bunches}, 140*1a3d31e3SAndroid Build Coastguard Workerthe \texttt{btrecord} utility provides you with two controlling knobs: 141*1a3d31e3SAndroid Build Coastguard Worker 142*1a3d31e3SAndroid Build Coastguard Worker\begin{description} 143*1a3d31e3SAndroid Build Coastguard Worker \item[\texttt{--max-bunch-time}] This is the amount of time to encompass 144*1a3d31e3SAndroid Build Coastguard Worker in one bunch -- only IOs within the time specified are eligible 145*1a3d31e3SAndroid Build Coastguard Worker for \emph{bunching.} The default time is 10 milliseconds (10,000,000 146*1a3d31e3SAndroid Build Coastguard Worker nanoseconds). Refer to section~\ref{sec:c-o-m} on page~\pageref{sec:c-o-m} 147*1a3d31e3SAndroid Build Coastguard Worker for more information. 148*1a3d31e3SAndroid Build Coastguard Worker 149*1a3d31e3SAndroid Build Coastguard Worker \item[\texttt{--max-pkts}] A \emph{bunch} size can be anywhere from 150*1a3d31e3SAndroid Build Coastguard Worker 1 to 512 packets in size and by default we max a bunch to contain no 151*1a3d31e3SAndroid Build Coastguard Worker more than 8 individual IOs. With this option, one can increase or 152*1a3d31e3SAndroid Build Coastguard Worker decrease the maximum \emph{bunch} size. Refer to section~\ref{sec:c-o-M} 153*1a3d31e3SAndroid Build Coastguard Worker on page~\pageref{sec:c-o-M} for more information. 154*1a3d31e3SAndroid Build Coastguard Worker\end{description} 155*1a3d31e3SAndroid Build Coastguard Worker 156*1a3d31e3SAndroid Build Coastguard WorkerEach input data file (one per device per CPU) results in a new record 157*1a3d31e3SAndroid Build Coastguard Workerdata file (again, one per device per CPU) which contains information 158*1a3d31e3SAndroid Build Coastguard Workerabout \emph{bunches} of IOs to be replayed. \texttt{btreplay} operates on 159*1a3d31e3SAndroid Build Coastguard Workerthese record data files by spawning a new pair of threads per file. One 160*1a3d31e3SAndroid Build Coastguard Workerthread manages the submitting of AIOs per bunch in the record data file, 161*1a3d31e3SAndroid Build Coastguard Workerwhile the other thread manages reclaiming AIOs completed\footnote{We 162*1a3d31e3SAndroid Build Coastguard Workerhave found that having the same thread do both results in a further 163*1a3d31e3SAndroid Build Coastguard Workerreduction in replay timing accuracy.}. 164*1a3d31e3SAndroid Build Coastguard Worker 165*1a3d31e3SAndroid Build Coastguard WorkerEach submitting thread simply reads the input file of \emph{bunches} 166*1a3d31e3SAndroid Build Coastguard Workerrecorded by \texttt{btrecord}, and attempts to faithfully reproduce the 167*1a3d31e3SAndroid Build Coastguard Workerordering and timing of IOs seen during the sample workload. The reclaiming 168*1a3d31e3SAndroid Build Coastguard Workerthread simply waits for AIO completions, freeing up resources for the 169*1a3d31e3SAndroid Build Coastguard Workersubmitting thread to utilize to submit new AIOs. 170*1a3d31e3SAndroid Build Coastguard Worker 171*1a3d31e3SAndroid Build Coastguard WorkerThe number of CPUs being used on the replay system can be different from 172*1a3d31e3SAndroid Build Coastguard Workerthe number on the recorded system. To help with mappings here the 173*1a3d31e3SAndroid Build Coastguard Worker\texttt{--cpus} option allows one to state how many CPUs on the replay 174*1a3d31e3SAndroid Build Coastguard Workersystem to utilize. If the number of CPUs on the replay system is less than 175*1a3d31e3SAndroid Build Coastguard Workeron the recording system, we wrap CPU IDs. This \emph{may} result in an 176*1a3d31e3SAndroid Build Coastguard Workeroverload of CPU processing capabilities on the replay system. (Refer to 177*1a3d31e3SAndroid Build Coastguard Workersection~\ref{sec:p-o-c} on page~\pageref{sec:p-o-c} for more details about the 178*1a3d31e3SAndroid Build Coastguard Worker\texttt{--cpus} option.) 179*1a3d31e3SAndroid Build Coastguard Worker 180*1a3d31e3SAndroid Build Coastguard Worker\newpage\subsection{Known Deficiencies and Proposed Possible Fixes} 181*1a3d31e3SAndroid Build Coastguard Worker 182*1a3d31e3SAndroid Build Coastguard WorkerThe overall known deficiencies with this current set of utilities is 183*1a3d31e3SAndroid Build Coastguard Workeroutlined here, in some cases ideas on additions and/or improvements are 184*1a3d31e3SAndroid Build Coastguard Workerincluded as well. 185*1a3d31e3SAndroid Build Coastguard Worker 186*1a3d31e3SAndroid Build Coastguard Worker\begin{enumerate} 187*1a3d31e3SAndroid Build Coastguard Worker \item Lack of IO ordering across devices. 188*1a3d31e3SAndroid Build Coastguard Worker 189*1a3d31e3SAndroid Build Coastguard Worker \begin{quote} 190*1a3d31e3SAndroid Build Coastguard Worker \emph{We could institute the notion of global time across threads, 191*1a3d31e3SAndroid Build Coastguard Worker and thus ensure IO ordering across devices, with some reduction in 192*1a3d31e3SAndroid Build Coastguard Worker timing accuracy.} 193*1a3d31e3SAndroid Build Coastguard Worker \end{quote} 194*1a3d31e3SAndroid Build Coastguard Worker 195*1a3d31e3SAndroid Build Coastguard Worker \item Lack of IO timing accuracy -- additional time between IO bunches. 196*1a3d31e3SAndroid Build Coastguard Worker 197*1a3d31e3SAndroid Build Coastguard Worker \begin{quote} 198*1a3d31e3SAndroid Build Coastguard Worker \emph{This is the primary problem with any IO replay mechanism -- how 199*1a3d31e3SAndroid Build Coastguard Worker to guarantee per-IO timing accuracy with respect to other replayed IOs? 200*1a3d31e3SAndroid Build Coastguard Worker One idea to reduce errors in this area would be to push the IO replay 201*1a3d31e3SAndroid Build Coastguard Worker into the kernel, where you \emph{may} receive more responsive timings.} 202*1a3d31e3SAndroid Build Coastguard Worker \end{quote} 203*1a3d31e3SAndroid Build Coastguard Worker 204*1a3d31e3SAndroid Build Coastguard Worker \item Bunching of IOs results in reduced time amongst IOs within a bunch. 205*1a3d31e3SAndroid Build Coastguard Worker 206*1a3d31e3SAndroid Build Coastguard Worker \begin{quote} 207*1a3d31e3SAndroid Build Coastguard Worker \emph{The user has \emph{some} control over this (via the 208*1a3d31e3SAndroid Build Coastguard Worker \texttt{--max-pkts} option). One \emph{could} simply specify 209*1a3d31e3SAndroid Build Coastguard Worker \texttt{-max-pkts=1} and then each IO would be treated individually. Of 210*1a3d31e3SAndroid Build Coastguard Worker course, this would probably then run into the problem of excessive 211*1a3d31e3SAndroid Build Coastguard Worker inter-IO times.} 212*1a3d31e3SAndroid Build Coastguard Worker \end{quote} 213*1a3d31e3SAndroid Build Coastguard Worker 214*1a3d31e3SAndroid Build Coastguard Worker \item 1-to-1 mapping of devices -- for now the devices on the replay 215*1a3d31e3SAndroid Build Coastguard Worker machine must be the same as on the recording machine. 216*1a3d31e3SAndroid Build Coastguard Worker 217*1a3d31e3SAndroid Build Coastguard Worker \begin{quote} 218*1a3d31e3SAndroid Build Coastguard Worker \emph{It should be relatively trivial to add in the notion of 219*1a3d31e3SAndroid Build Coastguard Worker mapping -- simply include a file that is read which maps devices 220*1a3d31e3SAndroid Build Coastguard Worker on one machine to devices (with offsets and sizes) on the replay 221*1a3d31e3SAndroid Build Coastguard Worker machine\footnote{The notion of an offset and device size to replay on 222*1a3d31e3SAndroid Build Coastguard Worker could be used to both allow for a single device to masquerade as more 223*1a3d31e3SAndroid Build Coastguard Worker than one device, and could be utilized in case the replay device is 224*1a3d31e3SAndroid Build Coastguard Worker smaller than the recorded device.}.} 225*1a3d31e3SAndroid Build Coastguard Worker 226*1a3d31e3SAndroid Build Coastguard Worker \medskip\emph{One could also add in the notion of CPU mappings as well -- 227*1a3d31e3SAndroid Build Coastguard Worker device $D_{rec}$ managed by CPU $C_{rec}$ on the recorded system 228*1a3d31e3SAndroid Build Coastguard Worker shall be replayed on device $D_{rep}$ and CPU $C_{rep}$ on the 229*1a3d31e3SAndroid Build Coastguard Worker replay machine.} 230*1a3d31e3SAndroid Build Coastguard Worker 231*1a3d31e3SAndroid Build Coastguard Worker \bigskip 232*1a3d31e3SAndroid Build Coastguard Worker \begin{quote} 233*1a3d31e3SAndroid Build Coastguard Worker With version 0.9.1 we now support the \texttt{-M} option to do this 234*1a3d31e3SAndroid Build Coastguard Worker -- see section~\ref{sec:p-o-M} on page~\pageref{sec:p-o-M} for more 235*1a3d31e3SAndroid Build Coastguard Worker information on device mapping. 236*1a3d31e3SAndroid Build Coastguard Worker \end{quote} 237*1a3d31e3SAndroid Build Coastguard Worker \end{quote} 238*1a3d31e3SAndroid Build Coastguard Worker 239*1a3d31e3SAndroid Build Coastguard Worker\end{enumerate} 240*1a3d31e3SAndroid Build Coastguard Worker 241*1a3d31e3SAndroid Build Coastguard Worker%--------------------- 242*1a3d31e3SAndroid Build Coastguard Worker\newpage\section{\label{sec:command-line}Command Line Options} 243*1a3d31e3SAndroid Build Coastguard Worker\subsection{\texttt{btrecord} Command Line Options} 244*1a3d31e3SAndroid Build Coastguard Worker\begin{figure}[h!] 245*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim} 246*1a3d31e3SAndroid Build Coastguard WorkerUsage: btrecord -- version 0.9.3 247*1a3d31e3SAndroid Build Coastguard Worker 248*1a3d31e3SAndroid Build Coastguard Worker [ -d <dir> : --input-directory=<dir> ] Default: . 249*1a3d31e3SAndroid Build Coastguard Worker [ -D <dir> : --output-directory=<dir>] Default: . 250*1a3d31e3SAndroid Build Coastguard Worker [ -F : --find-traces ] Default: Off 251*1a3d31e3SAndroid Build Coastguard Worker [ -h : --help ] Default: Off 252*1a3d31e3SAndroid Build Coastguard Worker [ -m <nsec> : --max-bunch-time=<nsec> ] Default: 10 msec 253*1a3d31e3SAndroid Build Coastguard Worker [ -M <pkts> : --max-pkts=<pkts> ] Default: 8 254*1a3d31e3SAndroid Build Coastguard Worker [ -o <base> : --output-base=<base> ] Default: replay 255*1a3d31e3SAndroid Build Coastguard Worker [ -v : --verbose ] Default: Off 256*1a3d31e3SAndroid Build Coastguard Worker [ -V : --version ] Default: Off 257*1a3d31e3SAndroid Build Coastguard Worker <dev>... Default: None 258*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim} 259*1a3d31e3SAndroid Build Coastguard Worker\caption{\label{fig:btrecord--help}\texttt{btrecord --help} Output} 260*1a3d31e3SAndroid Build Coastguard Worker\end{figure} 261*1a3d31e3SAndroid Build Coastguard Worker\FloatBarrier 262*1a3d31e3SAndroid Build Coastguard Worker 263*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\label{sec:c-o-d}\texttt{-d} or 264*1a3d31e3SAndroid Build Coastguard Worker\texttt{--input-directory}\\Set Input Directory} 265*1a3d31e3SAndroid Build Coastguard Worker 266*1a3d31e3SAndroid Build Coastguard WorkerThe \texttt{-d} option requires a single parameter providing the directory 267*1a3d31e3SAndroid Build Coastguard Workername for where input files are to be found. The default directory is the 268*1a3d31e3SAndroid Build Coastguard Workercurrent directory (\texttt{.}). 269*1a3d31e3SAndroid Build Coastguard Worker 270*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\label{sec:c-o-D}\texttt{-D} or 271*1a3d31e3SAndroid Build Coastguard Worker\texttt{--output-directory}\\Set Output Directory} 272*1a3d31e3SAndroid Build Coastguard Worker 273*1a3d31e3SAndroid Build Coastguard WorkerThe \texttt{-D} option requires a single parameter providing the directory 274*1a3d31e3SAndroid Build Coastguard Workername for where output files are to be placed. The default directory is the 275*1a3d31e3SAndroid Build Coastguard Workercurrent directory (\texttt{.}). 276*1a3d31e3SAndroid Build Coastguard Worker 277*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\texttt{-F} or \texttt{--find-traces}\\Find Trace Files 278*1a3d31e3SAndroid Build Coastguard WorkerAutomatically} 279*1a3d31e3SAndroid Build Coastguard Worker 280*1a3d31e3SAndroid Build Coastguard WorkerThe \texttt{-F} option instructs \texttt{btrecord} to go find all the 281*1a3d31e3SAndroid Build Coastguard Workertrace files in the directory specified (either via the \texttt{-d} 282*1a3d31e3SAndroid Build Coastguard Workeroption, or in the default directory '.'). 283*1a3d31e3SAndroid Build Coastguard Worker 284*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\texttt{-h} or \texttt{--help}\\Display Help Message} 285*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\texttt{-V} or \texttt{--version}\\Display 286*1a3d31e3SAndroid Build Coastguard Worker\texttt{btrecord}Version} 287*1a3d31e3SAndroid Build Coastguard Worker 288*1a3d31e3SAndroid Build Coastguard WorkerThe \texttt{-h} option displays the command line options and 289*1a3d31e3SAndroid Build Coastguard Workerdefaults, as presented in figure~\ref{fig:btrecord--help} on 290*1a3d31e3SAndroid Build Coastguard Workerpage~\pageref{fig:btrecord--help}. 291*1a3d31e3SAndroid Build Coastguard Worker 292*1a3d31e3SAndroid Build Coastguard WorkerThe \texttt{-V} option displays the \texttt{btreplay} version, as shown here: 293*1a3d31e3SAndroid Build Coastguard Worker 294*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim} 295*1a3d31e3SAndroid Build Coastguard Worker$ btrecord --version 296*1a3d31e3SAndroid Build Coastguard Workerbtrecord -- version 0.9.0 297*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim} 298*1a3d31e3SAndroid Build Coastguard Worker 299*1a3d31e3SAndroid Build Coastguard WorkerBoth commands exit immediately after processing the option. 300*1a3d31e3SAndroid Build Coastguard Worker 301*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\label{sec:c-o-m}\texttt{-m} or 302*1a3d31e3SAndroid Build Coastguard Worker\texttt{--max-bunch-time}\\Set Maximum Time Per Bunch} 303*1a3d31e3SAndroid Build Coastguard Worker 304*1a3d31e3SAndroid Build Coastguard WorkerThe \texttt{-m} option requires a single parameter which specifies an 305*1a3d31e3SAndroid Build Coastguard Workeramount of time (in nanoseconds) to include in any one bunch of IOs that 306*1a3d31e3SAndroid Build Coastguard Workerare to be processed. The smaller the value, the smaller the number of 307*1a3d31e3SAndroid Build Coastguard WorkerIOs processed at one time -- perhaps yielding in more realistic replay. 308*1a3d31e3SAndroid Build Coastguard WorkerHowever, after a certain point the amount of overhead per bunch may result 309*1a3d31e3SAndroid Build Coastguard Workerin additional real replay time, thus yielding less accurate replay times. 310*1a3d31e3SAndroid Build Coastguard Worker 311*1a3d31e3SAndroid Build Coastguard WorkerThe default value is 10,000,000 nanoseconds (10 milliseconds). 312*1a3d31e3SAndroid Build Coastguard Worker 313*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\label{sec:c-o-M}\texttt{-M} or 314*1a3d31e3SAndroid Build Coastguard Worker\texttt{--max-pkts}\\Set Maximum Packets Per Bunch} 315*1a3d31e3SAndroid Build Coastguard Worker 316*1a3d31e3SAndroid Build Coastguard WorkerThe \texttt{-M} option requires a single parameter which specifies the 317*1a3d31e3SAndroid Build Coastguard Workermaximum number of IOs to store in a single bunch. As with the \texttt{-m} 318*1a3d31e3SAndroid Build Coastguard Workeroption (section~\ref{sec:c-o-m}), smaller values \emph{may} or \emph{may not} 319*1a3d31e3SAndroid Build Coastguard Workeryield more accurate replay times. 320*1a3d31e3SAndroid Build Coastguard Worker 321*1a3d31e3SAndroid Build Coastguard WorkerThe default value is 8, with a maximum value of up to 512 being supported. 322*1a3d31e3SAndroid Build Coastguard Worker 323*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\label{sec:c-o-o}\texttt{-o} or 324*1a3d31e3SAndroid Build Coastguard Worker\texttt{--output-base}\\Set Base Name for Output Files} 325*1a3d31e3SAndroid Build Coastguard Worker 326*1a3d31e3SAndroid Build Coastguard WorkerEach output file has 3 fields: 327*1a3d31e3SAndroid Build Coastguard Worker 328*1a3d31e3SAndroid Build Coastguard Worker\begin{enumerate} 329*1a3d31e3SAndroid Build Coastguard Worker \item Device identifier (taken directly from the device name of the 330*1a3d31e3SAndroid Build Coastguard Worker \texttt{blktrace} output file). 331*1a3d31e3SAndroid Build Coastguard Worker 332*1a3d31e3SAndroid Build Coastguard Worker \item \texttt{btrecord} base name -- by default ``replay''. 333*1a3d31e3SAndroid Build Coastguard Worker 334*1a3d31e3SAndroid Build Coastguard Worker \item And the CPU number (again, taken directly from the 335*1a3d31e3SAndroid Build Coastguard Worker \texttt{blktrace} output file name). 336*1a3d31e3SAndroid Build Coastguard Worker\end{enumerate} 337*1a3d31e3SAndroid Build Coastguard Worker 338*1a3d31e3SAndroid Build Coastguard WorkerThis option requires a single parameter that will override the default name 339*1a3d31e3SAndroid Build Coastguard Worker(replay), and replace it with the specified value. 340*1a3d31e3SAndroid Build Coastguard Worker 341*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\label{sec:c-o-v}\texttt{-v} or 342*1a3d31e3SAndroid Build Coastguard Worker\texttt{--verbose}\\Select Verbose Output} 343*1a3d31e3SAndroid Build Coastguard Worker 344*1a3d31e3SAndroid Build Coastguard WorkerThis option will output some simple statistics at the end of a successful 345*1a3d31e3SAndroid Build Coastguard Workerrun. Figure~\ref{fig:verb-out} (page~\pageref{fig:verb-out}) shows 346*1a3d31e3SAndroid Build Coastguard Workeran example of some output, while figure~\ref{fig:verb-defs} 347*1a3d31e3SAndroid Build Coastguard Worker(page~\pageref{fig:verb-defs}) shows what the fields mean. 348*1a3d31e3SAndroid Build Coastguard Worker 349*1a3d31e3SAndroid Build Coastguard Worker\begin{figure}[h!] 350*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim} 351*1a3d31e3SAndroid Build Coastguard Workersdab:0: 580661 pkts (tot), 126030 pkts (replay), 89809 bunches, 1.4 pkts/bunch 352*1a3d31e3SAndroid Build Coastguard Workersdab:1: 2559775 pkts (tot), 430172 pkts (replay), 293029 bunches, 1.5 pkts/bunch 353*1a3d31e3SAndroid Build Coastguard Workersdab:2: 653559 pkts (tot), 136522 pkts (replay), 102288 bunches, 1.3 pkts/bunch 354*1a3d31e3SAndroid Build Coastguard Workersdab:3: 474773 pkts (tot), 117849 pkts (replay), 69572 bunches, 1.7 pkts/bunch 355*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim} 356*1a3d31e3SAndroid Build Coastguard Worker\caption{\label{fig:verb-out}Verbose Output Example} 357*1a3d31e3SAndroid Build Coastguard Worker\end{figure} 358*1a3d31e3SAndroid Build Coastguard Worker\FloatBarrier 359*1a3d31e3SAndroid Build Coastguard Worker 360*1a3d31e3SAndroid Build Coastguard Worker\begin{figure}[h!] 361*1a3d31e3SAndroid Build Coastguard Worker\begin{description} 362*1a3d31e3SAndroid Build Coastguard Worker \item[Field 1] The first field contains the device name and CPU 363*1a3d31e3SAndroid Build Coastguard Worker identifier. Thus: \texttt{sdab:0:} means the device \texttt{sdab} and 364*1a3d31e3SAndroid Build Coastguard Worker traces on CPU 0. 365*1a3d31e3SAndroid Build Coastguard Worker 366*1a3d31e3SAndroid Build Coastguard Worker \item[Field 2] The second field contains the total number of packets 367*1a3d31e3SAndroid Build Coastguard Worker processed for each device file. 368*1a3d31e3SAndroid Build Coastguard Worker 369*1a3d31e3SAndroid Build Coastguard Worker \item[Field 3] The next field shows the number of packets eligible for 370*1a3d31e3SAndroid Build Coastguard Worker replay. 371*1a3d31e3SAndroid Build Coastguard Worker 372*1a3d31e3SAndroid Build Coastguard Worker \item[Field 4] The fourth field contains the total number of IO bunches. 373*1a3d31e3SAndroid Build Coastguard Worker 374*1a3d31e3SAndroid Build Coastguard Worker \item[Field 5] The last field shows the average number of IOs per bunch 375*1a3d31e3SAndroid Build Coastguard Worker recorded. 376*1a3d31e3SAndroid Build Coastguard Worker\end{description} 377*1a3d31e3SAndroid Build Coastguard Worker\caption{\label{fig:verb-defs}Verbose Field Definitions} 378*1a3d31e3SAndroid Build Coastguard Worker\end{figure} 379*1a3d31e3SAndroid Build Coastguard Worker\FloatBarrier 380*1a3d31e3SAndroid Build Coastguard Worker 381*1a3d31e3SAndroid Build Coastguard Worker%--------------------- 382*1a3d31e3SAndroid Build Coastguard Worker\newpage\subsection{\texttt{btreplay} Command Line Options} 383*1a3d31e3SAndroid Build Coastguard Worker\begin{figure}[h!] 384*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim} 385*1a3d31e3SAndroid Build Coastguard WorkerUsage: btreplay -- version 0.9.3 386*1a3d31e3SAndroid Build Coastguard Worker 387*1a3d31e3SAndroid Build Coastguard Worker [ -c <cpus> : --cpus=<cpus> ] Default: 1 388*1a3d31e3SAndroid Build Coastguard Worker [ -d <dir> : --input-directory=<dir> ] Default: . 389*1a3d31e3SAndroid Build Coastguard Worker [ -F : --find-records ] Default: Off 390*1a3d31e3SAndroid Build Coastguard Worker [ -h : --help ] Default: Off 391*1a3d31e3SAndroid Build Coastguard Worker [ -i <base> : --input-base=<base> ] Default: replay 392*1a3d31e3SAndroid Build Coastguard Worker [ -I <iters>: --iterations=<iters> ] Default: 1 393*1a3d31e3SAndroid Build Coastguard Worker [ -M <file> : --map-devs=<file> ] Default: None 394*1a3d31e3SAndroid Build Coastguard Worker [ -N : --no-stalls ] Default: Off 395*1a3d31e3SAndroid Build Coastguard Worker [ -x <int> : --acc-factor=<int> ] Default: 1 396*1a3d31e3SAndroid Build Coastguard Worker [ -v : --verbose ] Default: Off 397*1a3d31e3SAndroid Build Coastguard Worker [ -V : --version ] Default: Off 398*1a3d31e3SAndroid Build Coastguard Worker [ -W : --write-enable ] Default: Off 399*1a3d31e3SAndroid Build Coastguard Worker <dev...> Default: None 400*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim} 401*1a3d31e3SAndroid Build Coastguard Worker\caption{\label{fig:btreplay--help}\texttt{btreplay --help} Output} 402*1a3d31e3SAndroid Build Coastguard Worker\end{figure} 403*1a3d31e3SAndroid Build Coastguard Worker\FloatBarrier 404*1a3d31e3SAndroid Build Coastguard Worker 405*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\label{sec:p-o-c}\texttt{-c} or 406*1a3d31e3SAndroid Build Coastguard Worker\texttt{--cpus}\\Set Number of CPUs to Use} 407*1a3d31e3SAndroid Build Coastguard Worker 408*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\label{sec:p-o-d}\texttt{-d} or 409*1a3d31e3SAndroid Build Coastguard Worker\texttt{--input-directory}\\Set Input Directory} 410*1a3d31e3SAndroid Build Coastguard Worker 411*1a3d31e3SAndroid Build Coastguard WorkerThe \texttt{-d} option requires a single parameter providing the directory 412*1a3d31e3SAndroid Build Coastguard Workername for where input files are to be found. The default directory is the 413*1a3d31e3SAndroid Build Coastguard Workercurrent directory (\texttt{.}). 414*1a3d31e3SAndroid Build Coastguard Worker 415*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\texttt{-F} or \texttt{--find-records}\\Find RecordFiles 416*1a3d31e3SAndroid Build Coastguard WorkerAutomatically} 417*1a3d31e3SAndroid Build Coastguard Worker 418*1a3d31e3SAndroid Build Coastguard WorkerThe \texttt{-F} option instructs \texttt{btreplay} to go find all the 419*1a3d31e3SAndroid Build Coastguard Workerrecord files in the directory specified (either via the \texttt{-d} 420*1a3d31e3SAndroid Build Coastguard Workeroption, or in the default directory '.'). 421*1a3d31e3SAndroid Build Coastguard Worker 422*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\texttt{-h} or \texttt{--help}\\Display Help Message} 423*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\texttt{-V} or \texttt{--version}\\Display 424*1a3d31e3SAndroid Build Coastguard Worker\texttt{btreplay}Version} 425*1a3d31e3SAndroid Build Coastguard Worker 426*1a3d31e3SAndroid Build Coastguard WorkerThe \texttt{-h} option displays the command line options and 427*1a3d31e3SAndroid Build Coastguard Workerdefaults, as presented in figure~\ref{fig:btreplay--help} on 428*1a3d31e3SAndroid Build Coastguard Workerpage~\pageref{fig:btreplay--help}. 429*1a3d31e3SAndroid Build Coastguard Worker 430*1a3d31e3SAndroid Build Coastguard WorkerThe \texttt{-V} option displays the \texttt{btreplay} version, as show here: 431*1a3d31e3SAndroid Build Coastguard Worker 432*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim} 433*1a3d31e3SAndroid Build Coastguard Worker$ btreplay --version 434*1a3d31e3SAndroid Build Coastguard Workerbtreplay -- version 0.9.0 435*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim} 436*1a3d31e3SAndroid Build Coastguard Worker 437*1a3d31e3SAndroid Build Coastguard WorkerBoth commands exit immediately after processing the option. 438*1a3d31e3SAndroid Build Coastguard Worker 439*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\label{sec:p-o-i}\texttt{-i} or 440*1a3d31e3SAndroid Build Coastguard Worker\texttt{--input-base}\\Set Base Name for Input Files} 441*1a3d31e3SAndroid Build Coastguard Worker 442*1a3d31e3SAndroid Build Coastguard WorkerEach input file has 3 fields: 443*1a3d31e3SAndroid Build Coastguard Worker 444*1a3d31e3SAndroid Build Coastguard Worker\begin{enumerate} 445*1a3d31e3SAndroid Build Coastguard Worker \item Device identifier (taken directly from the device name of the 446*1a3d31e3SAndroid Build Coastguard Worker \texttt{blktrace} output file). 447*1a3d31e3SAndroid Build Coastguard Worker 448*1a3d31e3SAndroid Build Coastguard Worker \item \texttt{btrecord} base name -- by default ``replay''. 449*1a3d31e3SAndroid Build Coastguard Worker 450*1a3d31e3SAndroid Build Coastguard Worker \item And the CPU number (again, taken directly from the 451*1a3d31e3SAndroid Build Coastguard Worker \texttt{blktrace} output file name). 452*1a3d31e3SAndroid Build Coastguard Worker\end{enumerate} 453*1a3d31e3SAndroid Build Coastguard Worker 454*1a3d31e3SAndroid Build Coastguard WorkerThis option requires a single parameter that will override the default name 455*1a3d31e3SAndroid Build Coastguard Worker(replay), and replace it with the specified value. 456*1a3d31e3SAndroid Build Coastguard Worker 457*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\label{sec:p-o-I}\texttt{-I} or 458*1a3d31e3SAndroid Build Coastguard Worker\texttt{--iterations}\\Set Number of Iterations to Run} 459*1a3d31e3SAndroid Build Coastguard Worker 460*1a3d31e3SAndroid Build Coastguard WorkerThis option requires a single parameter which specifies the number of times 461*1a3d31e3SAndroid Build Coastguard Workerto run through the input files. The default value is 1. 462*1a3d31e3SAndroid Build Coastguard Worker 463*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\label{sec:p-o-M}\texttt{-M} or \texttt{map-devs}\\ 464*1a3d31e3SAndroid Build Coastguard WorkerSpecify Device Mappings} 465*1a3d31e3SAndroid Build Coastguard Worker 466*1a3d31e3SAndroid Build Coastguard WorkerThis option requires a single parameter which specifies the name of a 467*1a3d31e3SAndroid Build Coastguard Workerfile containing device mappings. The file must be very simply managed, with 468*1a3d31e3SAndroid Build Coastguard Workerjust two pieces of data per line: 469*1a3d31e3SAndroid Build Coastguard Worker 470*1a3d31e3SAndroid Build Coastguard Worker\begin{enumerate} 471*1a3d31e3SAndroid Build Coastguard Worker \item The device name on the recorded system (with the \texttt{'/dev/'} 472*1a3d31e3SAndroid Build Coastguard Worker removed). Example: \texttt{/dev/sda} would just be \texttt{sda}. 473*1a3d31e3SAndroid Build Coastguard Worker 474*1a3d31e3SAndroid Build Coastguard Worker \item The device name on the replay system to use (again, without the 475*1a3d31e3SAndroid Build Coastguard Worker \texttt{'/dev/'} path prepended). 476*1a3d31e3SAndroid Build Coastguard Worker\end{enumerate} 477*1a3d31e3SAndroid Build Coastguard Worker 478*1a3d31e3SAndroid Build Coastguard WorkerAn example file for when one would map devices \texttt{/dev/sda} and 479*1a3d31e3SAndroid Build Coastguard Worker\texttt{/dev/sdb} on the recorded system to \texttt{dev/sdg} and 480*1a3d31e3SAndroid Build Coastguard Worker\texttt{sdh} on the replay system would be: 481*1a3d31e3SAndroid Build Coastguard Worker 482*1a3d31e3SAndroid Build Coastguard Worker\begin{verbatim} 483*1a3d31e3SAndroid Build Coastguard Workersda sdg 484*1a3d31e3SAndroid Build Coastguard Workersdb sdh 485*1a3d31e3SAndroid Build Coastguard Worker\end{verbatim} 486*1a3d31e3SAndroid Build Coastguard Worker 487*1a3d31e3SAndroid Build Coastguard WorkerThe only entries in the file that are allowed are these two element lines 488*1a3d31e3SAndroid Build Coastguard Worker-- we do not (yet?) support the notion of blank lines, or comment lines, or 489*1a3d31e3SAndroid Build Coastguard Workerthe like. 490*1a3d31e3SAndroid Build Coastguard Worker 491*1a3d31e3SAndroid Build Coastguard WorkerThe utility \emph{does} allow for multiple \texttt{-M} options to be 492*1a3d31e3SAndroid Build Coastguard Workersupplied on the command line. 493*1a3d31e3SAndroid Build Coastguard Worker 494*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\label{sec:o-N}\texttt{-N} or \texttt{--no-stalls}\\Disable 495*1a3d31e3SAndroid Build Coastguard WorkerPre-bunch Stalls} 496*1a3d31e3SAndroid Build Coastguard Worker 497*1a3d31e3SAndroid Build Coastguard WorkerWhen specified on the command line, all pre-bunch stall indicators will be 498*1a3d31e3SAndroid Build Coastguard Workerignored. IOs will be replayed without inter-bunch delays. 499*1a3d31e3SAndroid Build Coastguard Worker 500*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\label{sec:o-x}\texttt{-x} or \texttt{--acc-factor}\\Acceleration 501*1a3d31e3SAndroid Build Coastguard WorkerFactor} 502*1a3d31e3SAndroid Build Coastguard Worker 503*1a3d31e3SAndroid Build Coastguard Worker While the \texttt{--no-stalls} option allows the traces to be replayed 504*1a3d31e3SAndroid Build Coastguard Worker with no waiting time, this option specifies some acceleration factor 505*1a3d31e3SAndroid Build Coastguard Worker to be used. If the value of two is used, then the stall time is 506*1a3d31e3SAndroid Build Coastguard Worker divided by half resulting in a reduction of the execution time by 507*1a3d31e3SAndroid Build Coastguard Worker this factor. Note that if this number is too high, the results will 508*1a3d31e3SAndroid Build Coastguard Worker be equivalent of not having stall. 509*1a3d31e3SAndroid Build Coastguard Worker 510*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\label{sec:p-o-v}\texttt{-v} or 511*1a3d31e3SAndroid Build Coastguard Worker\texttt{--verbose}\\Select Verbose Output} 512*1a3d31e3SAndroid Build Coastguard Worker 513*1a3d31e3SAndroid Build Coastguard WorkerWhen specified on the command line, this option instructs \texttt{btreplay} 514*1a3d31e3SAndroid Build Coastguard Workerto store information concerning each \emph{stall} and IO operation 515*1a3d31e3SAndroid Build Coastguard Workerperformed by \texttt{btreplay}. The name of each file so created will be 516*1a3d31e3SAndroid Build Coastguard Workerthe input file name used with an extension of \texttt{.rep} appended onto 517*1a3d31e3SAndroid Build Coastguard Workerit. Thus, an input file of the name \texttt{sdab.replay.3} would generate a 518*1a3d31e3SAndroid Build Coastguard Workerverbose output file with the name \texttt{sdab.replay.3.rep} in the 519*1a3d31e3SAndroid Build Coastguard Workerdirectory specified for input files. 520*1a3d31e3SAndroid Build Coastguard Worker 521*1a3d31e3SAndroid Build Coastguard WorkerIn addition, \texttt{btreplay} will also output to \texttt{stderr} the 522*1a3d31e3SAndroid Build Coastguard Workernames of the input files being processed. 523*1a3d31e3SAndroid Build Coastguard Worker 524*1a3d31e3SAndroid Build Coastguard Worker\subsubsection{\label{sec:p-o-W}\texttt{-W} or 525*1a3d31e3SAndroid Build Coastguard Worker\texttt{--write-enable}\\Enable Writing During Replay} 526*1a3d31e3SAndroid Build Coastguard Worker 527*1a3d31e3SAndroid Build Coastguard WorkerAs a precautionary measure, by default \texttt{btreplay} will \emph{not} 528*1a3d31e3SAndroid Build Coastguard Workerprocess \emph{write} requests. In order to enable \texttt{btreplay} to 529*1a3d31e3SAndroid Build Coastguard Workeractually \emph{write} to devices one must explicitly specify the 530*1a3d31e3SAndroid Build Coastguard Worker\texttt{-W} option. 531*1a3d31e3SAndroid Build Coastguard Worker 532*1a3d31e3SAndroid Build Coastguard Worker\end{document} 533