mirror of https://gitee.com/openkylin/linux.git
perf stat: Add --log-fd <N> option to redirect stderr elsewhere
This perf stat option emulates valgrind's --log-fd option, allowing the user to send perf results elsewhere, and leaving stderr for use by the program under test. This complements --output file option, and is mutually exclusive with it. 3>results perf stat --log-fd 3 -- $cmd 3>>results perf stat --log-fd 3 --append -- $cmd The perl distro's make test.valgrind target uses valgrind's --log-fd option, I've adapted it to invoke perf also, and tested this patch there. Link: http://lkml.kernel.org/r/1315437244-3788-2-git-send-email-jim.cromie@gmail.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: Jim Cromie <jim.cromie@gmail.com> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
dcc101d1d0
commit
56f3bae706
|
@ -95,12 +95,21 @@ corresponding events, i.e., they always refer to events defined earlier on the c
|
|||
line.
|
||||
|
||||
-o file::
|
||||
-output file::
|
||||
--output file::
|
||||
Print the output into the designated file.
|
||||
|
||||
--append::
|
||||
Append to the output file designated with the -o option. Ignored if -o is not specified.
|
||||
|
||||
--log-fd::
|
||||
|
||||
Log output to fd, instead of stderr. Complementary to --output, and mutually exclusive
|
||||
with it. --append may be used here. Examples:
|
||||
3>results perf stat --log-fd 3 -- $cmd
|
||||
3>>results perf stat --log-fd 3 --append -- $cmd
|
||||
|
||||
|
||||
|
||||
EXAMPLES
|
||||
--------
|
||||
|
||||
|
|
|
@ -196,6 +196,7 @@ static bool csv_output = false;
|
|||
static bool group = false;
|
||||
static const char *output_name = NULL;
|
||||
static FILE *output = NULL;
|
||||
static int output_fd;
|
||||
|
||||
static volatile int done = 0;
|
||||
|
||||
|
@ -1080,6 +1081,8 @@ static const struct option options[] = {
|
|||
OPT_STRING('o', "output", &output_name, "file",
|
||||
"output file name"),
|
||||
OPT_BOOLEAN(0, "append", &append_file, "append to the output file"),
|
||||
OPT_INTEGER(0, "log-fd", &output_fd,
|
||||
"log output to fd, instead of stderr"),
|
||||
OPT_END()
|
||||
};
|
||||
|
||||
|
@ -1166,6 +1169,10 @@ int cmd_stat(int argc, const char **argv, const char *prefix __used)
|
|||
if (output_name && strcmp(output_name, "-"))
|
||||
output = NULL;
|
||||
|
||||
if (output_name && output_fd) {
|
||||
fprintf(stderr, "cannot use both --output and --log-fd\n");
|
||||
usage_with_options(stat_usage, options);
|
||||
}
|
||||
if (!output) {
|
||||
struct timespec tm;
|
||||
mode = append_file ? "a" : "w";
|
||||
|
@ -1177,6 +1184,13 @@ int cmd_stat(int argc, const char **argv, const char *prefix __used)
|
|||
}
|
||||
clock_gettime(CLOCK_REALTIME, &tm);
|
||||
fprintf(output, "# started on %s\n", ctime(&tm.tv_sec));
|
||||
} else if (output_fd != 2) {
|
||||
mode = append_file ? "a" : "w";
|
||||
output = fdopen(output_fd, mode);
|
||||
if (!output) {
|
||||
perror("Failed opening logfd");
|
||||
return -errno;
|
||||
}
|
||||
}
|
||||
|
||||
if (csv_sep)
|
||||
|
|
Loading…
Reference in New Issue