blktrace.git
9 years agoblktrace 1.1.0 blktrace-1.1.0
Jens Axboe [Wed, 24 Sep 2014 19:52:31 +0000 (13:52 -0600)]
blktrace 1.1.0

Bump it up to a full 1.1 since we now include iowatcher.

Signed-off-by: Jens Axboe <axboe@fb.com>
9 years agoiowatcher: add iowatcher to the main blktrace Makefile
Chris Mason [Wed, 24 Sep 2014 19:09:51 +0000 (12:09 -0700)]
iowatcher: add iowatcher to the main blktrace Makefile

Signed-off-by: Chris Mason <clm@fb.com>
9 years agoMerge the iowatcher repository
Chris Mason [Wed, 24 Sep 2014 19:03:35 +0000 (12:03 -0700)]
Merge the iowatcher repository

9 years agoiowatcher: Properly initialize trace.name in find_trace_file
Chris Mason [Wed, 24 Sep 2014 16:44:45 +0000 (09:44 -0700)]
iowatcher: Properly initialize trace.name in find_trace_file

Signed-off-by: Chris Mason <clm@fb.com>
9 years agoiowatcher: Fix up some strcpy and strcat usage
Andrew Price [Sun, 27 Apr 2014 05:16:01 +0000 (06:16 +0100)]
iowatcher: Fix up some strcpy and strcat usage

Fix an unchecked strcpy and strcat in plot_io_movie():

  $ ./iowatcher -t foo --movie -o foo.ogv -l $(printf 'x%.0s' {1..300})
  [...]
  *** buffer overflow detected ***: ./iowatcher terminated

There was also very similar code in plot_io() so a new function
plot_io_legend() was added to factor out the common string building code
and replace the buggy code with asprintf().

Also add a closedir() call to an error path in traces_list() to plug a
resource leak and make iowatcher Coverity-clean (ignoring some
false-positives).

Signed-off-by: Andrew Price <anprice@redhat.com>
9 years agoiowatcher: Clean up some unused functions, make others static
Andrew Price [Sun, 27 Apr 2014 02:58:40 +0000 (03:58 +0100)]
iowatcher: Clean up some unused functions, make others static

Adding -Wmissing-prototypes showed some functions could be made static
and my 'findunused' script showed some functions weren't being called.

This patch was tested by building from scratch and running with various
combinations of options.

Signed-off-by: Andrew Price <anprice@redhat.com>
9 years agoiowatcher: Update usage info and improve man page
Andrew Price [Sun, 27 Apr 2014 02:32:17 +0000 (03:32 +0100)]
iowatcher: Update usage info and improve man page

Bring the man page and usage string up-to-date with the new -p behaviour
and improve the formatting and content of the man page.

Signed-off-by: Andrew Price <anprice@redhat.com>
9 years agoiowatcher: Convert start_mpstat to run_program
Andrew Price [Sun, 27 Apr 2014 00:55:57 +0000 (01:55 +0100)]
iowatcher: Convert start_mpstat to run_program

For consistency and deduplication, use run_program in start_mpstat.  Add
the ability to pass a path to run_program, which will be opened in the
spawned process and used as stdout, in order to capture mpstat output.
This fixes a tricky descriptor leak in start_mpstat which could have
caused a race condition if it was fixed with close().

Some output formatting tweaks have also been added and a bug from a
previous patch, where tracers were killed immediately when -p wasn't
specified, has been fixed.

Signed-off-by: Andrew Price <anprice@redhat.com>
9 years agoiowatcher: Convert start_blktrace to run_program
Andrew Price [Sat, 26 Apr 2014 22:00:58 +0000 (23:00 +0100)]
iowatcher: Convert start_blktrace to run_program

Rework start_blktrace and use run_program to launch blktrace. Move the
argv-building into the function so that it's easier to work with and
clean it up a bit. Add a signal parameter to wait_program to optionally
kill the pid with a given signal before waiting for it.

Signed-off-by: Andrew Price <anprice@redhat.com>
9 years agoiowatcher: Rework --prog to make arg processing safer
Andrew Price [Sat, 26 Apr 2014 17:22:53 +0000 (18:22 +0100)]
iowatcher: Rework --prog to make arg processing safer

Previously the --prog option required the program-to-be-run to be
specified as a single string. This meant that shell escaping would be
lost in translation and a sub-shell would be run. Rework --prog to not
take an argument and accept the arguments left after option processing
has ended as the argv for the program-to-be-run.

As we have the program as an argv, run_program2() can now be used to run
it, and now that run_program() is no longer used we can remove it and
remove the '2' from run_program2.

New usage example:

 # iowatcher -p -t foo -d /dev/sda3 sleep 10
 running blktrace blktrace -b 8192 -a queue -a complete -a issue -a notify -D . -d /dev/sda3 -o foo
 running 'sleep' '10'
 sleep exited with 0
 ...

Docs have been updated accordingly.

Signed-off-by: Andrew Price <anprice@redhat.com>
9 years agoiowatcher: Separate program running from waiting
Andrew Price [Sat, 26 Apr 2014 14:31:19 +0000 (15:31 +0100)]
iowatcher: Separate program running from waiting

Until now run_program2() was a replacement for system() so it always
waited for the process to end before returning. To make this function
more useful move the waiting code into a separate function and add a
mechanism to expect a specific exit code.

Signed-off-by: Andrew Price <anprice@redhat.com>
9 years agoiowatcher: Correct a couple of calloc calls
Andrew Price [Sat, 26 Apr 2014 02:49:22 +0000 (03:49 +0100)]
iowatcher: Correct a couple of calloc calls

(Caught by Coverity.) tf->gdd_writes and tf->gdd_reads are arrays of
pointers so update their allocations to use the correct element size.

Signed-off-by: Andrew Price <anprice@redhat.com>
9 years agoiowatcher: Simplify temp movie directory creation
Andrew Price [Sat, 26 Apr 2014 01:56:17 +0000 (02:56 +0100)]
iowatcher: Simplify temp movie directory creation

plot_io_movie() was calling create_movie_temp_dir() which unnecessarily
strdup()ed a string constant leaving plot_io_movie() to free it. Replace
the strdup() with a mutable char array and get rid of the free(). Merge
the few remaining lines which create the movie dir into plot_io_movie().

Also prune a duplicate declaration of start_mpstat() in tracers.h

Signed-off-by: Andrew Price <anprice@redhat.com>
9 years agoiowatcher: Merge trace dumping functions into one
Andrew Price [Fri, 28 Mar 2014 01:47:27 +0000 (01:47 +0000)]
iowatcher: Merge trace dumping functions into one

Now that combine_blktrace_devs() takes a list of traces it's fairly
generic so we might as well merge blktrace_to_dump() into it. The latter
can be replaced with a call using a list with a single entry.

combine_blktrace_devs() is renamed dump_traces() because that's what it
does.

Also eradicate the big global char array 'line' that was being used in a
bunch of places along with some more unnecessary strdup()s.

Signed-off-by: Andrew Price <anprice@redhat.com>
9 years agoiowatcher: Check program exit code properly
Andrew Price [Fri, 28 Mar 2014 01:42:47 +0000 (01:42 +0000)]
iowatcher: Check program exit code properly

The return value of posix_spawnp() was being checked but the exit status
of the child process was being ignored. This adds checks and error
reporting based on the status that waitpid returns.

Signed-off-by: Andrew Price <anprice@redhat.com>
9 years agoiowatcher: Fix up directory trace processing
Andrew Price [Thu, 27 Mar 2014 21:59:38 +0000 (21:59 +0000)]
iowatcher: Fix up directory trace processing

Similar to the fix for spaces in file names in commit 5d845e3, this
patch fixes processing of directories with spaces in their names by
using posix_spawnp() to run the blkparse command instead of system(). In
doing so, combine_blktrace_devs() and match_trace() have been reworked
to use a list structure instead of doing a lot of strdup()ing and string
appending.

Also make sure that trailing slashes are removed from the directory name
before attempting to use it as the base of the .dump filename.

Update the -t entry in the manpage to mention directory behaviour, too.

Signed-off-by: Andrew Price <anprice@redhat.com>
9 years agoiowatcher: Handle REQUEUE events
Jan Kara [Thu, 4 Apr 2013 10:18:28 +0000 (06:18 -0400)]
iowatcher: Handle REQUEUE events

When requeue event happens we have to decrease number of in-flight
requests. Otherwise they drift away.

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
9 years agoiowatcher: Make seconds unsigned
Jan Kara [Thu, 4 Apr 2013 10:18:27 +0000 (06:18 -0400)]
iowatcher: Make seconds unsigned

Compiler was giving some warnings about signed vs unsigned comparisons.
Although these were harmless, make seconds unsigned because they really
are.

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
9 years agoiowatcher: Remove duplicate defines from blkparse.c
Jan Kara [Thu, 4 Apr 2013 10:18:26 +0000 (06:18 -0400)]
iowatcher: Remove duplicate defines from blkparse.c

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
9 years agoiowatcher: Skip events beyond max_seconds
Jan Kara [Thu, 4 Apr 2013 10:18:25 +0000 (06:18 -0400)]
iowatcher: Skip events beyond max_seconds

Skip events beyond max_seconds.  This not only saves CPU time but also
prevents memory corruption because not all functions were checking that
given time is in the expected range. Also remove now unnecessary checks
in the called functions.

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
9 years agoiowatcher: Do not add events out of time range to the plot
Jan Kara [Thu, 4 Apr 2013 10:18:24 +0000 (06:18 -0400)]
iowatcher: Do not add events out of time range to the plot

If the event is out of time range that should be plotted, do not add it.
It will corrupt memory...

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
9 years agoiowatcher: Fine tune the ticks
Chris Mason [Tue, 24 Sep 2013 19:30:35 +0000 (15:30 -0400)]
iowatcher: Fine tune the ticks

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
9 years agoiowatcher: Update the README for a few new options
Chris Mason [Tue, 24 Sep 2013 19:30:23 +0000 (15:30 -0400)]
iowatcher: Update the README for a few new options

9 years agoiowatcher: Fix processing of trace filenames containing spaces
Andrew Price [Fri, 8 Nov 2013 10:06:54 +0000 (10:06 +0000)]
iowatcher: Fix processing of trace filenames containing spaces

blktrace_to_dump passes filenames containing spaces to blkparse via
system() so only the first chunk of the string is taken to be the
filename by the subprocess.

This switches to using posix_spawnp() so that we can present the
filename as an element of argv and avoid iowatcher failing in these
cases.

Signed-off-by: Andrew Price <anprice@redhat.com>
9 years agoiowatcher: Add bounds checking in find_step
Andrew Price [Wed, 6 Nov 2013 16:11:18 +0000 (16:11 +0000)]
iowatcher: Add bounds checking in find_step

Check the value of cur_mini_step is sane before using it as an index to
mini_step array.

Signed-off-by: Andrew Price <anprice@redhat.com>
9 years agoiowatcher: Fix a label overflow in plot_io
Andrew Price [Thu, 5 Sep 2013 16:35:04 +0000 (17:35 +0100)]
iowatcher: Fix a label overflow in plot_io

The length of the label option wasn't being checked before strcpy()ing
it into a char[256]. Use strncpy instead.

Signed-off-by: Andrew Price <anprice@redhat.com>
9 years agoiowatcher: Don't print a legend on the tput graphs during movies
Chris Mason [Mon, 21 Jan 2013 16:22:58 +0000 (11:22 -0500)]
iowatcher: Don't print a legend on the tput graphs during movies

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
9 years agoiowatcher: Update the FSF address in all files
Chris Mason [Mon, 21 Jan 2013 15:28:33 +0000 (10:28 -0500)]
iowatcher: Update the FSF address in all files

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
9 years agoiowatcher: Update the COPYING file to the correct address
Chris Mason [Mon, 21 Jan 2013 15:17:44 +0000 (10:17 -0500)]
iowatcher: Update the COPYING file to the correct address

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
9 years agoiowatcher: Add support for fio bandwith logs (-F logfile)
Chris Mason [Fri, 18 Jan 2013 16:08:39 +0000 (11:08 -0500)]
iowatcher: Add support for fio bandwith logs (-F logfile)

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
9 years agoiowatcher: Fix formatting errors in the iowatcher.1 man page.
Chris Mason [Thu, 17 Jan 2013 17:45:42 +0000 (12:45 -0500)]
iowatcher: Fix formatting errors in the iowatcher.1 man page.

Thanks to Andrew Price for sending me the corrected version

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
9 years agoiowatcher: Fix mpstat handling when the number of CPUs is not
Chris Mason [Thu, 17 Jan 2013 03:25:28 +0000 (22:25 -0500)]
iowatcher: Fix mpstat handling when the number of CPUs is not
in the mpstat output

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
9 years agoiowatcher: Handle traces to more than once device at a time
Chris Mason [Tue, 15 Jan 2013 01:59:06 +0000 (20:59 -0500)]
iowatcher: Handle traces to more than once device at a time

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
9 years agoiowatcher: iowatcher: specify ffmpeg codec
Nikita Danilov [Wed, 19 Dec 2012 18:27:21 +0000 (11:27 -0700)]
iowatcher: iowatcher: specify ffmpeg codec

    Add -C option to specify ffmped video code to use.

    Allow ffmpeg video codec to be specified on the command line. "libx264" is
    default.

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
9 years agoiowatcher: Add a man page for iowatcher
Andrew Price [Wed, 19 Dec 2012 18:54:45 +0000 (11:54 -0700)]
iowatcher: Add a man page for iowatcher

Adds a man page from iowatcher. Borrows some documentation from the
README file but covers all of the options found in main.c

Signed-off-by: Andrew Price <anprice@redhat.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
9 years agoiowatcher: Fix spindle rotation in the movie mode
Chris Mason [Mon, 14 Jan 2013 21:05:13 +0000 (16:05 -0500)]
iowatcher: Fix spindle rotation in the movie mode

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
9 years agoiowatcher: Fix some rounding errors around the max offset
Chris Mason [Fri, 26 Oct 2012 19:23:40 +0000 (15:23 -0400)]
iowatcher: Fix some rounding errors around the max offset

set_gdd_bit makes sure that we don't try to set bits past the max offset
we used to allocate our gdd array.

But, it only does this when the function is first called, and the whole
byte range for the IO we're recording may go past max offset.  This adds
a check to be sure we stay in the right range.

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
9 years agoiowatcher: Fix crash due to missing queue action
Jan Kara [Tue, 23 Oct 2012 09:05:31 +0000 (11:05 +0200)]
iowatcher: Fix crash due to missing queue action

When queue action was missing from a trace, handling of dispatch didn't
quite get things right and crashed due to NULL pointer dereference.
Fix it.

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
9 years agoiowatcher: Add -K command line option to keep the movie svg files
Chris Mason [Mon, 22 Oct 2012 15:51:41 +0000 (11:51 -0400)]
iowatcher: Add -K command line option to keep the movie svg files

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
9 years agoiowatcher: Only hash IOs if there are completion or issue events
Chris Mason [Mon, 22 Oct 2012 15:22:55 +0000 (11:22 -0400)]
iowatcher: Only hash IOs if there are completion or issue events

We use an IO hash table to keep track of the IOs in flight, and this is
used to calculate the latencies from when we issue the IO to when
we complete the IO.

But if there are no completion events, io is never removed from the hash
table.  It grows very large and slows down the run.

Since we already scan all the events looking for outliers, this commit
checks for each major type of event during the scan.  If there are
no completion and no issue events, we don't bother inserting things
into the hash table.

If there are no completion events, we clean up during the issue event.

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
9 years agoiowatcher: iowatcher: support png2theora for videos
Eric Sandeen [Thu, 18 Oct 2012 21:42:38 +0000 (15:42 -0600)]
iowatcher: iowatcher: support png2theora for videos

ffmpeg is not available on all distributions, so include Theora
as an option, via png2theora, if the output movie filename ends
in .ogg or .ogv

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
9 years agoiowatcher: Fix path name handling when the trace files are in the current directory
Chris Mason [Wed, 17 Oct 2012 19:45:49 +0000 (15:45 -0400)]
iowatcher: Fix path name handling when the trace files are in the current directory

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
9 years agoiowatcher: Fix buffer overwrite issue
Yuanhan Liu [Fri, 12 Oct 2012 16:09:29 +0000 (10:09 -0600)]
iowatcher: Fix buffer overwrite issue

Current code allocates buffer for path based on strdup, which would let
the size of path equals to the size of blktrace_dest_dir. But the code
next that joins it with the filename of dump file, which would overwrite
the buffer, and triggered an issue like following:

$ ./iowatcher -t trace.dump -o trace.svg
Unable to find trace file ./trace.dumpY
                                      ^

Refactoring join_path a bit to fix this issue.

Cc: Liu Bo <liub.liubo@gmail.com>
Signed-off-by: Yuanhan Liu <yliu.null@gmail.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
9 years agoiowatcher: add blktrace destination options
Liu Bo [Fri, 28 Sep 2012 03:55:14 +0000 (21:55 -0600)]
iowatcher: add blktrace destination options

Add 'D' for blktrace destination options so that we can save trace
in the destination directory.

Signed-off-by: Liu Bo <liub.liubo@gmail.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
9 years agosignal condition variable at end of stop_tracers
Robert Schiele [Mon, 8 Sep 2014 07:38:52 +0000 (09:38 +0200)]
signal condition variable at end of stop_tracers

stop_tracers modifies tp->is_done and thus must signal the condition
variable tracer_wait_unblock is waiting on to monitor tp->is_done.
Not doing so might cause the tool to deadlock if stop_tracers is
called while a tracer thread is in tracer_wait_unblock.

Signed-off-by: Robert Schiele <rschiele@gmail.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
10 years agoremove unused barrier.h
Riku Voipio [Fri, 11 Apr 2014 11:51:19 +0000 (14:51 +0300)]
remove unused barrier.h

While looking for things that needs porting for Aarch64,
barrier.h from blktrace was identified. However, a deeper
look shows that this file is not actually used anymore
in blktrace.

Remove unused file to avoid future confusion.

Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
Signed-off-by: Jens Axboe <axboe@fb.com>
10 years agoblktrace bno_plot.py: output comprehensive message when gnuplot not found
Eiichi Tsukata [Tue, 3 Dec 2013 12:04:59 +0000 (21:04 +0900)]
blktrace bno_plot.py: output comprehensive message when gnuplot not found

Currently, bno_plot.py uses os.execvp which does not show enough information
when executed command is not found. For example, when gnuplot is not found
bno_plot.py shows the following messages:

    Traceback (most recent call last):
      File "/usr/local/bin/bno_plot.py", line 123, in <module>
        os.execvp(cmd[0], cmd)
      File "/usr/lib64/python2.7/os.py", line 344, in execvp
        _execvpe(file, args)
      File "/usr/lib64/python2.7/os.py", line 368, in _execvpe
        func(file, *argrest)
    OSError: [Errno 2] No such file or directory

Users can't understand what happend directly from the message.

Instead of os.execvp, this patch uses os.system which shows the following
messages when gnuplot not found:

    sh: gnuplot: command not found

Signed-off-by: Eiichi Tsukata <devel@etsukata.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
10 years agoblktrace blkreplay: convert to use a dynamic cpu_set_t
Nathan Zimmer [Mon, 15 Apr 2013 14:53:36 +0000 (09:53 -0500)]
blktrace blkreplay: convert to use a dynamic cpu_set_t

Some distros have changed CPU_SETSIZE in glibc to 4096 since that matches
the NR_CPUS in the linux kernel config file.  Some distros have decided to
leave CPU_SETSIZE at 1024. This is a problem if you want to run that distro
on a very large machine.

CPU_SETSIZE is use by the struct cpu_set_t.  This means you to deal with cpus
greater the 1024 you must use the dynamic cpu sets, which involves converting
from things like CPU_SET to CPU_SET_S.

Cc: Jens Axboe <axboe@kernel.dk>
Modified by Jens to fix the CPU_{SET,ZERO}_S pointer mixup.

Signed-off-by: Nathan Zimmer <nzimmer@sgi.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
10 years agoblktrace: use number of configured cpus instead of online cpus
Nathan Zimmer [Mon, 15 Apr 2013 14:53:35 +0000 (09:53 -0500)]
blktrace: use number of configured cpus instead of online cpus

We want to run on all online processors.  However is there is a hole in the
online cpumask this won't happen.  We need the number of configured processors
instead of online.

Cc: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Nathan Zimmer <nzimmer@sgi.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
10 years agobtreplay: use sysconf to get the number of configured cpus
Nathan Zimmer [Mon, 15 Apr 2013 14:53:34 +0000 (09:53 -0500)]
btreplay: use sysconf to get the number of configured cpus

We should use the standard methods for getting the number of cpus in the
system when they are available.  It is good practice to leave the old ways in
place for people stuck on older systems.

Cc: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Nathan Zimmer <nzimmer@sgi.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
10 years agobtreplay: Machines are now large enough that holes need to be dealt with
Nathan Zimmer [Mon, 15 Apr 2013 14:53:33 +0000 (09:53 -0500)]
btreplay: Machines are now large enough that holes need to be dealt with

The current method fails if once we hit the first offlined cpu.  This
will correct that case.  However this still underreports the number cpus if
the last cpu are offlined.

Cc: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Nathan Zimmer <nzimmer@sgi.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
10 years agoverify_blkparse: Change max_cpus to deal with systems larger the 512
Nathan Zimmer [Mon, 15 Apr 2013 14:53:32 +0000 (09:53 -0500)]
verify_blkparse: Change max_cpus to deal with systems larger the 512

verify_blkpars has troubles with systems larger then 512.
Also there is issue in the scanning code causing the cpu number to be
truncated to the first two digits. i.e cpu 542 would be read as 54.

Cc: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Nathan Zimmer <nzimmer@sgi.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
11 years agoMore accurate calculation of the total read/write values
Ivan Dyukov [Tue, 19 Mar 2013 14:16:27 +0000 (08:16 -0600)]
More accurate calculation of the total read/write values

If block device has many request with size less than 1K,
blkparse ignores such requests because it treats each request
in Kb.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
11 years agoiowatcher: Per process IO graphs
Jan Kara [Mon, 10 Sep 2012 08:09:48 +0000 (10:09 +0200)]
iowatcher: Per process IO graphs

Add support for displaying different processes with different color in
the IO graph and movie.

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Make sure we add the xtick labels if we're only plotting IO
Chris Mason [Fri, 21 Sep 2012 18:03:50 +0000 (14:03 -0400)]
iowatcher: Make sure we add the xtick labels if we're only plotting IO

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Merge branch 'jan'
Chris Mason [Tue, 11 Sep 2012 01:01:02 +0000 (21:01 -0400)]
iowatcher: Merge branch 'jan'

Jan Kara's updates for xzoom and yzoom

Conflicts:
main.c

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Add option to set action which should be displayed in the IO graph
Jan Kara [Thu, 6 Sep 2012 16:23:05 +0000 (18:23 +0200)]
iowatcher: Add option to set action which should be displayed in the IO graph

Sometimes this is useful to see how IO scheduler or storage itself
changes the IO submitted by the application.

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Improve xticks logic
Jan Kara [Thu, 6 Sep 2012 10:45:34 +0000 (12:45 +0200)]
iowatcher: Improve xticks logic

Ticks on x axis used integral step and fixed number of ticks. That generates
wrong results e.g. for 13s long trace with 10 ticks... Allow the code to
somewhat alter the number of ticks and also use non-integral step.

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Add options to limit time and sector range
Jan Kara [Fri, 31 Aug 2012 09:37:49 +0000 (11:37 +0200)]
iowatcher: Add options to limit time and sector range

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Ignore trace records beyond max_seconds
Jan Kara [Thu, 6 Sep 2012 08:14:59 +0000 (10:14 +0200)]
iowatcher: Ignore trace records beyond max_seconds

Currently we report error when we find a trace record beyond max_seconds.
When we allow user to set end of displayed period, records after the end
of period are no longer a bug so just ignore them.

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Add possibility to limit seconds from below
Jan Kara [Wed, 5 Sep 2012 21:01:08 +0000 (23:01 +0200)]
iowatcher: Add possibility to limit seconds from below

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Rename seconds to max_seconds
Jan Kara [Wed, 5 Sep 2012 20:08:24 +0000 (22:08 +0200)]
iowatcher: Rename seconds to max_seconds

Later we will add min_seconds to complement this.

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Add support for limitting IO graph offset from below
Jan Kara [Sat, 1 Sep 2012 21:31:46 +0000 (23:31 +0200)]
iowatcher: Add support for limitting IO graph offset from below

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Fix filtering of outliers from below
Jan Kara [Sat, 1 Sep 2012 21:37:20 +0000 (23:37 +0200)]
iowatcher: Fix filtering of outliers from below

There are lots of trace actions which do not carry a sector with them (e.g.
plug, unplug, ...). Thus sector is 0 for them and that results in trimming
of outliers from below never working. Fix the problem by accounting only
Queue events in the outlier statistics.

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Define mask of trace action and use it instead of opencoding the constant
Jan Kara [Sat, 1 Sep 2012 21:35:55 +0000 (23:35 +0200)]
iowatcher: Define mask of trace action and use it instead of opencoding the constant

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Fix typo in option description
Jan Kara [Thu, 30 Aug 2012 13:59:01 +0000 (15:59 +0200)]
iowatcher: Fix typo in option description

Short variant of --movie is -m, not -p.

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Check for null mpstat structs while generating plots
Chris Mason [Fri, 31 Aug 2012 00:42:30 +0000 (20:42 -0400)]
iowatcher: Check for null mpstat structs while generating plots

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Add -c to split the graphs up into multiple columns
Chris Mason [Tue, 28 Aug 2012 06:15:11 +0000 (02:15 -0400)]
iowatcher: Add -c to split the graphs up into multiple columns

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Fix divide by zero while calculating averages
Chris Mason [Mon, 27 Aug 2012 22:27:59 +0000 (18:27 -0400)]
iowatcher: Fix divide by zero while calculating averages

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Update the README and the --help output
Chris Mason [Mon, 27 Aug 2012 22:09:57 +0000 (18:09 -0400)]
iowatcher: Update the README and the --help output

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Start support for multiple colums of plots
Chris Mason [Mon, 27 Aug 2012 21:39:58 +0000 (17:39 -0400)]
iowatcher: Start support for multiple colums of plots

The movie mode is updated to put extra plots on
the side.

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Fix io line graphs at the edge of the X axis
Chris Mason [Mon, 27 Aug 2012 17:00:30 +0000 (13:00 -0400)]
iowatcher: Fix io line graphs at the edge of the X axis

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Fix the line graphs for values near the edges of the graph
Chris Mason [Mon, 27 Aug 2012 16:53:51 +0000 (12:53 -0400)]
iowatcher: Fix the line graphs for values near the edges of the graph

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Fix mpstat file permissions
Chris Mason [Mon, 27 Aug 2012 16:22:28 +0000 (12:22 -0400)]
iowatcher: Fix mpstat file permissions

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Add initial support for flash tracing
Chris Mason [Fri, 24 Aug 2012 18:31:29 +0000 (14:31 -0400)]
iowatcher: Add initial support for flash tracing

This is incomplete, but it will catch messages from
the flash driver to find the actual chip an IO
was sent to.

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Add a new movie mode that maps the IOs onto a platter.
Chris Mason [Tue, 21 Aug 2012 19:19:35 +0000 (15:19 -0400)]
iowatcher: Add a new movie mode that maps the IOs onto a platter.

The --movie option defaults to spindle mode now,
but you can choose --movie=rect or --movie=spindle
as well.

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Switch to ffmpeg for movie encoding. Chrome and vlc like these better.
Chris Mason [Tue, 21 Aug 2012 13:18:15 +0000 (09:18 -0400)]
iowatcher: Switch to ffmpeg for movie encoding.  Chrome and vlc like these better.

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Add back missing plot title
Chris Mason [Mon, 20 Aug 2012 20:15:55 +0000 (16:15 -0400)]
iowatcher: Add back missing plot title

11 years agoiowatcher: Fix --help definition
Chris Mason [Mon, 20 Aug 2012 19:30:38 +0000 (15:30 -0400)]
iowatcher: Fix --help definition

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Add mpstat.[ch] into git
Chris Mason [Mon, 20 Aug 2012 18:36:19 +0000 (14:36 -0400)]
iowatcher: Add mpstat.[ch] into git

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Add movie support
Chris Mason [Fri, 17 Aug 2012 16:18:28 +0000 (12:18 -0400)]
iowatcher: Add movie support

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Add mpstat graphing support
Chris Mason [Thu, 16 Aug 2012 18:46:33 +0000 (14:46 -0400)]
iowatcher: Add mpstat graphing support

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
11 years agoiowatcher: Initial revision
Chris Mason [Wed, 15 Aug 2012 20:10:55 +0000 (16:10 -0400)]
iowatcher: Initial revision

Signed-off-by: Chris Mason <chris.mason@fusionio.com>
12 years agoblktrace 1.0.5 origin blktrace-1.0.5
Jens Axboe [Mon, 27 Feb 2012 07:22:17 +0000 (08:22 +0100)]
blktrace 1.0.5

Signed-off-by: Jens Axboe <axboe@kernel.dk>
12 years agoToo small arrays for file names
Vasily Tarasov [Mon, 27 Feb 2012 07:21:11 +0000 (08:21 +0100)]
Too small arrays for file names

In our experiments blktrace/blkparse file names encode a lot of
infomation about the particular experiment.  We noticed that for long
enough file names blkparse does not work.

The reason is that per_cpu_info->fname[] is of 128 bytes. As a result,
in setup_file() function only part of the file name gets to ->fname[].
Then stat() fails and we exit the function. Notice, that no error is
printed in this case.

In the following patch ->fname[] size is increased to POSIX defined
PATH_MAX.

Signed-off-by: Vasily Tarasov <tarasov@vasily.name
Signed-off-by: Jens Axboe <axboe@kernel.dk>
12 years agoFix compiler warnings
Jens Axboe [Wed, 1 Feb 2012 12:17:57 +0000 (13:17 +0100)]
Fix compiler warnings

One was a real bug, assigned i_time twice instead of c_time (which was
left unitialized).

Signed-off-by: Jens Axboe <axboe@kernel.dk>
12 years agoavoid string overflows
Eric Sandeen [Fri, 16 Dec 2011 19:36:56 +0000 (13:36 -0600)]
avoid string overflows

Several places using strcpy would benefit from strncpy
for safety.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
12 years agoblktrace: remove unused variable
Eric Sandeen [Fri, 16 Dec 2011 19:27:33 +0000 (13:27 -0600)]
blktrace: remove unused variable

sp was being incremented w/o initialization, but thankfully
not used otherwise.  Just remove it.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
12 years agoblkparse: initialize cpu_map
Eric Sandeen [Fri, 16 Dec 2011 19:25:16 +0000 (13:25 -0600)]
blkparse: initialize cpu_map

We malloc'd cpu_map, and then did:

cpu_map[CPU_IDX(cpu)] |= (1UL << CPU_BIT(cpu));

... not sure how that ever worked if cpu_map was not initialized!

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
12 years agobtt: close devmap file after processing
Eric Sandeen [Fri, 16 Dec 2011 19:17:52 +0000 (13:17 -0600)]
btt: close devmap file after processing

Close the file used for btt's -M argument after
processing.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
12 years agoFix several leaks on error paths
Eric Sandeen [Fri, 16 Dec 2011 19:15:54 +0000 (13:15 -0600)]
Fix several leaks on error paths

In several cases space is allocated for a filename but
not freed if open of that file fails.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
12 years agoRemove extraneous malloc in find_input routines
Eric Sandeen [Fri, 16 Dec 2011 19:13:21 +0000 (13:13 -0600)]
Remove extraneous malloc in find_input routines

No point in malloc()ing space if we just immediately overwrite
the pointer via strdup.  That'll leak some space.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
12 years agoClose stream in 'I' switch handling
Eric Sandeen [Fri, 16 Dec 2011 19:11:33 +0000 (13:11 -0600)]
Close stream in 'I' switch handling

The file containing the list of devices was never closed
after processing was complete.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
12 years agoFree pdu_buff on bad pdu path in process()
Eric Sandeen [Fri, 16 Dec 2011 19:08:14 +0000 (13:08 -0600)]
Free pdu_buff on bad pdu path in process()

On this error path, pdu_buf was never freed.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
12 years agoFix potential array overrun in act_to_str
Eric Sandeen [Fri, 16 Dec 2011 19:06:31 +0000 (13:06 -0600)]
Fix potential array overrun in act_to_str

The acts[] array is only N_ACTS elements, so we should not
ever set acts[N_ACTS]

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
12 years agoCheck setvbuf return value
Eric Sandeen [Fri, 16 Dec 2011 19:05:02 +0000 (13:05 -0600)]
Check setvbuf return value

Check for setvbuf failure.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
12 years agoblktrace 1.0.4 blktrace-1.0.4
Jens Axboe [Tue, 31 Jan 2012 09:53:21 +0000 (10:53 +0100)]
blktrace 1.0.4

Signed-off-by: Jens Axboe <axboe@kernel.dk>
12 years agoMerge branch 'master' of ssh://brick.kernel.dk/data/git/blktrace
Jens Axboe [Tue, 31 Jan 2012 09:52:25 +0000 (10:52 +0100)]
Merge branch 'master' of ssh://brick.kernel.dk/data/git/blktrace

12 years agoFix for realloc bug and wrong error logging
Mikulas Patocka [Tue, 31 Jan 2012 09:51:50 +0000 (10:51 +0100)]
Fix for realloc bug and wrong error logging

This patch fixes two bugs in blktrace.

1. realloc is called on a wrong memory address (glibc reports heap
corruption if the user sends the output to a pipe, for example "blktrace
/dev/sdc -o -").

2. errno 0 is actually reported if debugfs is not mounted

Mikulas

Signed-off-by: Jens Axboe <axboe@kernel.dk>
12 years agoblktrace 1.0.3 blktrace-1.0.3
Jens Axboe [Thu, 11 Aug 2011 10:49:08 +0000 (12:49 +0200)]
blktrace 1.0.3

Signed-off-by: Jens Axboe <jaxboe@fusionio.com>