1.16. blktrace

Updated blktrace packages that fix numerous bugs are now available for Red Hat Enterprise Linux 6.
The blktrace packages contain a number of utilities to record the I/O trace information for the kernel to user space, and utilities to analyze and view the trace information. This includes:
  • blktrace (to extract event traces from the kernel)
  • blkparse (to produce formatted output of event streams)
  • blkiomon (for i/o monitoring - periodically generating per-device request size and request latency statistics, and providing histograms)
  • btreplay (for recreating IO loads recorded by blktrace)
  • btt (to analyse block i/o traces produces by blktrace)
Bug Fixes
When the device list contained the same device as supplied on the command line, blktrace stopped immediately and further I/O tracing was impossible. This occurred when an error returned in BLKTRACESETUP ioctl caused the program to terminate whenever a device was duplicated in the devpaths. This patch ensures devices are not duplicated in the devpaths pool, thus fixing the problem.
When blktrace was run without parameters, it incorrectly included the version number in its usage message. This resulted in the false assumption that the version number was a required parameter. This update edits the usage message so that the version number is not printed when running blktrace, blkparce or btt without parameters, avoiding any confusion.
Previously, btreplay would give a 'No such file or directory' error when attempting to execute with /dev/cciss/foo because of the long path name. This was caused by missing the back conversion of underscores to slashes. This update converts the underscores to slashes to restore the device names with longer paths.
Running 'blktrace -d <device> -k' once did not kill a running background trace. Running it a second time resulted in a 'BLKTRACETEARDOWN: Invalid argument' message, after which any further attempt to run it returned 'BLKTRACESETUP: No such file or directory'. This was caused by the option -k clobbering information about running a trace by the kernel (that is, blk_trace_remove), while files opened in debugfs by blktrace running in the background were not released. In this patch, the documentation is updated to remove the faulty 'kill' option. It advices to send a SIGINT signal via kill(1) to the running background blktrace for its correct termination.
The documentation falsely gave the impression that blkiomon was not giving the correct output when working with a logical volume device. When working on a logical volume device, blkiomon does not understand the output of blktrace,as a logical volume device is quiet. While working with a physical device, it prints I/O statistics as expected. This patch updates the documentation to reflect this.
When blkparse was run with a non-existent file as an argument, it returned no errors and the exit-code was zero. This update provides a warning message when a non-existent file is used as an argument and exits with a non-zero status.
Previously, blktrace would not end after 30 seconds. Instead it would remain running until the user killed it, after which any further attempts to run it failed with an error. This was because when open_ios() failed, tracer_wait_unblock() in thread_main() waits for an event that will never occur. Because the event never occurs, any future attempts to run blktrace failed with an error. This update makes sure that unblock_tracers() is also called when an unsuccessful event occurs, (that is, when nthreads_running != ncpus).
There was a mistake in the man page for btrecord. It incorrectly documented the option --input-base, which is unsupported, and the supported --max-bunch-time was undocumented. This update replaces --input-base with --input-directory, and adds the option --max-bunch to the btrecord man page.
The blkiomon man page was missing elements. The options -d and --dump-lldd were not recorded. This patch adds these and a drv_data mast description to the blktrace man page.
The blkparce man page was missing six elements. These were -A, --set-mask, -a, --act-mask, -D, and --input-directory. These options are now added to the blkparce man page.
The blktrace man page was missing sixteen elements. These were:
  • -d <dev> | --dev=<dev>
  • -r <debugfs path> | --relay=<debugfs path>
  • -o <file> | --output=<file>
  • -D <dir> | --output-dir=<dir>
  • -w <time> | --stopwatch=<time>
  • -a <action field> | --act-mask=<action field>
  • -A <action mask> | --set-mask=<action mask>
  • -b <size> | --buffer-size
  • -n <number> | --num-sub-buffers=<number>
  • -l | --listen
  • -h <hostname> | --host=<hostname>
  • -p <port number> | --port=<port number>
  • -s | --no-sendfile
  • -I <devs file> | --input-devs=<devs file>
  • -v <version> | --versio
  • -V <version> | --version
These options are now added to the blktrace man page.
The btreplay man page was missing three elements. These were -t, -x, and --acc-factor. These options are now added to the btreplay man page.
The btt man page was missing four elements. These were -X, -m, --easy-parse-avgs, and --seeks-per-second. These options are now added to the btt man page.
All users of blktrace are advised to upgrade to these updated packages, which resolve these issues.