linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Sohaib Mohamed <sohaib.amhmd@gmail.com>
Cc: irogers@google.com, Riccardo Mancini <rickyman7@gmail.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Mark Rutland <mark.rutland@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Fabian Hemmer <copy@copy.sh>,
	linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2] Unbuffered output when pipe/tee to a file
Date: Thu, 9 Dec 2021 15:50:42 -0300	[thread overview]
Message-ID: <YbJQAp6/gz4kHdi8@kernel.org> (raw)
In-Reply-To: <20211119061409.78004-1-sohaib.amhmd@gmail.com>

Em Fri, Nov 19, 2021 at 08:14:08AM +0200, Sohaib Mohamed escreveu:
> The output of Perf bench gets buffered when I pipe it to a file or to
> tee, in such a way that I can see it only at the end.

Humm, not at the end, the output is staggered, i.e. only when the buffer
fills up it is drained and then we have to wait for it to fill up again,
rinse repeat.

I just tested and applied it, adding a note about this patch fixing the
previous output bursty behaviour.

- Arnaldo
 
> E.g.
> $ perf bench internals synthesize -t
> < output comes out fine after each test run >
> 
> $ perf bench internals synthesize -t | tee file.txt
> < output comes out only at the end of all tests >
> 
> This patch resolves this issue for 'bench' and 'test' subcommands.
> 
> See, also:
> $ perf bench mem all | tee file.txt
> $ perf bench sched all | tee file.txt
> $ perf bench internals all -t | tee file.txt
> $ perf bench internals all | tee file.txt
> 
> Suggested-by: Riccardo Mancini <rickyman7@gmail.com>
> Signed-off-by: Sohaib Mohamed <sohaib.amhmd@gmail.com>
> ---
> v1 -> v2:
> - Use setvbuf(), instead of sprinkling fflush() calls and missing some places.
> 
> v1: https://lore.kernel.org/linux-perf-users/20211112215313.108823-1-sohaib.amhmd@gmail.com/
> ---
>  tools/perf/builtin-bench.c      | 5 +++--
>  tools/perf/tests/builtin-test.c | 3 +++
>  2 files changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/perf/builtin-bench.c b/tools/perf/builtin-bench.c
> index d0895162c2ba..d291f3a8af5f 100644
> --- a/tools/perf/builtin-bench.c
> +++ b/tools/perf/builtin-bench.c
> @@ -226,7 +226,6 @@ static void run_collection(struct collection *coll)
>  		if (!bench->fn)
>  			break;
>  		printf("# Running %s/%s benchmark...\n", coll->name, bench->name);
> -		fflush(stdout);
> 
>  		argv[1] = bench->name;
>  		run_bench(coll->name, bench->name, bench->fn, 1, argv);
> @@ -247,6 +246,9 @@ int cmd_bench(int argc, const char **argv)
>  	struct collection *coll;
>  	int ret = 0;
> 
> +	/* Unbuffered output */
> +	setvbuf(stdout, NULL, _IONBF, 0);
> +
>  	if (argc < 2) {
>  		/* No collection specified. */
>  		print_usage();
> @@ -300,7 +302,6 @@ int cmd_bench(int argc, const char **argv)
> 
>  			if (bench_format == BENCH_FORMAT_DEFAULT)
>  				printf("# Running '%s/%s' benchmark:\n", coll->name, bench->name);
> -			fflush(stdout);
>  			ret = run_bench(coll->name, bench->name, bench->fn, argc-1, argv+1);
>  			goto end;
>  		}
> diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c
> index 8cb5a1c3489e..d92ae4efd2e6 100644
> --- a/tools/perf/tests/builtin-test.c
> +++ b/tools/perf/tests/builtin-test.c
> @@ -606,6 +606,9 @@ int cmd_test(int argc, const char **argv)
>          if (ret < 0)
>                  return ret;
> 
> +	/* Unbuffered output */
> +	setvbuf(stdout, NULL, _IONBF, 0);
> +
>  	argc = parse_options_subcommand(argc, argv, test_options, test_subcommands, test_usage, 0);
>  	if (argc >= 1 && !strcmp(argv[0], "list"))
>  		return perf_test__list(argc - 1, argv + 1);
> --
> 2.25.1

-- 

- Arnaldo

  parent reply	other threads:[~2021-12-09 18:50 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-19  6:14 [PATCH v2] Unbuffered output when pipe/tee to a file Sohaib Mohamed
2021-11-28 15:34 ` Jiri Olsa
2021-12-09 18:51   ` Arnaldo Carvalho de Melo
2021-12-09 19:30     ` Jiri Olsa
2021-12-09 18:50 ` Arnaldo Carvalho de Melo [this message]
2021-12-11 17:10   ` David Laight

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YbJQAp6/gz4kHdi8@kernel.org \
    --to=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=copy@copy.sh \
    --cc=irogers@google.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=rickyman7@gmail.com \
    --cc=sohaib.amhmd@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).