mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-17 17:53:56 +08:00
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.
|
line.
|
||||||
|
|
||||||
-o file::
|
-o file::
|
||||||
-output file::
|
--output file::
|
||||||
Print the output into the designated file.
|
Print the output into the designated file.
|
||||||
|
|
||||||
--append::
|
--append::
|
||||||
Append to the output file designated with the -o option. Ignored if -o is not specified.
|
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
|
EXAMPLES
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
@ -196,6 +196,7 @@ static bool csv_output = false;
|
|||||||
static bool group = false;
|
static bool group = false;
|
||||||
static const char *output_name = NULL;
|
static const char *output_name = NULL;
|
||||||
static FILE *output = NULL;
|
static FILE *output = NULL;
|
||||||
|
static int output_fd;
|
||||||
|
|
||||||
static volatile int done = 0;
|
static volatile int done = 0;
|
||||||
|
|
||||||
@ -1080,6 +1081,8 @@ static const struct option options[] = {
|
|||||||
OPT_STRING('o', "output", &output_name, "file",
|
OPT_STRING('o', "output", &output_name, "file",
|
||||||
"output file name"),
|
"output file name"),
|
||||||
OPT_BOOLEAN(0, "append", &append_file, "append to the output file"),
|
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()
|
OPT_END()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1166,6 +1169,10 @@ int cmd_stat(int argc, const char **argv, const char *prefix __used)
|
|||||||
if (output_name && strcmp(output_name, "-"))
|
if (output_name && strcmp(output_name, "-"))
|
||||||
output = NULL;
|
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) {
|
if (!output) {
|
||||||
struct timespec tm;
|
struct timespec tm;
|
||||||
mode = append_file ? "a" : "w";
|
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);
|
clock_gettime(CLOCK_REALTIME, &tm);
|
||||||
fprintf(output, "# started on %s\n", ctime(&tm.tv_sec));
|
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)
|
if (csv_sep)
|
||||||
|
Loading…
Reference in New Issue
Block a user