* [PATCH] perf config: Add stat.big-num support
@ 2020-05-20 15:32 Paul A. Clarke
2020-05-20 15:37 ` Arnaldo Carvalho de Melo
0 siblings, 1 reply; 2+ messages in thread
From: Paul A. Clarke @ 2020-05-20 15:32 UTC (permalink / raw)
To: linux-perf-users, linux-kernel, acme
From: "Paul A. Clarke" <pc@us.ibm.com>
Add support for new "stat.big-num" boolean option.
This allows a user to set a default for "--no-big-num" for "perf stat"
commands.
$ perf config stat.big-num
$ perf stat --event cycles /bin/true
Performance counter stats for '/bin/true':
803,684 cycles
[...]
$ perf config stat.big-num=0
$ perf config stat.big-num
stat.big-num=0
$ perf stat --event cycles /bin/true
Performance counter stats for '/bin/true':
790448 cycles
[...]
There is an interaction with "--field-separator" that must be
accommodated, such that specifying "--big-num --field-separator={x}"
still reports an invalid combination of options.
Signed-off-by: Paul A. Clarke <pc@us.ibm.com>
---
Testing results with a matrix of:
- nothing in .perfconfig, stat.big-num=0, stat.big-num=1
- --field-separator not set, --field-separator=:
- no "--big-num", --big-num, --no-big-num
$ perf config stat.big-num
$ perf stat --event cycles /bin/true
Performance counter stats for '/bin/true':
803,684 cycles
0.000592761 seconds time elapsed
0.000672000 seconds user
0.000000000 seconds sys
$ perf stat --event cycles --big-num /bin/true
Performance counter stats for '/bin/true':
809,599 cycles
0.000576090 seconds time elapsed
0.000627000 seconds user
0.000000000 seconds sys
$ perf stat --event cycles --no-big-num /bin/true
Performance counter stats for '/bin/true':
793870 cycles
0.000574928 seconds time elapsed
0.000625000 seconds user
0.000000000 seconds sys
$ perf stat --event cycles --field-separator=: /bin/true
790255::cycles:346960:100.00::
$ perf stat --event cycles --big-num --field-separator=: /bin/true
-B option not supported with -x
Usage: perf stat [<options>] [<command>]
-B, --big-num print large numbers with thousands' separators
-x, --field-separator <separator>
print counts with custom separator
$ perf stat --event cycles --no-big-num --field-separator=: /bin/true
764548::cycles:335938:100.00::
$ perf config stat.big-num=0
$ perf config stat.big-num
stat.big-num=0
$ perf stat --event cycles /bin/true
Performance counter stats for '/bin/true':
790448 cycles
0.000567659 seconds time elapsed
0.000619000 seconds user
0.000000000 seconds sys
$ perf stat --event cycles --big-num /bin/true
Performance counter stats for '/bin/true':
751,377 cycles
0.000534888 seconds time elapsed
0.000587000 seconds user
0.000000000 seconds sys
$ perf stat --event cycles --no-big-num /bin/true
Performance counter stats for '/bin/true':
803738 cycles
0.000576151 seconds time elapsed
0.000657000 seconds user
0.000000000 seconds sys
$ perf stat --event cycles --field-separator=: /bin/true
774897::cycles:339986:100.00::
$ perf stat --event cycles --big-num --field-separator=: /bin/true
-B option not supported with -x
Usage: perf stat [<options>] [<command>]
-B, --big-num print large numbers with thousands' separators
-x, --field-separator <separator>
print counts with custom separator
$ perf stat --event cycles --no-big-num --field-separator=: /bin/true
814619::cycles:358260:100.00::
$ perf config stat.big-num=1
$ perf config stat.big-num
stat.big-num=1
$ perf stat --event cycles /bin/true
Performance counter stats for '/bin/true':
787,680 cycles
0.000555401 seconds time elapsed
0.000623000 seconds user
0.000000000 seconds sys
$ perf stat --event cycles --big-num /bin/true
Performance counter stats for '/bin/true':
783,287 cycles
0.000562255 seconds time elapsed
0.000636000 seconds user
0.000000000 seconds sys
$ perf stat --event cycles --no-big-num /bin/true
Performance counter stats for '/bin/true':
748802 cycles
0.000525658 seconds time elapsed
0.000586000 seconds user
0.000000000 seconds sys
$ perf stat --event cycles --field-separator=: /bin/true
785868::cycles:344508:100.00::
$ perf stat --event cycles --big-num --field-separator=: /bin/true
-B option not supported with -x
Usage: perf stat [<options>] [<command>]
-B, --big-num print large numbers with thousands' separators
-x, --field-separator <separator>
print counts with custom separator
$ perf stat --event cycles --no-big-num --field-separator=: /bin/true
794273::cycles:349600:100.00::
$
--
tools/perf/builtin-stat.c | 6 ++++++
tools/perf/util/config.c | 13 +++++++++++++
tools/perf/util/stat.h | 2 ++
3 files changed, 21 insertions(+)
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index e0c1ad23c768..c39305907940 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -821,10 +821,16 @@ static void sig_atexit(void)
kill(getpid(), signr);
}
+void perf_stat__set_big_num(int set)
+{
+ stat_config.big_num = (set != 0);
+}
+
static int stat__set_big_num(const struct option *opt __maybe_unused,
const char *s __maybe_unused, int unset)
{
big_num_opt = unset ? 0 : 1;
+ perf_stat__set_big_num(!unset);
return 0;
}
diff --git a/tools/perf/util/config.c b/tools/perf/util/config.c
index ef38eba56ed0..8e65f1fa421f 100644
--- a/tools/perf/util/config.c
+++ b/tools/perf/util/config.c
@@ -17,6 +17,7 @@
#include "util/event.h" /* proc_map_timeout */
#include "util/hist.h" /* perf_hist_config */
#include "util/llvm-utils.h" /* perf_llvm_config */
+#include "util/stat.h" /* perf_stat__set_big_num */
#include "build-id.h"
#include "debug.h"
#include "config.h"
@@ -452,6 +453,15 @@ static int perf_ui_config(const char *var, const char *value)
return 0;
}
+static int perf_stat_config(const char *var, const char *value)
+{
+ if (!strcmp(var, "stat.big-num"))
+ perf_stat__set_big_num(perf_config_bool(var, value));
+
+ /* Add other config variables here. */
+ return 0;
+}
+
int perf_default_config(const char *var, const char *value,
void *dummy __maybe_unused)
{
@@ -473,6 +483,9 @@ int perf_default_config(const char *var, const char *value,
if (strstarts(var, "buildid."))
return perf_buildid_config(var, value);
+ if (strstarts(var, "stat."))
+ return perf_stat_config(var, value);
+
/* Add other config variables here. */
return 0;
}
diff --git a/tools/perf/util/stat.h b/tools/perf/util/stat.h
index b4fdfaa7f2c0..4bd6dc6cb6aa 100644
--- a/tools/perf/util/stat.h
+++ b/tools/perf/util/stat.h
@@ -132,6 +132,8 @@ struct perf_stat_config {
struct rblist metric_events;
};
+void perf_stat__set_big_num(int set);
+
void update_stats(struct stats *stats, u64 val);
double avg_stats(struct stats *stats);
double stddev_stats(struct stats *stats);
--
2.18.2
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH] perf config: Add stat.big-num support
2020-05-20 15:32 [PATCH] perf config: Add stat.big-num support Paul A. Clarke
@ 2020-05-20 15:37 ` Arnaldo Carvalho de Melo
0 siblings, 0 replies; 2+ messages in thread
From: Arnaldo Carvalho de Melo @ 2020-05-20 15:37 UTC (permalink / raw)
To: Paul A. Clarke; +Cc: linux-perf-users, linux-kernel
Em Wed, May 20, 2020 at 10:32:55AM -0500, Paul A. Clarke escreveu:
> From: "Paul A. Clarke" <pc@us.ibm.com>
>
> Add support for new "stat.big-num" boolean option.
>
> This allows a user to set a default for "--no-big-num" for "perf stat"
> commands.
That is super cool, these polishing patches using infrastructure already
in place for configuring user preferences, great.
One thing you forgot was to change 'man perf-stat's entry for
--no-big-num to state that this is now possible, can you please do that
and send a v2?
- Arnaldo
> $ perf config stat.big-num
> $ perf stat --event cycles /bin/true
>
> Performance counter stats for '/bin/true':
>
> 803,684 cycles
> [...]
> $ perf config stat.big-num=0
> $ perf config stat.big-num
> stat.big-num=0
> $ perf stat --event cycles /bin/true
>
> Performance counter stats for '/bin/true':
>
> 790448 cycles
> [...]
>
> There is an interaction with "--field-separator" that must be
> accommodated, such that specifying "--big-num --field-separator={x}"
> still reports an invalid combination of options.
>
> Signed-off-by: Paul A. Clarke <pc@us.ibm.com>
> ---
> Testing results with a matrix of:
> - nothing in .perfconfig, stat.big-num=0, stat.big-num=1
> - --field-separator not set, --field-separator=:
> - no "--big-num", --big-num, --no-big-num
>
> $ perf config stat.big-num
> $ perf stat --event cycles /bin/true
>
> Performance counter stats for '/bin/true':
>
> 803,684 cycles
>
> 0.000592761 seconds time elapsed
>
> 0.000672000 seconds user
> 0.000000000 seconds sys
>
>
> $ perf stat --event cycles --big-num /bin/true
>
> Performance counter stats for '/bin/true':
>
> 809,599 cycles
>
> 0.000576090 seconds time elapsed
>
> 0.000627000 seconds user
> 0.000000000 seconds sys
>
>
> $ perf stat --event cycles --no-big-num /bin/true
>
> Performance counter stats for '/bin/true':
>
> 793870 cycles
>
> 0.000574928 seconds time elapsed
>
> 0.000625000 seconds user
> 0.000000000 seconds sys
>
>
> $ perf stat --event cycles --field-separator=: /bin/true
> 790255::cycles:346960:100.00::
> $ perf stat --event cycles --big-num --field-separator=: /bin/true
> -B option not supported with -x
>
> Usage: perf stat [<options>] [<command>]
>
> -B, --big-num print large numbers with thousands' separators
> -x, --field-separator <separator>
> print counts with custom separator
> $ perf stat --event cycles --no-big-num --field-separator=: /bin/true
> 764548::cycles:335938:100.00::
> $ perf config stat.big-num=0
> $ perf config stat.big-num
> stat.big-num=0
> $ perf stat --event cycles /bin/true
>
> Performance counter stats for '/bin/true':
>
> 790448 cycles
>
> 0.000567659 seconds time elapsed
>
> 0.000619000 seconds user
> 0.000000000 seconds sys
>
>
> $ perf stat --event cycles --big-num /bin/true
>
> Performance counter stats for '/bin/true':
>
> 751,377 cycles
>
> 0.000534888 seconds time elapsed
>
> 0.000587000 seconds user
> 0.000000000 seconds sys
>
>
> $ perf stat --event cycles --no-big-num /bin/true
>
> Performance counter stats for '/bin/true':
>
> 803738 cycles
>
> 0.000576151 seconds time elapsed
>
> 0.000657000 seconds user
> 0.000000000 seconds sys
>
>
> $ perf stat --event cycles --field-separator=: /bin/true
> 774897::cycles:339986:100.00::
> $ perf stat --event cycles --big-num --field-separator=: /bin/true
> -B option not supported with -x
>
> Usage: perf stat [<options>] [<command>]
>
> -B, --big-num print large numbers with thousands' separators
> -x, --field-separator <separator>
> print counts with custom separator
> $ perf stat --event cycles --no-big-num --field-separator=: /bin/true
> 814619::cycles:358260:100.00::
> $ perf config stat.big-num=1
> $ perf config stat.big-num
> stat.big-num=1
> $ perf stat --event cycles /bin/true
>
> Performance counter stats for '/bin/true':
>
> 787,680 cycles
>
> 0.000555401 seconds time elapsed
>
> 0.000623000 seconds user
> 0.000000000 seconds sys
>
>
> $ perf stat --event cycles --big-num /bin/true
>
> Performance counter stats for '/bin/true':
>
> 783,287 cycles
>
> 0.000562255 seconds time elapsed
>
> 0.000636000 seconds user
> 0.000000000 seconds sys
>
>
> $ perf stat --event cycles --no-big-num /bin/true
>
> Performance counter stats for '/bin/true':
>
> 748802 cycles
>
> 0.000525658 seconds time elapsed
>
> 0.000586000 seconds user
> 0.000000000 seconds sys
>
>
> $ perf stat --event cycles --field-separator=: /bin/true
> 785868::cycles:344508:100.00::
> $ perf stat --event cycles --big-num --field-separator=: /bin/true
> -B option not supported with -x
>
> Usage: perf stat [<options>] [<command>]
>
> -B, --big-num print large numbers with thousands' separators
> -x, --field-separator <separator>
> print counts with custom separator
> $ perf stat --event cycles --no-big-num --field-separator=: /bin/true
> 794273::cycles:349600:100.00::
> $
> --
> tools/perf/builtin-stat.c | 6 ++++++
> tools/perf/util/config.c | 13 +++++++++++++
> tools/perf/util/stat.h | 2 ++
> 3 files changed, 21 insertions(+)
>
> diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
> index e0c1ad23c768..c39305907940 100644
> --- a/tools/perf/builtin-stat.c
> +++ b/tools/perf/builtin-stat.c
> @@ -821,10 +821,16 @@ static void sig_atexit(void)
> kill(getpid(), signr);
> }
>
> +void perf_stat__set_big_num(int set)
> +{
> + stat_config.big_num = (set != 0);
> +}
> +
> static int stat__set_big_num(const struct option *opt __maybe_unused,
> const char *s __maybe_unused, int unset)
> {
> big_num_opt = unset ? 0 : 1;
> + perf_stat__set_big_num(!unset);
> return 0;
> }
>
> diff --git a/tools/perf/util/config.c b/tools/perf/util/config.c
> index ef38eba56ed0..8e65f1fa421f 100644
> --- a/tools/perf/util/config.c
> +++ b/tools/perf/util/config.c
> @@ -17,6 +17,7 @@
> #include "util/event.h" /* proc_map_timeout */
> #include "util/hist.h" /* perf_hist_config */
> #include "util/llvm-utils.h" /* perf_llvm_config */
> +#include "util/stat.h" /* perf_stat__set_big_num */
> #include "build-id.h"
> #include "debug.h"
> #include "config.h"
> @@ -452,6 +453,15 @@ static int perf_ui_config(const char *var, const char *value)
> return 0;
> }
>
> +static int perf_stat_config(const char *var, const char *value)
> +{
> + if (!strcmp(var, "stat.big-num"))
> + perf_stat__set_big_num(perf_config_bool(var, value));
> +
> + /* Add other config variables here. */
> + return 0;
> +}
> +
> int perf_default_config(const char *var, const char *value,
> void *dummy __maybe_unused)
> {
> @@ -473,6 +483,9 @@ int perf_default_config(const char *var, const char *value,
> if (strstarts(var, "buildid."))
> return perf_buildid_config(var, value);
>
> + if (strstarts(var, "stat."))
> + return perf_stat_config(var, value);
> +
> /* Add other config variables here. */
> return 0;
> }
> diff --git a/tools/perf/util/stat.h b/tools/perf/util/stat.h
> index b4fdfaa7f2c0..4bd6dc6cb6aa 100644
> --- a/tools/perf/util/stat.h
> +++ b/tools/perf/util/stat.h
> @@ -132,6 +132,8 @@ struct perf_stat_config {
> struct rblist metric_events;
> };
>
> +void perf_stat__set_big_num(int set);
> +
> void update_stats(struct stats *stats, u64 val);
> double avg_stats(struct stats *stats);
> double stddev_stats(struct stats *stats);
> --
> 2.18.2
--
- Arnaldo
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2020-05-20 15:37 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-05-20 15:32 [PATCH] perf config: Add stat.big-num support Paul A. Clarke
2020-05-20 15:37 ` Arnaldo Carvalho de Melo
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.