From: Frederic Weisbecker <fweisbec@gmail.com>
To: Jiri Olsa <jolsa@redhat.com>
Cc: acme@redhat.com, a.p.zijlstra@chello.nl, mingo@elte.hu,
paulus@samba.org, cjashfor@linux.vnet.ibm.com,
eranian@google.com, gorcunov@openvz.org, tzanussi@gmail.com,
mhiramat@redhat.com, robert.richter@amd.com, fche@redhat.com,
linux-kernel@vger.kernel.org, masami.hiramatsu.pt@hitachi.com,
drepper@gmail.com, asharma@fb.com,
benjamin.redelings@nescent.org, Borislav Petkov <bp@alien8.de>,
"H. Peter Anvin" <hpa@zytor.com>,
Roland McGrath <roland@hack.frob.com>
Subject: Re: [RFC 09/23] x86_64: Store userspace rsp in system_call fastpath
Date: Fri, 29 Jun 2012 13:37:59 +0200 [thread overview]
Message-ID: <20120629113756.GC2110@somewhere.redhat.com> (raw)
In-Reply-To: <20120629080327.GE940@krava.brq.redhat.com>
On Fri, Jun 29, 2012 at 10:03:27AM +0200, Jiri Olsa wrote:
> On Thu, Jun 28, 2012 at 02:08:49PM +0200, Frederic Weisbecker wrote:
> > On Tue, Jun 19, 2012 at 05:48:00PM +0200, Jiri Olsa wrote:
> > > hi,
> > > I'd need help with this change.. basically it works, but I guess
> > > I could alter the FIXUP_TOP_OF_STACK macro as well, so the rsp is
> > > not initialized twice in slowpath.
> > >
> > > But it seems quite complex.. so not really sure at the moment ;)
> > >
> > > ideas?
> > >
> > > thanks,
> > > jirka
> > >
> > > ---
> > > Storing the userspace rsp into the pt_regs struct for the
> > > system_call fastpath (syscall instruction handler).
> > >
> > > Following part of the pt_regs is allocated on stack:
> > > (via KERNEL_STACK_OFFSET)
> > >
> > > unsigned long ip;
> > > unsigned long cs;
> > > unsigned long flags;
> > > unsigned long sp;
> > > unsigned long ss;
> > >
> > > but only ip is actually saved for fastpath.
> > >
> > > For perf post unwind we need at least ip and sp to be able to
> > > start the unwind, so storing the old_rsp value to the sp.
> > >
> > > Signed-off-by: Jiri Olsa <jolsa@redhat.com>
> > > Cc: Borislav Petkov <bp@alien8.de>
> > > Cc: H. Peter Anvin <hpa@zytor.com>
> > > Cc: Roland McGrath <roland@hack.frob.com>
> > > ---
> > > arch/x86/kernel/entry_64.S | 5 +++++
> > > 1 files changed, 5 insertions(+), 0 deletions(-)
> > >
> > > diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
> > > index 111f6bb..0444917 100644
> > > --- a/arch/x86/kernel/entry_64.S
> > > +++ b/arch/x86/kernel/entry_64.S
> > > @@ -516,6 +516,11 @@ GLOBAL(system_call_after_swapgs)
> > > SAVE_ARGS 8,0
> > > movq %rax,ORIG_RAX-ARGOFFSET(%rsp)
> > > movq %rcx,RIP-ARGOFFSET(%rsp)
> > > +#ifdef CONFIG_PERF_EVENTS
> > > + /* We need rsp in fast path for perf post unwind. */
> > > + movq PER_CPU_VAR(old_rsp), %rcx
> > > + movq %rcx,RSP-ARGOFFSET(%rsp)
> > > +#endif
> >
> > Another solution is to set/unset some TIF flag in perf_event_sched_in/out
> > such that we take the syscall slow path (tracesys) which records every non-scratch
> > registers. I can see that old_rsp is not saved in pt_regs by SAVE_REST so this may be
> > something to add in tracesys.
> >
> > This way we don't bloat the syscall fastpath with a feature only used by some
> > developers.
>
> ok, this could work for task related events
>
> but will need to think about how to do this for cpu related events which
> hit the same issue and we dont have a task to flag.. maybe do it the same
> way as for TIF_SYSCALL_TRACEPOINT and flag everyone ;)
You can also hook into tasks sched_in/out on cpu wide events.
Just add something like:
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 5b06cbb..be8f18a 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -5987,7 +5987,8 @@ done:
}
if (!event->parent) {
- if (event->attach_state & PERF_ATTACH_TASK)
+ if (event->attach_state & PERF_ATTACH_TASK ||
+ event->attr.sample_type & PERF_SAMPLE_USER_REGS)
static_key_slow_inc(&perf_sched_events.key);
if (event->attr.mmap || event->attr.mmap_data)
atomic_inc(&nr_mmap_events);
next prev parent reply other threads:[~2012-06-29 11:38 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-19 15:47 [RFCv5 00/23] perf: Add backtrace post dwarf unwind Jiri Olsa
2012-06-19 15:47 ` [PATCH 01/23] tracing/filter: Add missing initialization Jiri Olsa
2012-08-21 15:17 ` [tip:perf/core] " tip-bot for Jiri Olsa
2012-06-19 15:47 ` [PATCH 02/23] perf: Unified API to record selective sets of arch registers Jiri Olsa
2012-06-20 16:42 ` Frederic Weisbecker
2012-06-20 17:39 ` Jiri Olsa
2012-06-27 14:58 ` Frederic Weisbecker
2012-06-29 7:36 ` Jiri Olsa
2012-06-19 15:47 ` [PATCH 03/23] perf: Add ability to attach user level registers dump to sample Jiri Olsa
2012-06-27 15:11 ` Frederic Weisbecker
2012-06-27 15:13 ` Stephane Eranian
2012-06-27 15:24 ` Frederic Weisbecker
2012-06-27 15:25 ` Peter Zijlstra
2012-06-27 15:30 ` Frederic Weisbecker
2012-06-29 7:50 ` Jiri Olsa
2012-06-29 11:23 ` Frederic Weisbecker
2012-06-29 11:30 ` Jiri Olsa
2012-06-29 11:39 ` Frederic Weisbecker
2012-06-19 15:47 ` [PATCH 04/23] perf, x86: Add copy_from_user_nmi_nochk for best effort copy Jiri Olsa
2012-06-27 15:19 ` Frederic Weisbecker
2012-06-29 7:38 ` Jiri Olsa
2012-06-19 15:47 ` [PATCH 05/23] perf: Factor __output_copy to be usable with specific copy function Jiri Olsa
2012-06-19 15:47 ` [PATCH 06/23] perf: Add perf_output_skip function to skip bytes in sample Jiri Olsa
2012-06-27 15:32 ` Frederic Weisbecker
2012-06-19 15:47 ` [PATCH 07/23] perf: Add ability to attach user stack dump to sample Jiri Olsa
2012-06-19 15:47 ` [PATCH 08/23] perf: Add attribute to filter out callchains Jiri Olsa
2012-06-19 15:48 ` [RFC 09/23] x86_64: Store userspace rsp in system_call fastpath Jiri Olsa
2012-06-28 12:08 ` Frederic Weisbecker
2012-06-29 8:03 ` Jiri Olsa
2012-06-29 11:37 ` Frederic Weisbecker [this message]
2012-06-19 15:48 ` [PATCH 10/23] perf, tool: Adding PERF_ATTR_SIZE_VER2 to the header swap check Jiri Olsa
2012-06-19 15:48 ` [PATCH 11/23] perf, tool: Remove unsused evsel parameter from machine__resolve_callchain Jiri Olsa
2012-06-19 15:48 ` [PATCH 12/23] perf, tool: Factor DSO symtab types to generic binary types Jiri Olsa
2012-06-19 15:48 ` [PATCH 13/23] perf, tool: Add interface to read DSO image data Jiri Olsa
2012-06-19 15:48 ` [PATCH 14/23] perf, tool: Add '.note' check into search for NOTE section Jiri Olsa
2012-07-06 10:59 ` [tip:perf/core] perf symbols: " tip-bot for Jiri Olsa
2012-06-19 15:48 ` [PATCH 15/23] perf, tool: Back [vdso] DSO with real data Jiri Olsa
2012-06-19 15:48 ` [PATCH 16/23] perf, tool: Add interface to arch registers sets Jiri Olsa
2012-06-19 15:48 ` [PATCH 17/23] perf, tool: Add libunwind dependency for dwarf cfi unwinding Jiri Olsa
2012-06-19 15:48 ` [PATCH 18/23] perf, tool: Support user regs and stack in sample parsing Jiri Olsa
2012-06-19 15:48 ` [PATCH 19/23] perf, tool: Support for dwarf cfi unwinding on post processing Jiri Olsa
2012-06-19 15:48 ` [PATCH 20/23] perf, tool: Adding round_up/round_down macros Jiri Olsa
2012-07-06 11:00 ` [tip:perf/core] perf tools: " tip-bot for Jiri Olsa
2012-06-19 15:48 ` [PATCH 21/23] perf, tool: Support for dwarf mode callchain on perf record Jiri Olsa
2012-06-19 15:48 ` [PATCH 22/23] perf, tool: Add dso data caching Jiri Olsa
2012-06-19 15:48 ` [PATCH 23/23] perf, tool: Add dso data caching tests Jiri Olsa
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120629113756.GC2110@somewhere.redhat.com \
--to=fweisbec@gmail.com \
--cc=a.p.zijlstra@chello.nl \
--cc=acme@redhat.com \
--cc=asharma@fb.com \
--cc=benjamin.redelings@nescent.org \
--cc=bp@alien8.de \
--cc=cjashfor@linux.vnet.ibm.com \
--cc=drepper@gmail.com \
--cc=eranian@google.com \
--cc=fche@redhat.com \
--cc=gorcunov@openvz.org \
--cc=hpa@zytor.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=masami.hiramatsu.pt@hitachi.com \
--cc=mhiramat@redhat.com \
--cc=mingo@elte.hu \
--cc=paulus@samba.org \
--cc=robert.richter@amd.com \
--cc=roland@hack.frob.com \
--cc=tzanussi@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.