linux-btrace.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [BTT PATCH] More malloc reduction - remove excessive bilink allocations...
@ 2007-04-10 12:53 Alan D. Brunelle
  0 siblings, 0 replies; only message in thread
From: Alan D. Brunelle @ 2007-04-10 12:53 UTC (permalink / raw)
  To: linux-btrace

[-- Attachment #1: Type: text/plain, Size: 1 bytes --]



[-- Attachment #2: fix-bilink-allocs --]
[-- Type: text/plain, Size: 3107 bytes --]

From: Alan D. Brunelle <Alan.Brunelle@hp.com>

Reduce amount of allocations done for bilinks.

Used to do 1-for-1 allocations of bilinks for traces processed, we now
have reduced this to the largest tree size left (thousands instead of
millions of allocs for a moderately sized file).

This data set used to result in :

malloc/free: 11,241,958 allocs, 11,241,958 frees, 440,381,362 bytes allocated.

It is now:

malloc/free: 41,076 allocs, 41,076 frees, 9,272,450 bytes allocated.

Signed-off-by: Alan D. Brunelle <Alan.Brunelle@hp.com>
---

 btt/bt_timeline.c |    2 ++
 btt/globals.h     |    3 ++-
 btt/inlines.h     |   25 ++++++++++++++++++++++---
 3 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/btt/bt_timeline.c b/btt/bt_timeline.c
index 32c900e..d998e99 100644
--- a/btt/bt_timeline.c
+++ b/btt/bt_timeline.c
@@ -39,6 +39,7 @@ time_t genesis, last_vtrace;
 LIST_HEAD(all_devs);
 LIST_HEAD(all_procs);
 LIST_HEAD(free_ios);
+LIST_HEAD(free_bilinks);
 LIST_HEAD(rmhd);
 LIST_HEAD(retries);
 __u64 q_histo[N_HIST_BKTS], d_histo[N_HIST_BKTS];
@@ -89,6 +90,7 @@ int main(int argc, char *argv[])
 	dip_exit();
 	pip_exit();
 	io_free_all();
+	bilink_free_all();
 	region_exit(&all_regions);
 
 	free(input_name);
diff --git a/btt/globals.h b/btt/globals.h
index 1b54cb0..912bb7c 100644
--- a/btt/globals.h
+++ b/btt/globals.h
@@ -190,6 +190,7 @@ struct bilink {
 	struct list_head down_head, up_head;
 	struct io *diop, *uiop;
 };
+#define bilink_free_head	down_head
 
 /* bt_timeline.c */
 
@@ -205,7 +206,7 @@ extern struct list_head all_devs, all_procs, retries, rmhd;
 extern struct avgs_info all_avgs;
 extern __u64 last_q, next_retry_check;
 extern struct region_info all_regions;
-extern struct list_head free_ios;
+extern struct list_head free_ios, free_bilinks;
 extern __u64 iostat_interval, iostat_last_stamp;
 extern time_t genesis, last_vtrace;
 extern double t_astart, t_aend;
diff --git a/btt/inlines.h b/btt/inlines.h
index edb2182..25e5b21 100644
--- a/btt/inlines.h
+++ b/btt/inlines.h
@@ -127,7 +127,7 @@ static inline struct io *io_alloc(void)
 	struct io *iop;
 
 	if (!list_empty(&free_ios)) {
-		iop = list_entry(free_ios.next, struct io, f_head);
+		iop = list_entry(free_ios.prev, struct io, f_head);
 		LIST_DEL(&iop->f_head);
 
 #		if defined(COUNT_IOS)
@@ -406,12 +406,31 @@ static inline int type2c(enum iop_type type)
 
 static inline void bilink_free(struct bilink *blp)
 {
-	free(blp);
+	list_add_tail(&blp->bilink_free_head, &free_bilinks);
+}
+
+static inline void bilink_free_all(void)
+{
+	struct bilink *blp;
+	struct list_head *p, *q;
+
+	list_for_each_safe(p, q, &free_bilinks) {
+		blp = list_entry(p, struct bilink, bilink_free_head);
+		free(blp);
+	}
 }
 
 static inline struct bilink *bilink_alloc(struct io *diop, struct io *uiop)
 {
-	struct bilink *blp = malloc(sizeof(*blp));
+	struct bilink *blp;
+
+	if (!list_empty(&free_bilinks)) {
+		blp = list_entry(free_bilinks.prev, struct bilink, 
+							bilink_free_head);
+		LIST_DEL(&blp->bilink_free_head);
+	}
+	else
+		blp = malloc(sizeof(*blp));
 
 	blp->diop = diop;
 	blp->uiop = uiop;

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2007-04-10 12:53 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-04-10 12:53 [BTT PATCH] More malloc reduction - remove excessive bilink allocations Alan D. Brunelle

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).