From: "K.Prasad" <prasad@linux.vnet.ibm.com>
To: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Frederic Weisbecker <fweisbec@gmail.com>,
Ingo Molnar <mingo@elte.hu>, LKML <linux-kernel@vger.kernel.org>,
Steven Rostedt <rostedt@goodmis.org>,
Thomas Gleixner <tglx@linutronix.de>,
Mike Galbraith <efault@gmx.de>, Paul Mackerras <paulus@samba.org>,
Arnaldo Carvalho de Melo <acme@redhat.com>,
Lai Jiangshan <laijs@cn.fujitsu.com>,
Anton Blanchard <anton@samba.org>, Li Zefan <lizf@cn.fujitsu.com>,
Zhaolei <zhaolei@cn.fujitsu.com>,
KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>,
Alan Stern <stern@rowland.harvard.edu>
Subject: Re: [RFC][PATCH 5/5] perfcounter: Add support for kernel hardware breakpoints
Date: Sun, 26 Jul 2009 05:27:02 +0530 [thread overview]
Message-ID: <20090725235702.GA5082@in.ibm.com> (raw)
In-Reply-To: <1248538972.5780.25.camel@laptop>
On Sat, Jul 25, 2009 at 06:22:52PM +0200, Peter Zijlstra wrote:
> On Sat, 2009-07-25 at 16:19 +0200, Frederic Weisbecker wrote:
>
> > > Ah, but that is sub-optimal, perf counters doesn't actually change the
> > > state if both tasks have the same counter configuration. Yielding a
> > > great performance benefit on scheduling intensive workloads. Poking at
> > > these MSRs, esp. writing to them is very expensive.
> >
> >
> > Ah ok.
> >
> >
> > > So I would suggest not using that feature of the breakpoint API for the
> > > perf counter integration.
> >
> >
> > That would forbid some kinds of profiling (explanations below).
> >
> >
> > > > However, this patchset only deals with kernel breakpoint for now (wide
> > > > tracing).
> > >
> > > Right, and that's all you would need for perf counter support, please
> > > don't use whatever task state handling you have in place.
> >
> >
> > I would actually propose to have a separate layer that manages
> > the hardware registers <-> per thread virtual registers handling
> > for things like breakpoint api and perfcounter.
> >
> > I know a simple RR of registers is not that hard to write, but at
> > least that can allow simultaneous use of perfcounter and other users
> > of breakpoint API without having two different versions of register
> > management.
>
> I simply cannot see how you would be able to multiplex userspace/debug
> breakpoints. I'd utterly hate it if I'd missed a breakpoint simply
> because someone else also wanted to make use of it.
>
> I'd declare the system broken and useless.
>
> Counters OTOH can be multiplexed because of their statistical nature,
> you can simply scale them back up based on their time share.
>
> Therefore you'll have to deal with hard reservations anyway.
>
I don't claim to have understood the requirements of perf-counters
fully, but I sense the persistence of a few doubts about the register
allocation mechanism of the hw-breakpoints API...thought it might be
worthwhile to briefly explain.
A few notes about the same:
Kernel-space breakpoints: They are system-wide i.e. one kernel-space
breakpoint request consumes one debug register on 'all' CPUs of the
system.
User-space breakpoints: Requests are stored in per-thread data
structures. Written onto the debug register only when scheduled-into
the CPU, and are removed when another task using the debug registers is
scheduled onto the CPU.
Debug register allocation mechanism: register request succeeds only when
the availability of a debug register is guaranteed (for both user and
kernel space). Allocation on a first-come-first-serve basis, no
priorities for register requests and hence no pre-emption of requests.
In short the available debug registers are divided into:
# of debug registers = # of kernel-space requests + MAX(# of all
user-space requests) + freely available debug registers.
Thus on an x86 system with 4 debug registers, if there exists 1
kernel-space request it consumes one debug register on all CPUs in the
system. The remaining 3 debug registers can be consumed by user-space
i.e. upto 3 user-space requests per-thread.
There is no restriction on how many debug registers can be consumed by
the kernel- or user-space requests and it is entirely dependent on the
number of free registers available for use then.
Thanks,
K.Prasad
next prev parent reply other threads:[~2009-07-25 23:57 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-20 17:08 [RFC][PATCH 0/5] hw-breakpoints: Make the API generic + support for perfcounters Frederic Weisbecker
2009-07-20 17:08 ` [RFC][PATCH 1/5] hw-breakpoints: Make kernel breakpoints API truly generic Frederic Weisbecker
2009-07-20 17:27 ` Mathieu Desnoyers
2009-07-25 2:37 ` Frederic Weisbecker
2009-07-25 15:38 ` Mathieu Desnoyers
2009-07-28 1:35 ` Frederic Weisbecker
2009-07-21 11:15 ` K.Prasad
2009-07-25 2:56 ` Frederic Weisbecker
2009-07-20 17:08 ` [RFC][PATCH 2/5] hw-breakpoints: Pull up the target symbol in a generic field Frederic Weisbecker
2009-07-20 17:08 ` [RFC][PATCH 3/5] hw-breakpoints: Make user breakpoints API truly generic Frederic Weisbecker
2009-07-20 17:08 ` [RFC][PATCH 4/5] perfcounter: Grow the event number to 64 bits Frederic Weisbecker
2009-07-20 17:08 ` [RFC][PATCH 5/5] perfcounter: Add support for kernel hardware breakpoints Frederic Weisbecker
2009-07-20 17:38 ` Peter Zijlstra
2009-07-21 7:11 ` Frédéric Weisbecker
2009-07-20 17:38 ` Peter Zijlstra
2009-07-21 7:19 ` Frédéric Weisbecker
2009-07-20 17:38 ` Peter Zijlstra
2009-07-20 21:22 ` Frédéric Weisbecker
2009-07-24 20:20 ` Masami Hiramatsu
2009-07-23 13:08 ` Peter Zijlstra
2009-07-23 17:45 ` Peter Zijlstra
2009-07-23 19:56 ` Alan Stern
2009-07-24 14:02 ` Frédéric Weisbecker
2009-07-24 14:26 ` Peter Zijlstra
2009-07-24 17:47 ` Frederic Weisbecker
2009-07-25 10:56 ` Peter Zijlstra
2009-07-25 14:19 ` Frederic Weisbecker
2009-07-25 15:51 ` Mathieu Desnoyers
2009-07-25 16:27 ` Peter Zijlstra
2009-07-25 16:22 ` Peter Zijlstra
2009-07-25 23:57 ` K.Prasad [this message]
2009-07-27 8:53 ` Peter Zijlstra
2009-07-28 1:03 ` Frederic Weisbecker
2009-07-28 7:24 ` Peter Zijlstra
2009-07-28 14:04 ` Mathieu Desnoyers
2009-07-28 14:42 ` Peter Zijlstra
2009-07-29 0:36 ` Frederic Weisbecker
2009-07-29 8:28 ` Peter Zijlstra
2009-07-29 14:03 ` Frederic Weisbecker
2009-07-28 16:12 ` K.Prasad
2009-07-28 16:41 ` Peter Zijlstra
2009-07-29 6:37 ` K.Prasad
2009-07-29 9:22 ` Peter Zijlstra
2009-07-29 14:57 ` Arnaldo Carvalho de Melo
2009-07-28 0:18 ` Frederic Weisbecker
2009-07-28 7:26 ` Peter Zijlstra
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=20090725235702.GA5082@in.ibm.com \
--to=prasad@linux.vnet.ibm.com \
--cc=a.p.zijlstra@chello.nl \
--cc=acme@redhat.com \
--cc=anton@samba.org \
--cc=efault@gmx.de \
--cc=fweisbec@gmail.com \
--cc=kosaki.motohiro@jp.fujitsu.com \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lizf@cn.fujitsu.com \
--cc=mathieu.desnoyers@polymtl.ca \
--cc=mingo@elte.hu \
--cc=paulus@samba.org \
--cc=rostedt@goodmis.org \
--cc=stern@rowland.harvard.edu \
--cc=tglx@linutronix.de \
--cc=zhaolei@cn.fujitsu.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.