2019-10-18 22:26:21

by Changbin Du

[permalink] [raw]
Subject: [PATCH v5 0/2] perf: add support for logging debug messages to file

When in TUI mode, it is impossible to show all the debug messages to
console. This make it hard to debug perf issues using debug messages.
This patch adds support for logging debug messages to file to resolve
this problem.

v5:
o doc default log path.
v4:
o fix another segfault.
v3:
o fix a segfault issue.
v2:
o specific all debug options one time.

Changbin Du (2):
perf: support multiple debug options separated by ','
perf: add support for logging debug messages to file

tools/perf/Documentation/perf.txt | 16 ++--
tools/perf/util/debug.c | 124 ++++++++++++++++++++----------
2 files changed, 92 insertions(+), 48 deletions(-)

--
2.20.1


2019-10-18 22:26:23

by Changbin Du

[permalink] [raw]
Subject: [PATCH v5 2/2] perf: add support for logging debug messages to file

When in TUI mode, it is impossible to show all the debug messages to
console. This make it hard to debug perf issues using debug messages.
This patch adds support for logging debug messages to file to resolve
this problem.

The usage is:
perf -debug verbose=2,file=~/perf.log COMMAND

Signed-off-by: Changbin Du <[email protected]>

---
v5: doc default log path.
v4: fix another segfault.
v3: fix a segfault issue.
---
tools/perf/Documentation/perf.txt | 16 ++++++-----
tools/perf/util/debug.c | 44 ++++++++++++++++++++++++++++---
2 files changed, 50 insertions(+), 10 deletions(-)

diff --git a/tools/perf/Documentation/perf.txt b/tools/perf/Documentation/perf.txt
index c05a94b2488e..48376be3c97a 100644
--- a/tools/perf/Documentation/perf.txt
+++ b/tools/perf/Documentation/perf.txt
@@ -16,14 +16,18 @@ OPTIONS
Setup debug variable (see list below) in value
range (0, 10). Use like:
--debug verbose # sets verbose = 1
- --debug verbose=2 # sets verbose = 2
+ --debug verbose=2,file=~/perf.log
+ # sets verbose = 2 and save log to file

List of debug variables allowed to set:
- verbose=level - general debug messages
- ordered-events=level - ordered events object debug messages
- data-convert=level - data convert command debug messages
- stderr - write debug output (option -v) to stderr
- in browser mode
+ verbose=level - general debug messages
+ ordered-events=level - ordered events object debug messages
+ data-convert=level - data convert command debug messages
+ stderr - write debug output (option -v) to stderr
+ in browser mode
+ file[=path] - write debug output to log file, default
+ 'perf.log' (stderr and file options are
+ exclusive)

--buildid-dir::
Setup buildid cache directory. It has higher priority than
diff --git a/tools/perf/util/debug.c b/tools/perf/util/debug.c
index df82ad9cd16d..5cc2479d63ea 100644
--- a/tools/perf/util/debug.c
+++ b/tools/perf/util/debug.c
@@ -6,6 +6,7 @@
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
+#include <errno.h>
#include <sys/wait.h>
#include <api/debug.h>
#include <linux/kernel.h>
@@ -26,7 +27,7 @@
int verbose;
bool dump_trace = false, quiet = false;
int debug_ordered_events;
-static bool redirect_to_stderr;
+static FILE *log_file;
int debug_data_convert;

int veprintf(int level, int var, const char *fmt, va_list args)
@@ -34,8 +35,10 @@ int veprintf(int level, int var, const char *fmt, va_list args)
int ret = 0;

if (var >= level) {
- if (use_browser >= 1 && !redirect_to_stderr)
+ if (use_browser >= 1 && !log_file)
ui_helpline__vshow(fmt, args);
+ else if (log_file)
+ ret = vfprintf(log_file, fmt, args);
else
ret = vfprintf(stderr, fmt, args);
}
@@ -197,6 +200,24 @@ static int str2loglevel(const char *vstr)
return v;
}

+static void flush_log(void)
+{
+ if (log_file)
+ fflush(log_file);
+}
+
+static void set_log_output(FILE *f)
+{
+ if (f == log_file)
+ return;
+
+ if (log_file && log_file != stderr)
+ fclose(log_file);
+
+ log_file = f;
+ atexit(flush_log);
+}
+
int perf_debug_option(const char *str)
{
char *sep, *vstr;
@@ -218,8 +239,23 @@ int perf_debug_option(const char *str)
else if (!strcmp(opt, "data-convert"))
debug_data_convert = str2loglevel(vstr);
else if (!strcmp(opt, "stderr"))
- redirect_to_stderr = true;
- else {
+ set_log_output(stderr);
+ else if (!strcmp(opt, "file")) {
+ FILE *f;
+
+ if (!vstr)
+ vstr = (char *)"perf.log";
+
+ f = fopen(vstr, "a");
+ if (!f) {
+ pr_err("Can not create log file: %s\n",
+ strerror(errno));
+ free(dstr);
+ return -1;
+ }
+ fprintf(f, "\n===========perf log===========\n");
+ set_log_output(f);
+ } else {
fprintf(stderr, "unkown debug option '%s'\n", opt);
free(dstr);
return -1;
--
2.20.1

2019-10-21 15:37:53

by Namhyung Kim

[permalink] [raw]
Subject: Re: [PATCH v5 0/2] perf: add support for logging debug messages to file

Hello,

On Fri, Oct 18, 2019 at 9:28 AM Changbin Du <[email protected]> wrote:
>
> When in TUI mode, it is impossible to show all the debug messages to
> console. This make it hard to debug perf issues using debug messages.
> This patch adds support for logging debug messages to file to resolve
> this problem.

I thought I implemented a debug message view in TUI mode by saving
all the messages in a linked list. But it seems not sent to the list and I
cannot find it now. :(

Anyway I understand your concerns and the changes look ok to me, so

Acked-by: Namhyung Kim <[email protected]>

Thanks
Namhyung


>
> v5:
> o doc default log path.
> v4:
> o fix another segfault.
> v3:
> o fix a segfault issue.
> v2:
> o specific all debug options one time.
>
> Changbin Du (2):
> perf: support multiple debug options separated by ','
> perf: add support for logging debug messages to file
>
> tools/perf/Documentation/perf.txt | 16 ++--
> tools/perf/util/debug.c | 124 ++++++++++++++++++++----------
> 2 files changed, 92 insertions(+), 48 deletions(-)
>
> --
> 2.20.1
>

2019-11-23 04:10:56

by Changbin Du

[permalink] [raw]
Subject: Re: [PATCH v5 0/2] perf: add support for logging debug messages to file

Hi Jiri, In case you missed this one in your mailbox. :)

On Fri, Oct 18, 2019 at 08:27:55AM +0800, Changbin Du wrote:
> When in TUI mode, it is impossible to show all the debug messages to
> console. This make it hard to debug perf issues using debug messages.
> This patch adds support for logging debug messages to file to resolve
> this problem.
>
> v5:
> o doc default log path.
> v4:
> o fix another segfault.
> v3:
> o fix a segfault issue.
> v2:
> o specific all debug options one time.
>
> Changbin Du (2):
> perf: support multiple debug options separated by ','
> perf: add support for logging debug messages to file
>
> tools/perf/Documentation/perf.txt | 16 ++--
> tools/perf/util/debug.c | 124 ++++++++++++++++++++----------
> 2 files changed, 92 insertions(+), 48 deletions(-)
>
> --
> 2.20.1
>

--
Cheers,
Changbin Du

2019-11-23 04:12:40

by Changbin Du

[permalink] [raw]
Subject: Re: [PATCH v5 0/2] perf: add support for logging debug messages to file

On Tue, Oct 22, 2019 at 12:35:01AM +0900, Namhyung Kim wrote:
> Hello,
>
> On Fri, Oct 18, 2019 at 9:28 AM Changbin Du <[email protected]> wrote:
> >
> > When in TUI mode, it is impossible to show all the debug messages to
> > console. This make it hard to debug perf issues using debug messages.
> > This patch adds support for logging debug messages to file to resolve
> > this problem.
>
> I thought I implemented a debug message view in TUI mode by saving
> all the messages in a linked list. But it seems not sent to the list and I
> cannot find it now. :(
>
Sounds bad :)

> Anyway I understand your concerns and the changes look ok to me, so
>
> Acked-by: Namhyung Kim <[email protected]>
>
Thanks for your review.

2019-11-25 11:29:23

by Jiri Olsa

[permalink] [raw]
Subject: Re: [PATCH v5 0/2] perf: add support for logging debug messages to file

On Sat, Nov 23, 2019 at 04:09:10AM +0000, Changbin Du wrote:
> Hi Jiri, In case you missed this one in your mailbox. :)

sry I mised this and can't apply this anymore.. could you please
rebase it to current Arnaldo's perf/core?

thanks,
jirka

>
> On Fri, Oct 18, 2019 at 08:27:55AM +0800, Changbin Du wrote:
> > When in TUI mode, it is impossible to show all the debug messages to
> > console. This make it hard to debug perf issues using debug messages.
> > This patch adds support for logging debug messages to file to resolve
> > this problem.
> >
> > v5:
> > o doc default log path.
> > v4:
> > o fix another segfault.
> > v3:
> > o fix a segfault issue.
> > v2:
> > o specific all debug options one time.
> >
> > Changbin Du (2):
> > perf: support multiple debug options separated by ','
> > perf: add support for logging debug messages to file
> >
> > tools/perf/Documentation/perf.txt | 16 ++--
> > tools/perf/util/debug.c | 124 ++++++++++++++++++++----------
> > 2 files changed, 92 insertions(+), 48 deletions(-)
> >
> > --
> > 2.20.1
> >
>
> --
> Cheers,
> Changbin Du
>

2019-11-25 14:41:34

by Changbin Du

[permalink] [raw]
Subject: Re: [PATCH v5 0/2] perf: add support for logging debug messages to file

On Mon, Nov 25, 2019 at 10:27:58AM +0100, Jiri Olsa wrote:
> On Sat, Nov 23, 2019 at 04:09:10AM +0000, Changbin Du wrote:
> > Hi Jiri, In case you missed this one in your mailbox. :)
>
> sry I mised this and can't apply this anymore.. could you please
> rebase it to current Arnaldo's perf/core?
>
no problem, please check it later.

> thanks,
> jirka
>
> >
> > On Fri, Oct 18, 2019 at 08:27:55AM +0800, Changbin Du wrote:
> > > When in TUI mode, it is impossible to show all the debug messages to
> > > console. This make it hard to debug perf issues using debug messages.
> > > This patch adds support for logging debug messages to file to resolve
> > > this problem.
> > >
> > > v5:
> > > o doc default log path.
> > > v4:
> > > o fix another segfault.
> > > v3:
> > > o fix a segfault issue.
> > > v2:
> > > o specific all debug options one time.
> > >
> > > Changbin Du (2):
> > > perf: support multiple debug options separated by ','
> > > perf: add support for logging debug messages to file
> > >
> > > tools/perf/Documentation/perf.txt | 16 ++--
> > > tools/perf/util/debug.c | 124 ++++++++++++++++++++----------
> > > 2 files changed, 92 insertions(+), 48 deletions(-)
> > >
> > > --
> > > 2.20.1
> > >
> >
> > --
> > Cheers,
> > Changbin Du
> >
>

--
Cheers,
Changbin Du