iowatcher(1)

πŸ“¦
version 1.3.0+git.20211021 Β· 2 versions
, in centos-stream 10, centos-stream 9, fedora 43, fedora 44, nixos 26.05, nixpkgs unstable, opensuse-leap 16.0

πŸ’… iowatcher(1) β€” like, the User Commands one, bestie

Okay so picture this: you've got a blktrace run and a whole bunch of numbers, and honestly? Numbers are boring. iowatcher is the icon that turns all of that into visualizations β€” graphs, images, whole entire movies. It's giving data glow-up. ✨

It lives in the User Commands section of the manual, and the whole vibe is "make the IO make sense at a glance."

🌸 SYNOPSIS 🌸

iowatcher [options] [--] [program arguments ...]

πŸ¦‹ DESCRIPTION πŸ¦‹

iowatcher graphs the results of a blktrace run. That's the whole assignment, and it ate. πŸ’…

It's lowkey flexible too β€” it can:

  • graph the result of an existing blktrace,
  • start a new blktrace,
  • or start a new blktrace and a benchmark run at the same time (main character energy, honestly).

Then it can create an image or a movie of the IO from a given trace. And the output format? iowatcher can produce either SVG files, or movies in mp4 format (with ffmpeg) or ogg format (with png2theora). Pick your fighter. πŸŽ€


πŸ‘‘ OPTIONS πŸ‘‘

  • --help β€” prints a brief usage summary. Short, sweet, helpful. We love a king who gets to the point. 🫢
  • -d, --device device β€” controls which device you are tracing. Heads up: you can only trace one device at a time for now. This gets sent directly to blktrace, and it's only needed when you're making a new trace.
  • -D, --blktrace-destination destination β€” the destination for blktrace. That's it, that's the whole thing.
  • -p, --prog β€” run a program while blktrace is run. The program and its arguments must be specified after all other options. And ngl, this one has lore: the option previously required the program to be given as a single argument, but now it tells iowatcher to expect extra arguments that it should run during the trace. Glow-up arc complete. πŸ’–
  • -- β€” end option parsing. If --prog is specified, everything after -- is the program to be run. Super useful when the program name could otherwise be mistaken for an option. Not me protecting your filenames from being misread as flags 😭
  • -K, --keep-movie-svgs β€” keep the SVG files generated for movie mode. Hoarder behavior, but make it intentional. πŸŽ€
  • -t, --trace path β€” specifies the name of the file or directory in which blktrace output is located. iowatcher uses a dump from blkparse, so this option tries to guess the name of the corresponding per-CPU blktrace data files if the dump file doesn't already exist.

Wanna add multiple traces to a given graph? Just specify --trace more than once. And if path is a directory, iowatcher will use the name of the directory as the base name of the dump file, and all trace files found inside the directory will be processed. She's thorough. πŸ‘‘

  • -l, --label label β€” sets a label in the graph for a trace file. The labels are added in the same order as the trace files β€” so keep your pairs matched, bestie, order matters fr fr.
  • -m, --movie [style] β€” create a movie. The file format depends on the extension used in the -o file option:
    • .ogv or .ogg extension β†’ Ogg Theora video, if png2theora is available.
    • .mp4 extension β†’ an mp4 video, if ffmpeg is available.
    • Any other extension β†’ you can use it, but the end result will be an mp4.

The accepted style values are spindle for a circular disc-like effect (default), or rect for a rectangular graph style. Spindle is the moment, rect is the minimalism. Choose wisely. πŸŒ€

  • -T, --title title β€” set a title to be placed at the top of the graph. Name your child. ✨
  • -o, --output file β€” output filename for the SVG image or video. The video format used will depend on the file name extension β€” see --movie for details.
  • -r, --rolling seconds β€” controls the duration for the rolling average. iowatcher tries to smooth out bumpy graphs by averaging the current second with seconds from the past. Larger numbers here give you flatter graphs. Basically a smoothing filter but make it self-care. πŸ’†
  • -h, --height height β€” set the height of each graph.
  • -w, --width width β€” set the width of each graph.
  • -c, --columns columns β€” number of columns in graph output.
  • -x, --xzoom min:max β€” limit processed time range to min:max.
  • -y, --yzoom min:max β€” limit processed sectors to min:max.
  • -a, --io-plot-action action β€” plot action β€” one of Q, D, or C β€” in the IO graph.
  • -P, --per-process-io β€” distinguish between processes in the IO graph. Every process gets to be its own little star. ⭐
  • -O, --only-graph graph β€” add a single graph to the output (see the GRAPHS section for your options). By default all graphs are included, so use -O to generate only the required graphs. -O may be used more than once. πŸ”₯
  • -N, --no-graph type β€” remove a single graph from the output (again, see GRAPHS). This option may be used more than once.

🌈 GRAPHS 🌈

The values accepted by the -O and -N options are:

io, tput, latency, queue_depth, iops, cpu-sys, cpu-io, cpu-irq, cpu-user, cpu-soft

Ten little icons, all valid, all valid. πŸ’œ


πŸ“ EXAMPLES πŸ“

Generate graph from the existing trace.dump:

# iowatcher -t trace

Skip the IO graph:

# iowatcher -t trace.dump -o trace.svg -N io

Only graph tput and latency:

# iowatcher -t trace.dump -o trace.svg -O tput -O latency

Generate a graph from two runs, and label them:

# iowatcher -t ext4.dump -t xfs.dump -l Ext4 -l XFS -o trace.svg

Run a fio benchmark and store the trace in trace.dump, add a title to the top, use /dev/sda for blktrace:

# iowatcher -d /dev/sda -t trace.dump -T 'Fio Benchmark' -p fio
some_job_file

Make a movie from an existing trace:

# iowatcher -t trace --movie -o trace.mp4

🧚 AUTHORS 🧚

iowatcher was created and is maintained by Chris Mason. Founder energy. πŸ‘‘

This man page was largely written by Andrew Price, based on Chris's original README. Credit where credit is due, always. 🫢

Okay so this part is the legal bit and we do not paraphrase legal bits, so here it is in full:

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License v2 as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

No cap, read the license, it's important. 😭

πŸ’– SEE ALSO πŸ’–

blktrace(8), blkparse(1), fio(1), mpstat(1) β€” go read your friends, they're iconic too.


And that's the whole page, bestie! πŸŽ€ Sending you off with the official sign-off: this is iowatcher from April 2014, filed under iowatcher(1) β€” same name at the top, same name at the bottom, symmetric queen. πŸ’…βœ¨