* [PATCH 1/1 tip] perf top: Move hard coded list to /etc/perfconfig/symbols.skip
@ 2009-07-28 0:10 Arnaldo Carvalho de Melo
2009-07-28 3:18 ` Frederic Weisbecker
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Arnaldo Carvalho de Melo @ 2009-07-28 0:10 UTC (permalink / raw)
To: Ingo Molnar
Cc: Frederic Weisbecker, Mike Galbraith, Peter Zijlstra,
Paul Mackerras, H. Peter Anvin, Linux Kernel Mailing List
This also paves the way to add more symbol lists to be filtered out,
spinlock anyone?
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
Cc: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/Makefile | 6 ++++--
tools/perf/builtin-top.c | 26 +++++++-------------------
tools/perf/util/strlist.c | 10 ++++++++--
3 files changed, 19 insertions(+), 23 deletions(-)
diff --git a/tools/perf/Makefile b/tools/perf/Makefile
index a5e9b87..385a1bc 100644
--- a/tools/perf/Makefile
+++ b/tools/perf/Makefile
@@ -193,11 +193,10 @@ template_dir = share/perf-core/templates
htmldir = share/doc/perf-doc
ifeq ($(prefix),/usr)
sysconfdir = /etc
-ETC_PERFCONFIG = $(sysconfdir)/perfconfig
else
sysconfdir = $(prefix)/etc
-ETC_PERFCONFIG = etc/perfconfig
endif
+ETC_PERFCONFIG = $(sysconfdir)/perfconfig
lib = lib
# DESTDIR=
@@ -596,6 +595,7 @@ PERL_PATH_SQ = $(subst ','\'',$(PERL_PATH))
LIBS = $(PERFLIBS) $(EXTLIBS)
BASIC_CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER_SQ)' \
+ -DPERF_ETC_PATH='"$(ETC_PERFCONFIG)"' \
$(COMPAT_CFLAGS)
LIB_OBJS += $(COMPAT_OBJS)
@@ -804,6 +804,8 @@ export perfexec_instdir
install: all
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
$(INSTALL) perf$X '$(DESTDIR_SQ)$(bindir_SQ)'
+ $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(ETC_PERFCONFIG_SQ)'
+ $(INSTALL) symbols.skip '$(DESTDIR_SQ)$(ETC_PERFCONFIG_SQ)'
ifdef BUILT_INS
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
$(INSTALL) $(BUILT_INS) '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
index f139f1a..628ef29 100644
--- a/tools/perf/builtin-top.c
+++ b/tools/perf/builtin-top.c
@@ -20,6 +20,7 @@
#include "perf.h"
+#include "util/strlist.h"
#include "util/symbol.h"
#include "util/color.h"
#include "util/util.h"
@@ -279,24 +280,12 @@ static void *display_thread(void *arg __used)
}
/* Tag samples to be skipped. */
-static const char *skip_symbols[] = {
- "default_idle",
- "cpu_idle",
- "enter_idle",
- "exit_idle",
- "mwait_idle",
- "mwait_idle_with_hints",
- "ppc64_runlatch_off",
- "pseries_dedicated_idle_sleep",
- NULL
-};
+static struct strlist *skip_symbols;
static int symbol_filter(struct dso *self, struct symbol *sym)
{
static int filter_match;
- struct sym_entry *syme;
const char *name = sym->name;
- int i;
/*
* ppc64 uses function descriptors and appends a '.' to the
@@ -314,12 +303,9 @@ static int symbol_filter(struct dso *self, struct symbol *sym)
strstr(name, "_text_end"))
return 1;
- syme = dso__sym_priv(self, sym);
- for (i = 0; skip_symbols[i]; i++) {
- if (!strcmp(skip_symbols[i], name)) {
- syme->skip = 1;
- break;
- }
+ if (strlist__has_entry(skip_symbols, name)) {
+ struct sym_entry *syme = dso__sym_priv(self, sym);
+ syme->skip = 1;
}
if (filter_match == 1) {
@@ -733,6 +719,8 @@ int cmd_top(int argc, const char **argv, const char *prefix __used)
if (delay_secs < 1)
delay_secs = 1;
+ skip_symbols = strlist__new(true, "file://" PERF_ETC_PATH "/symbols.skip");
+
parse_symbols();
/*
diff --git a/tools/perf/util/strlist.c b/tools/perf/util/strlist.c
index 7ad3817..d1d63f7 100644
--- a/tools/perf/util/strlist.c
+++ b/tools/perf/util/strlist.c
@@ -104,8 +104,14 @@ void strlist__remove(struct strlist *self, struct str_node *sn)
bool strlist__has_entry(struct strlist *self, const char *entry)
{
- struct rb_node **p = &self->entries.rb_node;
- struct rb_node *parent = NULL;
+ struct rb_node **p;
+ struct rb_node *parent;
+
+ if (self == NULL)
+ return false;
+
+ p = &self->entries.rb_node;
+ parent = NULL;
while (*p != NULL) {
struct str_node *sn;
--
1.6.2.5
^ permalink raw reply related [flat|nested] 9+ messages in thread* Re: [PATCH 1/1 tip] perf top: Move hard coded list to /etc/perfconfig/symbols.skip
2009-07-28 0:10 [PATCH 1/1 tip] perf top: Move hard coded list to /etc/perfconfig/symbols.skip Arnaldo Carvalho de Melo
@ 2009-07-28 3:18 ` Frederic Weisbecker
2009-07-28 14:13 ` Arnaldo Carvalho de Melo
2009-07-28 3:58 ` Ray Lee
2009-07-28 7:07 ` Peter Zijlstra
2 siblings, 1 reply; 9+ messages in thread
From: Frederic Weisbecker @ 2009-07-28 3:18 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo
Cc: Ingo Molnar, Mike Galbraith, Peter Zijlstra, Paul Mackerras,
H. Peter Anvin, Linux Kernel Mailing List
On Mon, Jul 27, 2009 at 09:10:41PM -0300, Arnaldo Carvalho de Melo wrote:
> This also paves the way to add more symbol lists to be filtered out,
> spinlock anyone?
>
> Cc: Frederic Weisbecker <fweisbec@gmail.com>
> Cc: Mike Galbraith <efault@gmx.de>
> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
> Cc: Paul Mackerras <paulus@samba.org>
> Cc: H. Peter Anvin <hpa@zytor.com>
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> ---
I guess it would be nice to also provide a way for non-privileged users
to tune it.
May be /etc/perfconfig/ and also ~/perfconfig/ ?
> tools/perf/Makefile | 6 ++++--
> tools/perf/builtin-top.c | 26 +++++++-------------------
> tools/perf/util/strlist.c | 10 ++++++++--
> 3 files changed, 19 insertions(+), 23 deletions(-)
>
> diff --git a/tools/perf/Makefile b/tools/perf/Makefile
> index a5e9b87..385a1bc 100644
> --- a/tools/perf/Makefile
> +++ b/tools/perf/Makefile
> @@ -193,11 +193,10 @@ template_dir = share/perf-core/templates
> htmldir = share/doc/perf-doc
> ifeq ($(prefix),/usr)
> sysconfdir = /etc
> -ETC_PERFCONFIG = $(sysconfdir)/perfconfig
> else
> sysconfdir = $(prefix)/etc
> -ETC_PERFCONFIG = etc/perfconfig
> endif
> +ETC_PERFCONFIG = $(sysconfdir)/perfconfig
> lib = lib
> # DESTDIR=
>
> @@ -596,6 +595,7 @@ PERL_PATH_SQ = $(subst ','\'',$(PERL_PATH))
> LIBS = $(PERFLIBS) $(EXTLIBS)
>
> BASIC_CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER_SQ)' \
> + -DPERF_ETC_PATH='"$(ETC_PERFCONFIG)"' \
> $(COMPAT_CFLAGS)
> LIB_OBJS += $(COMPAT_OBJS)
>
> @@ -804,6 +804,8 @@ export perfexec_instdir
> install: all
> $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
> $(INSTALL) perf$X '$(DESTDIR_SQ)$(bindir_SQ)'
> + $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(ETC_PERFCONFIG_SQ)'
> + $(INSTALL) symbols.skip '$(DESTDIR_SQ)$(ETC_PERFCONFIG_SQ)'
> ifdef BUILT_INS
> $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
> $(INSTALL) $(BUILT_INS) '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
> diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
> index f139f1a..628ef29 100644
> --- a/tools/perf/builtin-top.c
> +++ b/tools/perf/builtin-top.c
> @@ -20,6 +20,7 @@
>
> #include "perf.h"
>
> +#include "util/strlist.h"
> #include "util/symbol.h"
> #include "util/color.h"
> #include "util/util.h"
> @@ -279,24 +280,12 @@ static void *display_thread(void *arg __used)
> }
>
> /* Tag samples to be skipped. */
> -static const char *skip_symbols[] = {
> - "default_idle",
> - "cpu_idle",
> - "enter_idle",
> - "exit_idle",
> - "mwait_idle",
> - "mwait_idle_with_hints",
> - "ppc64_runlatch_off",
> - "pseries_dedicated_idle_sleep",
> - NULL
> -};
> +static struct strlist *skip_symbols;
>
> static int symbol_filter(struct dso *self, struct symbol *sym)
> {
> static int filter_match;
> - struct sym_entry *syme;
> const char *name = sym->name;
> - int i;
>
> /*
> * ppc64 uses function descriptors and appends a '.' to the
> @@ -314,12 +303,9 @@ static int symbol_filter(struct dso *self, struct symbol *sym)
> strstr(name, "_text_end"))
> return 1;
>
> - syme = dso__sym_priv(self, sym);
> - for (i = 0; skip_symbols[i]; i++) {
> - if (!strcmp(skip_symbols[i], name)) {
> - syme->skip = 1;
> - break;
> - }
> + if (strlist__has_entry(skip_symbols, name)) {
> + struct sym_entry *syme = dso__sym_priv(self, sym);
> + syme->skip = 1;
> }
>
> if (filter_match == 1) {
> @@ -733,6 +719,8 @@ int cmd_top(int argc, const char **argv, const char *prefix __used)
> if (delay_secs < 1)
> delay_secs = 1;
>
> + skip_symbols = strlist__new(true, "file://" PERF_ETC_PATH "/symbols.skip");
> +
> parse_symbols();
>
> /*
> diff --git a/tools/perf/util/strlist.c b/tools/perf/util/strlist.c
> index 7ad3817..d1d63f7 100644
> --- a/tools/perf/util/strlist.c
> +++ b/tools/perf/util/strlist.c
> @@ -104,8 +104,14 @@ void strlist__remove(struct strlist *self, struct str_node *sn)
>
> bool strlist__has_entry(struct strlist *self, const char *entry)
> {
> - struct rb_node **p = &self->entries.rb_node;
> - struct rb_node *parent = NULL;
> + struct rb_node **p;
> + struct rb_node *parent;
> +
> + if (self == NULL)
> + return false;
> +
> + p = &self->entries.rb_node;
> + parent = NULL;
>
> while (*p != NULL) {
> struct str_node *sn;
> --
> 1.6.2.5
>
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [PATCH 1/1 tip] perf top: Move hard coded list to /etc/perfconfig/symbols.skip
2009-07-28 3:18 ` Frederic Weisbecker
@ 2009-07-28 14:13 ` Arnaldo Carvalho de Melo
0 siblings, 0 replies; 9+ messages in thread
From: Arnaldo Carvalho de Melo @ 2009-07-28 14:13 UTC (permalink / raw)
To: Frederic Weisbecker
Cc: Ingo Molnar, Mike Galbraith, Peter Zijlstra, Paul Mackerras,
H. Peter Anvin, Linux Kernel Mailing List
Em Tue, Jul 28, 2009 at 05:18:21AM +0200, Frederic Weisbecker escreveu:
> On Mon, Jul 27, 2009 at 09:10:41PM -0300, Arnaldo Carvalho de Melo wrote:
> > This also paves the way to add more symbol lists to be filtered out,
> > spinlock anyone?
> I guess it would be nice to also provide a way for non-privileged users
> to tune it.
> May be /etc/perfconfig/ and also ~/perfconfig/ ?
perf will have the same configuration system that git has, so the answer
is yes, your suggestion will be implemented soon.
- Arnaldo
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/1 tip] perf top: Move hard coded list to /etc/perfconfig/symbols.skip
2009-07-28 0:10 [PATCH 1/1 tip] perf top: Move hard coded list to /etc/perfconfig/symbols.skip Arnaldo Carvalho de Melo
2009-07-28 3:18 ` Frederic Weisbecker
@ 2009-07-28 3:58 ` Ray Lee
2009-07-28 14:17 ` Arnaldo Carvalho de Melo
2009-08-02 19:55 ` Ingo Molnar
2009-07-28 7:07 ` Peter Zijlstra
2 siblings, 2 replies; 9+ messages in thread
From: Ray Lee @ 2009-07-28 3:58 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo
Cc: Ingo Molnar, Frederic Weisbecker, Mike Galbraith, Peter Zijlstra,
Paul Mackerras, H. Peter Anvin, Linux Kernel Mailing List
On Mon, Jul 27, 2009 at 5:10 PM, Arnaldo Carvalho de
Melo<acme@redhat.com> wrote:
> This also paves the way to add more symbol lists to be filtered out,
> spinlock anyone?
Generally, the way I've found is best to handle things like this is to either:
A. Have a fall-back list to use if the file isn't found, or
B. Start with the fall-back list of symbols to filter, then add to
them via /etc/... and ~/.perf/...
I like approaching things from the 'everything works even in a
broken/hasty installation' point of view, and it's paid off for me.
Sane defaults are a wonderfully useful thing.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/1 tip] perf top: Move hard coded list to /etc/perfconfig/symbols.skip
2009-07-28 3:58 ` Ray Lee
@ 2009-07-28 14:17 ` Arnaldo Carvalho de Melo
2009-07-28 15:35 ` Ray Lee
2009-08-02 19:55 ` Ingo Molnar
1 sibling, 1 reply; 9+ messages in thread
From: Arnaldo Carvalho de Melo @ 2009-07-28 14:17 UTC (permalink / raw)
To: Ray Lee
Cc: Ingo Molnar, Frederic Weisbecker, Mike Galbraith, Peter Zijlstra,
Paul Mackerras, H. Peter Anvin, Linux Kernel Mailing List
Em Mon, Jul 27, 2009 at 08:58:08PM -0700, Ray Lee escreveu:
> On Mon, Jul 27, 2009 at 5:10 PM, Arnaldo Carvalho de
> Melo<acme@redhat.com> wrote:
> > This also paves the way to add more symbol lists to be filtered out,
> > spinlock anyone?
>
> Generally, the way I've found is best to handle things like this is to either:
>
> A. Have a fall-back list to use if the file isn't found, or
> B. Start with the fall-back list of symbols to filter, then add to
> them via /etc/... and ~/.perf/...
>
> I like approaching things from the 'everything works even in a
> broken/hasty installation' point of view, and it's paid off for me.
> Sane defaults are a wonderfully useful thing.
While in general we agree with you, in this case the only problem would
be that we would see a few functions on idle systems, i.e. not something
catastrophic.
- Arnaldo
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/1 tip] perf top: Move hard coded list to /etc/perfconfig/symbols.skip
2009-07-28 14:17 ` Arnaldo Carvalho de Melo
@ 2009-07-28 15:35 ` Ray Lee
0 siblings, 0 replies; 9+ messages in thread
From: Ray Lee @ 2009-07-28 15:35 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo
Cc: Ingo Molnar, Frederic Weisbecker, Mike Galbraith, Peter Zijlstra,
Paul Mackerras, H. Peter Anvin, Linux Kernel Mailing List
On Tue, Jul 28, 2009 at 7:17 AM, Arnaldo Carvalho de
Melo<acme@redhat.com> wrote:
>> I like approaching things from the 'everything works even in a
>> broken/hasty installation' point of view, and it's paid off for me.
>> Sane defaults are a wonderfully useful thing.
>
> While in general we agree with you, in this case the only problem would
> be that we would see a few functions on idle systems, i.e. not something
> catastrophic.
This is userspace we're talking about here. Where's the harm in
getting things right by default?
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/1 tip] perf top: Move hard coded list to /etc/perfconfig/symbols.skip
2009-07-28 3:58 ` Ray Lee
2009-07-28 14:17 ` Arnaldo Carvalho de Melo
@ 2009-08-02 19:55 ` Ingo Molnar
2009-08-02 19:59 ` Arnaldo Carvalho de Melo
1 sibling, 1 reply; 9+ messages in thread
From: Ingo Molnar @ 2009-08-02 19:55 UTC (permalink / raw)
To: Ray Lee
Cc: Arnaldo Carvalho de Melo, Frederic Weisbecker, Mike Galbraith,
Peter Zijlstra, Paul Mackerras, H. Peter Anvin,
Linux Kernel Mailing List
* Ray Lee <ray-lk@madrabbit.org> wrote:
> On Mon, Jul 27, 2009 at 5:10 PM, Arnaldo Carvalho de
> Melo<acme@redhat.com> wrote:
> > This also paves the way to add more symbol lists to be filtered out,
> > spinlock anyone?
>
> Generally, the way I've found is best to handle things like this is to either:
>
> A. Have a fall-back list to use if the file isn't found, or
> B. Start with the fall-back list of symbols to filter, then add to
> them via /etc/... and ~/.perf/...
>
> I like approaching things from the 'everything works even in a
> broken/hasty installation' point of view, and it's paid off for me.
> Sane defaults are a wonderfully useful thing.
Agreed.
Also, i'd not pollute /etc just yet, please lets define a good
default built-in list like we have now, and perhaps enable the
extension of it via .perf/config.
Tools should work well by default.
Ingo
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/1 tip] perf top: Move hard coded list to /etc/perfconfig/symbols.skip
2009-08-02 19:55 ` Ingo Molnar
@ 2009-08-02 19:59 ` Arnaldo Carvalho de Melo
0 siblings, 0 replies; 9+ messages in thread
From: Arnaldo Carvalho de Melo @ 2009-08-02 19:59 UTC (permalink / raw)
To: Ingo Molnar
Cc: Ray Lee, Frederic Weisbecker, Mike Galbraith, Peter Zijlstra,
Paul Mackerras, H. Peter Anvin, Linux Kernel Mailing List
Em Sun, Aug 02, 2009 at 09:55:33PM +0200, Ingo Molnar escreveu:
>
> * Ray Lee <ray-lk@madrabbit.org> wrote:
>
> > On Mon, Jul 27, 2009 at 5:10 PM, Arnaldo Carvalho de
> > Melo<acme@redhat.com> wrote:
> > > This also paves the way to add more symbol lists to be filtered out,
> > > spinlock anyone?
> >
> > Generally, the way I've found is best to handle things like this is to either:
> >
> > A. Have a fall-back list to use if the file isn't found, or
> > B. Start with the fall-back list of symbols to filter, then add to
> > them via /etc/... and ~/.perf/...
> >
> > I like approaching things from the 'everything works even in a
> > broken/hasty installation' point of view, and it's paid off for me.
> > Sane defaults are a wonderfully useful thing.
>
> Agreed.
>
> Also, i'd not pollute /etc just yet, please lets define a good
> default built-in list like we have now, and perhaps enable the
> extension of it via .perf/config.
>
> Tools should work well by default.
OK, I'll rework the patch and resubmit it.
- Arnaldo
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/1 tip] perf top: Move hard coded list to /etc/perfconfig/symbols.skip
2009-07-28 0:10 [PATCH 1/1 tip] perf top: Move hard coded list to /etc/perfconfig/symbols.skip Arnaldo Carvalho de Melo
2009-07-28 3:18 ` Frederic Weisbecker
2009-07-28 3:58 ` Ray Lee
@ 2009-07-28 7:07 ` Peter Zijlstra
2 siblings, 0 replies; 9+ messages in thread
From: Peter Zijlstra @ 2009-07-28 7:07 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo
Cc: Ingo Molnar, Frederic Weisbecker, Mike Galbraith, Paul Mackerras,
H. Peter Anvin, Linux Kernel Mailing List
On Mon, 2009-07-27 at 21:10 -0300, Arnaldo Carvalho de Melo wrote:
> This also paves the way to add more symbol lists to be filtered out,
> spinlock anyone?
Doesn't seem like a good idea to filter out symbols that actually affect
performance -- such as spinlocks.
But yeah, the patch makes sense and allows people to mess up their own
environments :-)
Queued this and the previous one, Thanks!
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2009-08-02 20:04 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-07-28 0:10 [PATCH 1/1 tip] perf top: Move hard coded list to /etc/perfconfig/symbols.skip Arnaldo Carvalho de Melo
2009-07-28 3:18 ` Frederic Weisbecker
2009-07-28 14:13 ` Arnaldo Carvalho de Melo
2009-07-28 3:58 ` Ray Lee
2009-07-28 14:17 ` Arnaldo Carvalho de Melo
2009-07-28 15:35 ` Ray Lee
2009-08-02 19:55 ` Ingo Molnar
2009-08-02 19:59 ` Arnaldo Carvalho de Melo
2009-07-28 7:07 ` Peter Zijlstra
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox