perf config: Add stat.big-num support

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':

             778,849      cycles
  [...]
  $ perf config stat.big-num=false
  $ perf config stat.big-num
  stat.big-num=false
  $ perf stat --event cycles /bin/true

   Performance counter stats for '/bin/true':

              769622      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.

Documentation for perf-config and perf-stat updated.

Signed-off-by: Paul Clarke <pc@us.ibm.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Link: http://lore.kernel.org/lkml/1589991815-17951-1-git-send-email-pc@us.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Paul A. Clarke 2020-05-20 11:23:35 -05:00 committed by Arnaldo Carvalho de Melo
parent 04f9bf2bac
commit d778a778a8
5 changed files with 29 additions and 1 deletions

View file

@ -667,6 +667,11 @@ convert.*::
Limit the size of ordered_events queue, so we could control
allocation size of perf data files without proper finished
round events.
stat.*::
stat.big-num::
(boolean) Change the default for "--big-num". To make
"--no-big-num" the default, set "stat.big-num=false".
intel-pt.*::

View file

@ -93,7 +93,9 @@ report::
-B::
--big-num::
print large numbers with thousands' separators according to locale
print large numbers with thousands' separators according to locale.
Enabled by default. Use "--no-big-num" to disable.
Default setting can be changed with "perf config stat.big-num=false".
-C::
--cpu=::

View file

@ -885,10 +885,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;
}

View file

@ -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;
}

View file

@ -133,6 +133,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);