[PATCH 2/3] perf top: Allocate space only for the number of counters used

From: Arnaldo Carvalho de Melo
Date: Tue Nov 17 2009 - 15:38:44 EST


From: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>

Reducing memory consumption on a typical desktop machine:

From:

32710 root 20 0 172m 142m 1056 S 0.0 4.7 0:00.37 perf

To:

420 root 20 0 47528 16m 1056 R 0.3 0.5 0:00.24 perf

Cc: FrÃdÃric Weisbecker <fweisbec@xxxxxxxxx>
Cc: Mike Galbraith <efault@xxxxxx>
Cc: Peter Zijlstra <a.p.zijlstra@xxxxxxxxx>
Cc: Paul Mackerras <paulus@xxxxxxxxx>
Signed-off-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
---
tools/perf/builtin-top.c | 9 +++++----
1 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
index 0d60c51..49cf876 100644
--- a/tools/perf/builtin-top.c
+++ b/tools/perf/builtin-top.c
@@ -111,7 +111,6 @@ static int display_weighted = -1;
struct sym_entry {
struct rb_node rb_node;
struct list_head node;
- unsigned long count[MAX_COUNTERS];
unsigned long snap_count;
double weight;
int skip;
@@ -122,6 +121,7 @@ struct sym_entry {
struct source_line *lines;
struct source_line **lines_tail;
pthread_mutex_t source_lock;
+ unsigned long count[0];
};

/*
@@ -130,7 +130,7 @@ struct sym_entry {

static inline struct symbol *sym_entry__symbol(struct sym_entry *self)
{
- return (struct symbol *)(self + 1);
+ return ((void *)self) + symbol__priv_size;
}

static void get_term_dimensions(struct winsize *ws)
@@ -1314,8 +1314,6 @@ int cmd_top(int argc, const char **argv, const char *prefix __used)
{
int counter;

- symbol__init(sizeof(struct sym_entry));
-
page_size = sysconf(_SC_PAGE_SIZE);

argc = parse_options(argc, argv, options, top_usage, 0);
@@ -1332,6 +1330,9 @@ int cmd_top(int argc, const char **argv, const char *prefix __used)
if (!nr_counters)
nr_counters = 1;

+ symbol__init(sizeof(struct sym_entry) +
+ (nr_counters + 1) * sizeof(unsigned long));
+
if (delay_secs < 1)
delay_secs = 1;

--
1.6.2.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/