[tip:perf/core] perf session: Fix list sort algorithm

Previous thread: [PATCH] Show file_caps_enabled in /sys/kernel/fscaps by Ludwig Nussel on Wednesday, December 1, 2010 - 1:56 am. (1 message)

Next thread: [tip:perf/core] perf session: Use appropriate pointer type instead of silly typecasting by tip-bot for Thomas Gleixner on Wednesday, December 1, 2010 - 2:10 am. (1 message)
From: tip-bot for Thomas Gleixner
Date: Wednesday, December 1, 2010 - 2:10 am

Commit-ID:  a1225decc43849a73f7e4c333c3fdbbb8a9c1e65
Gitweb:     http://git.kernel.org/tip/a1225decc43849a73f7e4c333c3fdbbb8a9c1e65
Author:     Thomas Gleixner <tglx@linutronix.de>
AuthorDate: Tue, 30 Nov 2010 17:49:33 +0000
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 30 Nov 2010 19:52:36 -0200

perf session: Fix list sort algorithm

The homebrewn sort algorithm fails to sort in time order. One of the problem
spots is that it fails to deal with equal timestamps correctly.

My first gut reaction was to replace the fancy list with an rbtree, but the
performance is 3 times worse.

Rewrite it so it works.

Cc: Ingo Molnar <mingo@elte.hu>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
LKML-Reference: <20101130163819.908482530@linutronix.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/session.c |  113 +++++++++++++++++++--------------------------
 tools/perf/util/session.h |    4 +-
 2 files changed, 49 insertions(+), 68 deletions(-)

diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index 3ae6955..daca557 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -104,7 +104,7 @@ struct perf_session *perf_session__new(const char *filename, int mode, bool forc
 	self->mmap_window = 32;
 	self->machines = RB_ROOT;
 	self->repipe = repipe;
-	INIT_LIST_HEAD(&self->ordered_samples.samples_head);
+	INIT_LIST_HEAD(&self->ordered_samples.samples);
 	machine__init(&self->host_machine, "", HOST_KERNEL_ID);
 
 	if (mode == O_RDONLY) {
@@ -393,27 +393,33 @@ struct sample_queue {
 static void flush_sample_queue(struct perf_session *s,
 			       struct perf_event_ops *ops)
 {
-	struct list_head *head = &s->ordered_samples.samples_head;
-	u64 limit = s->ordered_samples.next_flush;
+	struct ordered_samples *os = &s->ordered_samples;
+	struct list_head *head = &os->samples;
 	struct sample_queue ...
Previous thread: [PATCH] Show file_caps_enabled in /sys/kernel/fscaps by Ludwig Nussel on Wednesday, December 1, 2010 - 1:56 am. (1 message)

Next thread: [tip:perf/core] perf session: Use appropriate pointer type instead of silly typecasting by tip-bot for Thomas Gleixner on Wednesday, December 1, 2010 - 2:10 am. (1 message)