perf trace: Make the alignment of the syscall args be configurable

Since the start 'perf trace' aligns the parens enclosing the list of
syscall args to align the syscall results, allow this to be
configurable, keeping the default of 70. Using:

  # perf config
  llvm.dump-obj=true
  trace.add_events=/home/acme/git/perf/tools/perf/examples/bpf/augmented_raw_syscalls.o
  trace.show_zeros=yes
  trace.show_duration=no
  trace.no_inherit=yes
  trace.show_timestamp=no
  trace.show_arg_names=no
  trace.args_alignment=0
  # trace -e open*,close,*sleep sleep 1
  openat(CWD, /etc/ld.so.cache, CLOEXEC) = 3
  close(3) = 0
  openat(CWD, /lib64/libc.so.6, CLOEXEC) = 3
  close(3) = 0
  openat(CWD, /usr/lib/locale/locale-archive, CLOEXEC) = 3
  close(3) = 0
  nanosleep(0x7ffc00de66f0, 0) = 0
  close(1) = 0
  close(2) = 0
  #

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Luis Cláudio Gonçalves <lclaudio@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: https://lkml.kernel.org/n/tip-r8cbhoz1lr5npq9tutpvoigr@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 9d6dc178
...@@ -529,6 +529,10 @@ trace.*:: ...@@ -529,6 +529,10 @@ trace.*::
activate the 'perf trace' logic that looks for syscall activate the 'perf trace' logic that looks for syscall
pointer contents after the normal tracepoint payload. pointer contents after the normal tracepoint payload.
trace.args_alignment::
Number of columns to align the argument list, default is 70,
use 40 for the strace default, zero to no alignment.
trace.no_inherit:: trace.no_inherit::
Do not follow children threads. Do not follow children threads.
......
...@@ -127,6 +127,7 @@ struct trace { ...@@ -127,6 +127,7 @@ struct trace {
bool show_tool_stats; bool show_tool_stats;
bool trace_syscalls; bool trace_syscalls;
bool kernel_syscallchains; bool kernel_syscallchains;
s16 args_alignment;
bool show_tstamp; bool show_tstamp;
bool show_duration; bool show_duration;
bool show_zeros; bool show_zeros;
...@@ -1731,7 +1732,7 @@ static int trace__printf_interrupted_entry(struct trace *trace) ...@@ -1731,7 +1732,7 @@ static int trace__printf_interrupted_entry(struct trace *trace)
return 0; return 0;
printed = trace__fprintf_entry_head(trace, trace->current, 0, false, ttrace->entry_time, trace->output); printed = trace__fprintf_entry_head(trace, trace->current, 0, false, ttrace->entry_time, trace->output);
printed += fprintf(trace->output, "%-70s) ...\n", ttrace->entry_str); printed += fprintf(trace->output, "%-*s) ...\n", trace->args_alignment, ttrace->entry_str);
ttrace->entry_pending = false; ttrace->entry_pending = false;
++trace->nr_events_printed; ++trace->nr_events_printed;
...@@ -1838,7 +1839,7 @@ static int trace__sys_enter(struct trace *trace, struct perf_evsel *evsel, ...@@ -1838,7 +1839,7 @@ static int trace__sys_enter(struct trace *trace, struct perf_evsel *evsel,
if (sc->is_exit) { if (sc->is_exit) {
if (!(trace->duration_filter || trace->summary_only || trace->failure_only || trace->min_stack)) { if (!(trace->duration_filter || trace->summary_only || trace->failure_only || trace->min_stack)) {
trace__fprintf_entry_head(trace, thread, 0, false, ttrace->entry_time, trace->output); trace__fprintf_entry_head(trace, thread, 0, false, ttrace->entry_time, trace->output);
fprintf(trace->output, "%-70s)\n", ttrace->entry_str); fprintf(trace->output, "%-*s)\n", trace->args_alignment, ttrace->entry_str);
} }
} else { } else {
ttrace->entry_pending = true; ttrace->entry_pending = true;
...@@ -1981,7 +1982,7 @@ static int trace__sys_exit(struct trace *trace, struct perf_evsel *evsel, ...@@ -1981,7 +1982,7 @@ static int trace__sys_exit(struct trace *trace, struct perf_evsel *evsel,
trace__fprintf_entry_head(trace, thread, duration, duration_calculated, ttrace->entry_time, trace->output); trace__fprintf_entry_head(trace, thread, duration, duration_calculated, ttrace->entry_time, trace->output);
if (ttrace->entry_pending) { if (ttrace->entry_pending) {
fprintf(trace->output, "%-70s", ttrace->entry_str); fprintf(trace->output, "%-*s", trace->args_alignment, ttrace->entry_str);
} else { } else {
fprintf(trace->output, " ... ["); fprintf(trace->output, " ... [");
color_fprintf(trace->output, PERF_COLOR_YELLOW, "continued"); color_fprintf(trace->output, PERF_COLOR_YELLOW, "continued");
...@@ -3563,6 +3564,10 @@ static int trace__config(const char *var, const char *value, void *arg) ...@@ -3563,6 +3564,10 @@ static int trace__config(const char *var, const char *value, void *arg)
trace->show_zeros = new_show_zeros; trace->show_zeros = new_show_zeros;
} else if (!strcmp(var, "trace.no_inherit")) { } else if (!strcmp(var, "trace.no_inherit")) {
trace->opts.no_inherit = perf_config_bool(var, value); trace->opts.no_inherit = perf_config_bool(var, value);
} else if (!strcmp(var, "trace.args_alignment")) {
int args_alignment = 0;
if (perf_config_int(&args_alignment, var, value) == 0)
trace->args_alignment = args_alignment;
} }
out: out:
return err; return err;
...@@ -3596,6 +3601,7 @@ int cmd_trace(int argc, const char **argv) ...@@ -3596,6 +3601,7 @@ int cmd_trace(int argc, const char **argv)
.show_tstamp = true, .show_tstamp = true,
.show_duration = true, .show_duration = true,
.show_arg_names = true, .show_arg_names = true,
.args_alignment = 70,
.trace_syscalls = false, .trace_syscalls = false,
.kernel_syscallchains = false, .kernel_syscallchains = false,
.max_stack = UINT_MAX, .max_stack = UINT_MAX,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment