lkml.org 
[lkml]   [2011]   [Sep]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 07/16] perf stat: Add --log-fd <N> option to redirect stderr elsewhere
    Date
    From: Jim Cromie <jim.cromie@gmail.com>

    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>
    ---
    tools/perf/Documentation/perf-stat.txt | 11 ++++++++++-
    tools/perf/builtin-stat.c | 14 ++++++++++++++
    2 files changed, 24 insertions(+), 1 deletions(-)

    diff --git a/tools/perf/Documentation/perf-stat.txt b/tools/perf/Documentation/perf-stat.txt
    index 08394c4..8966b9a 100644
    --- a/tools/perf/Documentation/perf-stat.txt
    +++ b/tools/perf/Documentation/perf-stat.txt
    @@ -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
    --------

    diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
    index bec64a9..a43c680 100644
    --- a/tools/perf/builtin-stat.c
    +++ b/tools/perf/builtin-stat.c
    @@ -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)
    --
    1.6.2.5


    \
     
     \ /
      Last update: 2011-09-30 00:53    [W:4.211 / U:0.412 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site