From: Ingo Molnar <mingo@elte.hu>
To: Christoph Hellwig <hch@infradead.org>
Cc: eranian@gmail.com, LKML <linux-kernel@vger.kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Thomas Gleixner <tglx@linutronix.de>,
Robert Richter <robert.richter@amd.com>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Paul Mackerras <paulus@samba.org>,
Andi Kleen <andi@firstfloor.org>,
Maynard Johnson <mpjohn@us.ibm.com>, Carl Love <cel@us.ibm.com>,
Corey J Ashford <cjashfor@us.ibm.com>,
Philip Mucci <mucci@eecs.utk.edu>,
Dan Terpstra <terpstra@eecs.utk.edu>,
perfmon2-devel <perfmon2-devel@lists.sourceforge.net>
Subject: Re: I.1 - System calls - ioctl
Date: Mon, 22 Jun 2009 15:56:11 +0200 [thread overview]
Message-ID: <20090622135611.GA5329@elte.hu> (raw)
In-Reply-To: <20090622125837.GA9429@infradead.org>
* Christoph Hellwig <hch@infradead.org> wrote:
> On Mon, Jun 22, 2009 at 01:49:31PM +0200, Ingo Molnar wrote:
> > > How do you justify your usage of ioctl() in this context?
> >
> > We can certainly do a separate sys_perf_counter_ctrl() syscall -
> > and we will do that if people think the extra syscall slot is
> > worth it in this case.
> >
> > The (mild) counter-argument so far was that the current ioctls
> > are very simple over "IO" attributes of counters:
> >
> > - enable
> > - disable
> > - reset
> > - refresh
> > - set-period
> >
> > So they could be considered 'IO controls' in the classic sense
> > and act as a (mild) exception to the 'dont use ioctls' rule.
> >
> > They are not some weird tacked-on syscall functionality - they
> > modify the IO properties of counters: on/off, value and rate. If
> > they go beyond that we'll put it all into a separate syscall and
> > deprecate the ioctl (which will have a relatively short
> > half-time due to the tools being hosted in the kernel repo).
> >
> > This could happen right now in fact, if people think it's worth it.
>
> Yet another multiplexer doesn't buy as anything over ioctls unless
> it adds more structure.
> PERF_COUNTER_IOC_ENABLE/PERF_COUNTER_IOC_DISABLE/
> PERF_COUNTER_IOC_RESET are calls without any argument, so it's
> kinda impossible to add more structure. perf_counter_refresh has
> an integer argument, and perf_counter_period aswell (with a
> slightly more complicated calling convention due to passing a
> pointer to the 64bit integer). I don't see how moving this to
> syscalls would improve things.
Yes - this is what kept us from moving it until now. But we are
ready and willing to add a sys_perf_counter_chattr() syscall to
change attributes. We are in the 'avoid ioctls' camp, but we are
not dogmatic about that. As you seem to agree this seems to be one
of the narrow special cases where ioctls still make sense.
There _is_ another, more theoretical argument in favor of
sys_perf_counter_chattr(): it is quite conceivable that as usage of
perfcounters expands we want to change more and more attributes. So
even though right now the ioctl just about manages to serve this
role, it would be more future-proof to use sys_perf_counter_chattr()
and deprecate the ioctl() straight away - to not even leave a
_chance_ for some ioctl crap to seep into the API.
So ... we are on two minds about this, and if people dont mind a
second syscall entry, we are glad to add it.
> But talking about syscalls the sys_perf_counter_open prototype is
> really ugly - it uses either the pid or cpu argument which is a
> pretty clear indicator it should actually be two sys calls.
>
> Incomplete patch without touching the actuall wire-up below to
> demonstrate it:
Dunno, not sure i agree here. 'CPU ID' is a pretty natural expansion
of the usage of 'scope of counter'. The scope can be:
- task-self
- specific PID
- specific PID with inheritance
- specific CPU
It is not really 'multiplexing' completely unrelated things: a CPU
is 'all PIDs running on a specific CPU' specifier. It is providing
an expanded definition of 'target context to be monitored'. Just
like signals have PID, group-PID and controlling-terminal type of
extensions. We dont really have syscalls for each of those either.
Also note that the syscall does not have different meanings
depending on whether it's a CPU counter or a specific-task counter
or a task-and-all-child-tasks counter. So it is not the ugly kind of
multiplexing that makes most ioctls such a jumbled mess.
If we were to unroll and expand _all_ such things in our current
300+ syscalls in the kernel we'd have thousands of syscalls. Do we
want that? Dunno. No strong feelings - but i dont think our current
syscalls are unclean, and i dont think we should insist on a model
that would have resulted in so many syscalls, were this enforced
from the get go.
Furthermore, having a 'target ID' concept does make it harder to
expand the range of targets that we might want to monitor. Do we
want to expand the PID one with a PID-group notion perhaps? Or do we
want to add IDs for specific VMs perhaps? It does not change the
semantics, it only changes the (pretty orthogonal and isolated)
'target context' field's meaning.
Hope this helps,
Ingo
next prev parent reply other threads:[~2009-06-22 13:56 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-16 17:42 v2 of comments on Performance Counters for Linux (PCL) stephane eranian
2009-06-22 11:48 ` Ingo Molnar
2009-06-22 11:49 ` I.1 - System calls - ioctl Ingo Molnar
2009-06-22 12:58 ` Christoph Hellwig
2009-06-22 13:56 ` Ingo Molnar [this message]
2009-06-22 17:41 ` Arnd Bergmann
2009-07-13 10:53 ` Peter Zijlstra
2009-07-13 17:30 ` [perfmon2] " Arnd Bergmann
2009-07-13 17:34 ` Peter Zijlstra
2009-07-13 17:53 ` Arnd Bergmann
2009-07-14 13:51 ` Christoph Hellwig
2009-07-30 13:58 ` stephane eranian
2009-07-30 14:13 ` Peter Zijlstra
2009-07-30 16:17 ` stephane eranian
2009-07-30 16:40 ` Arnd Bergmann
2009-07-30 16:53 ` stephane eranian
2009-07-30 17:20 ` Arnd Bergmann
2009-08-03 14:22 ` Peter Zijlstra
2009-06-22 11:50 ` I.2 - Grouping Ingo Molnar
2009-06-22 19:45 ` stephane eranian
2009-06-22 22:04 ` Corey Ashford
2009-06-23 17:51 ` stephane eranian
2009-06-22 21:38 ` Corey Ashford
2009-06-23 5:16 ` Paul Mackerras
2009-06-23 7:36 ` stephane eranian
2009-06-23 8:26 ` Paul Mackerras
2009-06-23 8:30 ` stephane eranian
2009-06-23 16:24 ` Corey Ashford
2009-06-22 11:51 ` I.3 - Multiplexing and system-wide Ingo Molnar
2009-06-22 11:51 ` I.4 - Controlling group multiplexing Ingo Molnar
2009-06-22 11:52 ` I.5 - Mmaped count Ingo Molnar
2009-06-22 12:25 ` stephane eranian
2009-06-22 12:35 ` Peter Zijlstra
2009-06-22 12:54 ` stephane eranian
2009-06-22 14:39 ` Peter Zijlstra
2009-06-23 0:41 ` Paul Mackerras
2009-06-23 0:39 ` Paul Mackerras
2009-06-23 6:13 ` Peter Zijlstra
2009-06-23 7:40 ` stephane eranian
2009-06-23 0:33 ` Paul Mackerras
2009-06-22 11:53 ` I.6 - Group scheduling Ingo Molnar
2009-06-22 11:54 ` I.7 - Group validity checking Ingo Molnar
2009-06-22 11:54 ` I.8 - Generalized cache events Ingo Molnar
2009-06-22 11:55 ` I.9 - Group reading Ingo Molnar
2009-06-22 11:55 ` I.10 - Event buffer minimal useful size Ingo Molnar
2009-06-22 11:56 ` I.11 - Missing definitions for generic events Ingo Molnar
2009-06-22 14:54 ` stephane eranian
2009-06-22 11:57 ` II.1 - Fixed counters on Intel Ingo Molnar
2009-06-22 14:27 ` stephane eranian
2009-06-22 11:57 ` II.2 - Event knowledge missing Ingo Molnar
2009-06-23 13:18 ` stephane eranian
2009-06-22 11:58 ` III.1 - Sampling period randomization Ingo Molnar
2009-06-22 11:58 ` IV.1 - Support for model-specific uncore PMU Ingo Molnar
2009-06-22 11:59 ` IV.2 - Features impacting all counters Ingo Molnar
2009-06-22 12:00 ` IV.3 - AMD IBS Ingo Molnar
2009-06-22 14:08 ` [perfmon2] " Rob Fowler
2009-06-22 17:58 ` Maynard Johnson
2009-06-23 6:19 ` Peter Zijlstra
2009-06-23 8:19 ` stephane eranian
2009-06-23 14:05 ` Ingo Molnar
2009-06-23 14:25 ` stephane eranian
2009-06-23 14:55 ` Ingo Molnar
2009-06-23 14:40 ` Rob Fowler
2009-06-22 19:17 ` stephane eranian
2009-06-22 12:00 ` IV.4 - Intel PEBS Ingo Molnar
2009-06-22 12:16 ` Andi Kleen
2009-06-22 12:01 ` IV.5 - Intel Last Branch Record (LBR) Ingo Molnar
2009-06-22 20:02 ` stephane eranian
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=20090622135611.GA5329@elte.hu \
--to=mingo@elte.hu \
--cc=a.p.zijlstra@chello.nl \
--cc=akpm@linux-foundation.org \
--cc=andi@firstfloor.org \
--cc=cel@us.ibm.com \
--cc=cjashfor@us.ibm.com \
--cc=eranian@gmail.com \
--cc=hch@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mpjohn@us.ibm.com \
--cc=mucci@eecs.utk.edu \
--cc=paulus@samba.org \
--cc=perfmon2-devel@lists.sourceforge.net \
--cc=robert.richter@amd.com \
--cc=terpstra@eecs.utk.edu \
--cc=tglx@linutronix.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox