Re: [PATCH 49/57] perf c2c report: Limit the cachelines table entries
On Mon, Oct 10, 2016 at 05:01:21PM -0300, Arnaldo Carvalho de Melo wrote: > Em Thu, Sep 22, 2016 at 05:37:17PM +0200, Jiri Olsa escreveu: > > Add a limit for entries number of the cachelines table > > entries. By default now it's the 0.0005% minimum of > > remote HITMs. > > > > Also display only cachelines with remote hitm or store data. > > Humm, this made my test machine, which has just one CPU, to show nothing > :-\ > > I think we need to have a command line switch to control this? yep, we make it to display only entries with % hitm > 0.0005, I think you might want to display local HITMs instead, which are always easier to catch with -d lcl.. but the support for this switch is in next patch (53) thanks, jirka
Re: [PATCH 49/57] perf c2c report: Limit the cachelines table entries
On Mon, Oct 10, 2016 at 05:01:21PM -0300, Arnaldo Carvalho de Melo wrote: > Em Thu, Sep 22, 2016 at 05:37:17PM +0200, Jiri Olsa escreveu: > > Add a limit for entries number of the cachelines table > > entries. By default now it's the 0.0005% minimum of > > remote HITMs. > > > > Also display only cachelines with remote hitm or store data. > > Humm, this made my test machine, which has just one CPU, to show nothing > :-\ > > I think we need to have a command line switch to control this? yep, we make it to display only entries with % hitm > 0.0005, I think you might want to display local HITMs instead, which are always easier to catch with -d lcl.. but the support for this switch is in next patch (53) thanks, jirka
Re: [PATCH 49/57] perf c2c report: Limit the cachelines table entries
Em Thu, Sep 22, 2016 at 05:37:17PM +0200, Jiri Olsa escreveu: > Add a limit for entries number of the cachelines table > entries. By default now it's the 0.0005% minimum of > remote HITMs. > > Also display only cachelines with remote hitm or store data. Humm, this made my test machine, which has just one CPU, to show nothing :-\ I think we need to have a command line switch to control this? I'm leaving this patch for later. - Arnaldo > Link: http://lkml.kernel.org/n/tip-inykbom2f19difvsu1e18...@git.kernel.org > Signed-off-by: Jiri Olsa> --- > tools/perf/builtin-c2c.c | 36 ++-- > tools/perf/util/hist.c | 1 + > tools/perf/util/hist.h | 1 + > 3 files changed, 36 insertions(+), 2 deletions(-) > > diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c > index 31e311959480..ff89c0b86c44 100644 > --- a/tools/perf/builtin-c2c.c > +++ b/tools/perf/builtin-c2c.c > @@ -1639,11 +1639,42 @@ static int c2c_hists__reinit(struct c2c_hists > *c2c_hists, > return hpp_list__parse(_hists->list, output, sort); > } > > -static int filter_cb(struct hist_entry *he __maybe_unused) > +#define DISPLAY_LINE_LIMIT 0.0005 > + > +static bool he__display(struct hist_entry *he, struct c2c_stats *stats) > +{ > + struct c2c_hist_entry *c2c_he; > + double ld_dist; > + > + c2c_he = container_of(he, struct c2c_hist_entry, he); > + > + if (stats->rmt_hitm) { > + ld_dist = ((double)c2c_he->stats.rmt_hitm / stats->rmt_hitm); > + if (ld_dist < DISPLAY_LINE_LIMIT) > + he->filtered = HIST_FILTER__C2C; > + } else { > + he->filtered = HIST_FILTER__C2C; > + } > + > + return he->filtered == 0; > +} > + > +static inline int valid_hitm_or_store(struct hist_entry *he) > +{ > + struct c2c_hist_entry *c2c_he; > + > + c2c_he = container_of(he, struct c2c_hist_entry, he); > + return c2c_he->stats.rmt_hitm || c2c_he->stats.store; > +} > + > +static int filter_cb(struct hist_entry *he) > { > if (c2c.show_src && !he->srcline) > he->srcline = hist_entry__get_srcline(he); > > + if (!valid_hitm_or_store(he)) > + he->filtered = HIST_FILTER__C2C; > + > return 0; > } > > @@ -1651,11 +1682,12 @@ static int resort_cl_cb(struct hist_entry *he) > { > struct c2c_hist_entry *c2c_he; > struct c2c_hists *c2c_hists; > + bool display = he__display(he, _stats); > > c2c_he = container_of(he, struct c2c_hist_entry, he); > c2c_hists = c2c_he->hists; > > - if (c2c_hists) { > + if (display && c2c_hists) { > c2c_hists__reinit(c2c_hists, > "percent_rmt_hitm," > "percent_lcl_hitm," > diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c > index b02992efb513..e1be4132054d 100644 > --- a/tools/perf/util/hist.c > +++ b/tools/perf/util/hist.c > @@ -1195,6 +1195,7 @@ static void hist_entry__check_and_remove_filter(struct > hist_entry *he, > case HIST_FILTER__GUEST: > case HIST_FILTER__HOST: > case HIST_FILTER__SOCKET: > + case HIST_FILTER__C2C: > default: > return; > } > diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h > index 9928fed8bc59..d4b6514eeef5 100644 > --- a/tools/perf/util/hist.h > +++ b/tools/perf/util/hist.h > @@ -22,6 +22,7 @@ enum hist_filter { > HIST_FILTER__GUEST, > HIST_FILTER__HOST, > HIST_FILTER__SOCKET, > + HIST_FILTER__C2C, > }; > > enum hist_column { > -- > 2.7.4
Re: [PATCH 49/57] perf c2c report: Limit the cachelines table entries
Em Thu, Sep 22, 2016 at 05:37:17PM +0200, Jiri Olsa escreveu: > Add a limit for entries number of the cachelines table > entries. By default now it's the 0.0005% minimum of > remote HITMs. > > Also display only cachelines with remote hitm or store data. Humm, this made my test machine, which has just one CPU, to show nothing :-\ I think we need to have a command line switch to control this? I'm leaving this patch for later. - Arnaldo > Link: http://lkml.kernel.org/n/tip-inykbom2f19difvsu1e18...@git.kernel.org > Signed-off-by: Jiri Olsa > --- > tools/perf/builtin-c2c.c | 36 ++-- > tools/perf/util/hist.c | 1 + > tools/perf/util/hist.h | 1 + > 3 files changed, 36 insertions(+), 2 deletions(-) > > diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c > index 31e311959480..ff89c0b86c44 100644 > --- a/tools/perf/builtin-c2c.c > +++ b/tools/perf/builtin-c2c.c > @@ -1639,11 +1639,42 @@ static int c2c_hists__reinit(struct c2c_hists > *c2c_hists, > return hpp_list__parse(_hists->list, output, sort); > } > > -static int filter_cb(struct hist_entry *he __maybe_unused) > +#define DISPLAY_LINE_LIMIT 0.0005 > + > +static bool he__display(struct hist_entry *he, struct c2c_stats *stats) > +{ > + struct c2c_hist_entry *c2c_he; > + double ld_dist; > + > + c2c_he = container_of(he, struct c2c_hist_entry, he); > + > + if (stats->rmt_hitm) { > + ld_dist = ((double)c2c_he->stats.rmt_hitm / stats->rmt_hitm); > + if (ld_dist < DISPLAY_LINE_LIMIT) > + he->filtered = HIST_FILTER__C2C; > + } else { > + he->filtered = HIST_FILTER__C2C; > + } > + > + return he->filtered == 0; > +} > + > +static inline int valid_hitm_or_store(struct hist_entry *he) > +{ > + struct c2c_hist_entry *c2c_he; > + > + c2c_he = container_of(he, struct c2c_hist_entry, he); > + return c2c_he->stats.rmt_hitm || c2c_he->stats.store; > +} > + > +static int filter_cb(struct hist_entry *he) > { > if (c2c.show_src && !he->srcline) > he->srcline = hist_entry__get_srcline(he); > > + if (!valid_hitm_or_store(he)) > + he->filtered = HIST_FILTER__C2C; > + > return 0; > } > > @@ -1651,11 +1682,12 @@ static int resort_cl_cb(struct hist_entry *he) > { > struct c2c_hist_entry *c2c_he; > struct c2c_hists *c2c_hists; > + bool display = he__display(he, _stats); > > c2c_he = container_of(he, struct c2c_hist_entry, he); > c2c_hists = c2c_he->hists; > > - if (c2c_hists) { > + if (display && c2c_hists) { > c2c_hists__reinit(c2c_hists, > "percent_rmt_hitm," > "percent_lcl_hitm," > diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c > index b02992efb513..e1be4132054d 100644 > --- a/tools/perf/util/hist.c > +++ b/tools/perf/util/hist.c > @@ -1195,6 +1195,7 @@ static void hist_entry__check_and_remove_filter(struct > hist_entry *he, > case HIST_FILTER__GUEST: > case HIST_FILTER__HOST: > case HIST_FILTER__SOCKET: > + case HIST_FILTER__C2C: > default: > return; > } > diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h > index 9928fed8bc59..d4b6514eeef5 100644 > --- a/tools/perf/util/hist.h > +++ b/tools/perf/util/hist.h > @@ -22,6 +22,7 @@ enum hist_filter { > HIST_FILTER__GUEST, > HIST_FILTER__HOST, > HIST_FILTER__SOCKET, > + HIST_FILTER__C2C, > }; > > enum hist_column { > -- > 2.7.4
[PATCH 49/57] perf c2c report: Limit the cachelines table entries
Add a limit for entries number of the cachelines table entries. By default now it's the 0.0005% minimum of remote HITMs. Also display only cachelines with remote hitm or store data. Link: http://lkml.kernel.org/n/tip-inykbom2f19difvsu1e18...@git.kernel.org Signed-off-by: Jiri Olsa--- tools/perf/builtin-c2c.c | 36 ++-- tools/perf/util/hist.c | 1 + tools/perf/util/hist.h | 1 + 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c index 31e311959480..ff89c0b86c44 100644 --- a/tools/perf/builtin-c2c.c +++ b/tools/perf/builtin-c2c.c @@ -1639,11 +1639,42 @@ static int c2c_hists__reinit(struct c2c_hists *c2c_hists, return hpp_list__parse(_hists->list, output, sort); } -static int filter_cb(struct hist_entry *he __maybe_unused) +#define DISPLAY_LINE_LIMIT 0.0005 + +static bool he__display(struct hist_entry *he, struct c2c_stats *stats) +{ + struct c2c_hist_entry *c2c_he; + double ld_dist; + + c2c_he = container_of(he, struct c2c_hist_entry, he); + + if (stats->rmt_hitm) { + ld_dist = ((double)c2c_he->stats.rmt_hitm / stats->rmt_hitm); + if (ld_dist < DISPLAY_LINE_LIMIT) + he->filtered = HIST_FILTER__C2C; + } else { + he->filtered = HIST_FILTER__C2C; + } + + return he->filtered == 0; +} + +static inline int valid_hitm_or_store(struct hist_entry *he) +{ + struct c2c_hist_entry *c2c_he; + + c2c_he = container_of(he, struct c2c_hist_entry, he); + return c2c_he->stats.rmt_hitm || c2c_he->stats.store; +} + +static int filter_cb(struct hist_entry *he) { if (c2c.show_src && !he->srcline) he->srcline = hist_entry__get_srcline(he); + if (!valid_hitm_or_store(he)) + he->filtered = HIST_FILTER__C2C; + return 0; } @@ -1651,11 +1682,12 @@ static int resort_cl_cb(struct hist_entry *he) { struct c2c_hist_entry *c2c_he; struct c2c_hists *c2c_hists; + bool display = he__display(he, _stats); c2c_he = container_of(he, struct c2c_hist_entry, he); c2c_hists = c2c_he->hists; - if (c2c_hists) { + if (display && c2c_hists) { c2c_hists__reinit(c2c_hists, "percent_rmt_hitm," "percent_lcl_hitm," diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c index b02992efb513..e1be4132054d 100644 --- a/tools/perf/util/hist.c +++ b/tools/perf/util/hist.c @@ -1195,6 +1195,7 @@ static void hist_entry__check_and_remove_filter(struct hist_entry *he, case HIST_FILTER__GUEST: case HIST_FILTER__HOST: case HIST_FILTER__SOCKET: + case HIST_FILTER__C2C: default: return; } diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h index 9928fed8bc59..d4b6514eeef5 100644 --- a/tools/perf/util/hist.h +++ b/tools/perf/util/hist.h @@ -22,6 +22,7 @@ enum hist_filter { HIST_FILTER__GUEST, HIST_FILTER__HOST, HIST_FILTER__SOCKET, + HIST_FILTER__C2C, }; enum hist_column { -- 2.7.4
[PATCH 49/57] perf c2c report: Limit the cachelines table entries
Add a limit for entries number of the cachelines table entries. By default now it's the 0.0005% minimum of remote HITMs. Also display only cachelines with remote hitm or store data. Link: http://lkml.kernel.org/n/tip-inykbom2f19difvsu1e18...@git.kernel.org Signed-off-by: Jiri Olsa --- tools/perf/builtin-c2c.c | 36 ++-- tools/perf/util/hist.c | 1 + tools/perf/util/hist.h | 1 + 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c index 31e311959480..ff89c0b86c44 100644 --- a/tools/perf/builtin-c2c.c +++ b/tools/perf/builtin-c2c.c @@ -1639,11 +1639,42 @@ static int c2c_hists__reinit(struct c2c_hists *c2c_hists, return hpp_list__parse(_hists->list, output, sort); } -static int filter_cb(struct hist_entry *he __maybe_unused) +#define DISPLAY_LINE_LIMIT 0.0005 + +static bool he__display(struct hist_entry *he, struct c2c_stats *stats) +{ + struct c2c_hist_entry *c2c_he; + double ld_dist; + + c2c_he = container_of(he, struct c2c_hist_entry, he); + + if (stats->rmt_hitm) { + ld_dist = ((double)c2c_he->stats.rmt_hitm / stats->rmt_hitm); + if (ld_dist < DISPLAY_LINE_LIMIT) + he->filtered = HIST_FILTER__C2C; + } else { + he->filtered = HIST_FILTER__C2C; + } + + return he->filtered == 0; +} + +static inline int valid_hitm_or_store(struct hist_entry *he) +{ + struct c2c_hist_entry *c2c_he; + + c2c_he = container_of(he, struct c2c_hist_entry, he); + return c2c_he->stats.rmt_hitm || c2c_he->stats.store; +} + +static int filter_cb(struct hist_entry *he) { if (c2c.show_src && !he->srcline) he->srcline = hist_entry__get_srcline(he); + if (!valid_hitm_or_store(he)) + he->filtered = HIST_FILTER__C2C; + return 0; } @@ -1651,11 +1682,12 @@ static int resort_cl_cb(struct hist_entry *he) { struct c2c_hist_entry *c2c_he; struct c2c_hists *c2c_hists; + bool display = he__display(he, _stats); c2c_he = container_of(he, struct c2c_hist_entry, he); c2c_hists = c2c_he->hists; - if (c2c_hists) { + if (display && c2c_hists) { c2c_hists__reinit(c2c_hists, "percent_rmt_hitm," "percent_lcl_hitm," diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c index b02992efb513..e1be4132054d 100644 --- a/tools/perf/util/hist.c +++ b/tools/perf/util/hist.c @@ -1195,6 +1195,7 @@ static void hist_entry__check_and_remove_filter(struct hist_entry *he, case HIST_FILTER__GUEST: case HIST_FILTER__HOST: case HIST_FILTER__SOCKET: + case HIST_FILTER__C2C: default: return; } diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h index 9928fed8bc59..d4b6514eeef5 100644 --- a/tools/perf/util/hist.h +++ b/tools/perf/util/hist.h @@ -22,6 +22,7 @@ enum hist_filter { HIST_FILTER__GUEST, HIST_FILTER__HOST, HIST_FILTER__SOCKET, + HIST_FILTER__C2C, }; enum hist_column { -- 2.7.4