Signed-off-by: Alan D. Brunelle <Alan.Brunelle@hp.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
-$ btt -i <input file> (-l | -m) [-d <range delta>] [-D <devices...>]
- [-e <executables...>] [-h] [-M map information] [-o <output file>]
- [-v] [-V]
+Usage: btt
+ [ -d <seconds> | --range-delta=<seconds> ]
+ [ -D <dev;...> | --devices=<dev;...> ]
+ [ -e <exe,...> | --exes=<exe,...> ]
+ [ -h | --help ]
+ [ -i <input name> | --input-file=<input name> ]
+ [ -I <output name> | --iostat=<output name> ]
+ [ -M <dev map> | --dev-maps=<dev map>
+ [ -o <output name> | --output-file=<output name> ]
+ [ -s <output name> | --seeks=<output name> ]
+ [ -S <interval> | --iostat-interval=<interval> ]
+ [ -V | --version ]
+ [ -v | --verbose ]
+You are required to specify an input file (-i)
-o Specify an input file (-i)
-
-o Specify MD (-m) or LVM2/DM (-l) devices present (If no software RAID
- devices, use -m.) This is a workaround for issues between LVM2 and MD
- remap events that needs to be cleaned up. [DM devices are not working
- as of right now, always specify -m for individual disks and/or MD
- devices.]
-
-The -d argument allows you to specify the granularity which dtermines
+The -d option allows you to specify the granularity which determines
"activity" with regard to the .dat files -- this specific the time
(in seconds) that must elapse without a particular event occuring to
signify inactivity. The larger the number, the fewer ranges output --
the default is 0.1 seconds.
"activity" with regard to the .dat files -- this specific the time
(in seconds) that must elapse without a particular event occuring to
signify inactivity. The larger the number, the fewer ranges output --
the default is 0.1 seconds.
-The -D argument supplies the devices which should be looked at when
+The -D option supplies the devices which should be looked at when
analyzing the input. This is a ":" separated list of devices, devices are
specified by a mjr,mnr tuple (e.g.: -D "8,0:8,8" specifies two devices
with major 8 and minor 0 and 8 respectively).
analyzing the input. This is a ":" separated list of devices, devices are
specified by a mjr,mnr tuple (e.g.: -D "8,0:8,8" specifies two devices
with major 8 and minor 0 and 8 respectively).
-The -e argument supplies the list of executables that will have I/Os
+The -e option supplies the list of executables that will have I/Os
-The -M argument takes in a file generated by the provided script
+The -I option directs btt to output iostat-like data to the specified
+file. Refer to the iostat (sysstat) documentation for details on the
+data columns. The -S option specifies the interval to use between data
+output, it defaults to once per second.
+
+The -M option takes in a file generated by the provided script
(gen_disk_info.py), and allows for better output of device names.
(gen_disk_info.py), and allows for better output of device names.
+The -s option instructs btt to output seek data, the argument provided
+is the basis for file names output. There are two files per device,
+read seeks and write seeks.
+
a mail to majordomo@vger.kernel.org with 'subscribe linux-btrace' in
the mail body.
a mail to majordomo@vger.kernel.org with 'subscribe linux-btrace' in
the mail body.
-2006-05-17, Alan D. Brunelle <alan.brunelle@hp.com>
+2006-09_18, Alan D. Brunelle <alan.brunelle@hp.com>
-#define S_OPTS "d:D:e:hi:I:lmM:o:s:S:Vv"
+#define S_OPTS "d:D:e:hi:I:M:o:s:S:Vv"
static struct option l_opts[] = {
{
.name = "range-delta",
static struct option l_opts[] = {
{
.name = "range-delta",
.flag = NULL,
.val = 'I'
},
.flag = NULL,
.val = 'I'
},
- {
- .name = "lvm",
- .has_arg = no_argument,
- .flag = NULL,
- .val = 'l'
- },
- {
- .name = "md",
- .has_arg = no_argument,
- .flag = NULL,
- .val = 'm'
- },
{
.name = "dev-maps",
.has_arg = required_argument,
{
.name = "dev-maps",
.has_arg = required_argument,
static char usage_str[] = \
"\n[ -d <seconds> | --range-delta=<seconds> ]\n" \
static char usage_str[] = \
"\n[ -d <seconds> | --range-delta=<seconds> ]\n" \
+ "[ -D <dev;...> | --devices=<dev;...> ]\n" \
"[ -e <exe,...> | --exes=<exe,...> ]\n" \
"[ -h | --help ]\n" \
"[ -i <input name> | --input-file=<input name> ]\n" \
"[ -I <output name> | --iostat=<output name> ]\n" \
"[ -e <exe,...> | --exes=<exe,...> ]\n" \
"[ -h | --help ]\n" \
"[ -i <input name> | --input-file=<input name> ]\n" \
"[ -I <output name> | --iostat=<output name> ]\n" \
- "(-l | -m) | (--lvm | -md)\n" \
"[ -M <dev map> | --dev-maps=<dev map>\n" \
"[ -o <output name> | --output-file=<output name> ]\n" \
"[ -s <output name> | --seeks=<output name> ]\n" \
"[ -M <dev map> | --dev-maps=<dev map>\n" \
"[ -o <output name> | --output-file=<output name> ]\n" \
"[ -s <output name> | --seeks=<output name> ]\n" \
case 'I':
iostat_name = optarg;
break;
case 'I':
iostat_name = optarg;
break;
- case 'l':
- is_lvm = 1;
- break;
- case 'm':
- is_lvm = 0;
- break;
case 'M':
dev_map_fname = optarg;
break;
case 'M':
dev_map_fname = optarg;
break;
- if (input_name == NULL || is_lvm < 0) {
+ if (input_name == NULL) {
usage(argv[0]);
exit(1);
}
usage(argv[0]);
exit(1);
}
char *seek_name = NULL;
double range_delta = 0.1;
FILE *ranges_ofp, *avgs_ofp;
char *seek_name = NULL;
double range_delta = 0.1;
FILE *ranges_ofp, *avgs_ofp;
int verbose = 0;
int ifd;
unsigned long n_traces, n_io_allocs, n_io_frees;
int verbose = 0;
int ifd;
unsigned long n_traces, n_io_allocs, n_io_frees;
extern char *seek_name, *iostat_name;
extern double range_delta;
extern FILE *ranges_ofp, *avgs_ofp, *iostat_ofp;
extern char *seek_name, *iostat_name;
extern double range_delta;
extern FILE *ranges_ofp, *avgs_ofp, *iostat_ofp;
-extern int is_lvm, verbose, ifd;
+extern int verbose, ifd;
extern unsigned int n_devs;
extern unsigned long n_traces, n_io_allocs, n_io_frees;
extern struct list_head all_devs, all_ios, all_procs;
extern unsigned int n_devs;
extern unsigned long n_traces, n_io_allocs, n_io_frees;
extern struct list_head all_devs, all_ios, all_procs;