[<prev] [next>] [day] [month] [year] [list]
Message-ID: <tip-a4234bfcf4d72a10a99176cdef007345e9c3b4aa@git.kernel.org>
Date: Mon, 23 Nov 2009 11:53:42 GMT
From: tip-bot for Ingo Molnar <mingo@...e.hu>
To: linux-tip-commits@...r.kernel.org
Cc: linux-kernel@...r.kernel.org, acme@...hat.com, paulus@...ba.org,
hpa@...or.com, mingo@...hat.com, a.p.zijlstra@...llo.nl,
efault@....de, fweisbec@...il.com, tglx@...utronix.de,
mingo@...e.hu
Subject: [tip:perf/core] perf_events: Optimize the swcounter hotpath
Commit-ID: a4234bfcf4d72a10a99176cdef007345e9c3b4aa
Gitweb: http://git.kernel.org/tip/a4234bfcf4d72a10a99176cdef007345e9c3b4aa
Author: Ingo Molnar <mingo@...e.hu>
AuthorDate: Mon, 23 Nov 2009 10:57:59 +0100
Committer: Ingo Molnar <mingo@...e.hu>
CommitDate: Mon, 23 Nov 2009 11:48:27 +0100
perf_events: Optimize the swcounter hotpath
The structure init creates a bit memcpy, which shows
up big time in perf annotate output:
: ffffffff810a859d <__perf_sw_event>:
1.68 : ffffffff810a859d: 55 push %rbp
1.69 : ffffffff810a859e: 41 89 fa mov %edi,%r10d
0.01 : ffffffff810a85a1: 49 89 c9 mov %rcx,%r9
0.00 : ffffffff810a85a4: 31 c0 xor %eax,%eax
1.71 : ffffffff810a85a6: b9 16 00 00 00 mov $0x16,%ecx
0.00 : ffffffff810a85ab: 48 89 e5 mov %rsp,%rbp
0.00 : ffffffff810a85ae: 48 83 ec 60 sub $0x60,%rsp
1.52 : ffffffff810a85b2: 48 8d 7d a0 lea -0x60(%rbp),%rdi
85.20 : ffffffff810a85b6: f3 ab rep stos %eax,%es:(%rdi)
None of the callees depends on the structure being pre-initialized,
so only initialize ->addr. This gets rid of the memcpy overhead.
Cc: Peter Zijlstra <a.p.zijlstra@...llo.nl>
Cc: Mike Galbraith <efault@....de>
Cc: Paul Mackerras <paulus@...ba.org>
Cc: Arnaldo Carvalho de Melo <acme@...hat.com>
Cc: Frederic Weisbecker <fweisbec@...il.com>
LKML-Reference: <new-submission>
Signed-off-by: Ingo Molnar <mingo@...e.hu>
---
kernel/perf_event.c | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/kernel/perf_event.c b/kernel/perf_event.c
index abe1ef4..20df8ab 100644
--- a/kernel/perf_event.c
+++ b/kernel/perf_event.c
@@ -3954,12 +3954,12 @@ out:
void __perf_sw_event(u32 event_id, u64 nr, int nmi,
struct pt_regs *regs, u64 addr)
{
- struct perf_sample_data data = {
- .addr = addr,
- };
+ struct perf_sample_data data;
- do_perf_sw_event(PERF_TYPE_SOFTWARE, event_id, nr, nmi,
- &data, regs);
+ data.addr = addr;
+ data.raw = NULL;
+
+ do_perf_sw_event(PERF_TYPE_SOFTWARE, event_id, nr, nmi, &data, regs);
}
static void perf_swevent_read(struct perf_event *event)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists