Re: [perfmon] Re: [perfmon2] perfmon2 merge news

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Stephane Eranian
Date: Wednesday, November 14, 2007 - 6:09 am

Andi,

On Wed, Nov 14, 2007 at 03:07:02AM +0100, Andi Kleen wrote:

Just want to make sure perfmon2 users participate in this discussion.


Partially true. The file descriptor becomes really useful when you sample.
You leverage the file descriptor to receive notifications of counter overflows
and full sampling buffer. You extract notification messages via read() and you can
use SIGIO, select/poll.

The example shows how you can leverage existing mechanisms to destroy the session, i.e.,
free the associated kernel resources. For that, you use close() instead of adding yet
another syscall. It also provides a resource limitation mechanisms to control consumption
of kernel memory, i.e., you can only create as many sessions as you can have open files.

Are you suggesting something like: pfm_write_pmcs(fd, 0, 0x1234)?

That would be quite expensive when you have lots of registers to setup: one
syscall per register. The perfmon syscalls to read/write registers accept vector
of arguments to amortize the cost of the syscall over multiple registers
(similar to poll(2)).

With many tools, registers are not just setup once. During certain measurements,
data registers may be read multiple times. When you sample or multiplex at
the user level, you do need to reprogram the PMU state and that is on the critical
path.

You do not want a call that programs the entire PMU state all at once either. Many times,
you only want to modify a small subset. Having the full state does also cause some portability
problems.


It depends on what you are doing. Here, this was not really necessary. It was
meant to show how you can program the data registers as well. Perfmon2 provides
default values for all data registers. For counters, the value is guaranteed to
be zero.

But it is important to note that not all data registers are counters. That is the
case of Itanium 2, some are just buffers. On AMD Barcelona IBS several are buffers as
well, and some may need to be initialized to non zero value, i.e., the IBS sampling
period.

With event-based sampling,  the period is expressed as the number of occurrences
of an event. For instance, you can say: " take a sample every 2000 L2 cache misses".
The way you express this with perfmon2 is that you program a counter to measure
L2 cache misses, and then you initialize the corresponding data register (counter)
to overflow after 2000 occurrences. Given that the interface guarantees all counters
are 64-bit regardless of the hardware, you simply have to program the counter to -2000.
Thus you see that you need a call to actual program the data registers.


You are mixing PMU programming with the type of measurement you want to do.

Perfmon2 decouples the two operations. In fact, no PMU hardware is actually touched
before you attach to either a CPU or a thread. This way, you can prepare your measurement
and then attach-and-go. Thus is is possible to create batches of ready-to-go sessions.
That is useful, for instance, when you are trying to measure across fork, pthread_create
which you can catch on-the-fly.

Take the per-thread example, you can setup your session before you fork/exec the program
you want to measure.

Note also that perfmon2 supports attaching to an already running thread. So there is
more than "GLOBAL CONTEXT" versus "MY CONTEXT".



Good question. If you do what say, you assume that the start/stop bit lives in the
config (or data) registers of the PMU. This is not true on all hardware. On Itanium
for instance, the start/stop bit is part of the Processor Status Register (psr).
That is not a PMU register.

On X86, you set the enable bit the PERFEVTSEL, but nothing really happens until you issue
pfm_start(), i.e., the PERFEVTSEL registers are not touched until then.

One approach does not prevent the other. Assuming you allow cr4.pce, then nothing prevents
a self-monitoring thread from reading the counters directly. You'll just get the
lower 32-bit of it. So if you read frequently enough, you should not have a problem.

But keep in mind that we do want a uniform interface across all hardware and all type
of sessions (self-monitoring, CPU-wide, monitoring of another thread). You don't want
an interface that says on x86 you have to use rdpmc, on Itanium pfm_read_pmds() and so
on. You want an interface that guarantees that with pfm_read_pmds() you'll be able to
read on any hardware platforms, then on some you may be able to use a more efficient
method, e.g., rdpmc on X86.

Reducing performance monitoring to self-monitoring is not what we want. In fact, there
are only a few domains where you can actually do this and HPC is one of them. But in 
many other situations, you cannot and don't want to have to instrument applications
or libraries to collect performance data. It is quite handy to be able to do:
	$ pfmon /bin/ls
or
	$ pfmon --attach-task=`pidof sshd` -timeout=10s


Also note that there is no guarantee that RDPMC allows you to access all data registers
on a PMU. For instance, on AMD Barcelona, it seems you cannot read the IBS register using
RDPMC.


Itanium does allow user level read of data registers. It also allows start/stop.
Perfmon2 allows this only for self-monitoring per-thread sessions.

I think restricting per-thread mode to only self-monitoring is just too limiting
even for a start.


You can do exactly this with the perfmon2 interface as it exists today.
Your example is perfectly fine, your interface works in your case.

But you are driving the design of the interface from your very specific need
and you are ignoring all the other usage models. This has been a problem with so
many other interfaces and that explains the current situation. You have to
take a broader view, look at what the hardware (across the board) provides and
build from there. We do not need yet another interface to support one tool or one
type of measurement, we need a true programming interface with a uniform set
of calls. So sure, several calls may look overkill for basic measurements, but
they become necessary with others.

-- 
-Stephane
-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH] fix up perfmon to build on -mm, Greg KH, (Tue Nov 6, 5:34 pm)
Re: [PATCH] fix up perfmon to build on -mm, Stephane Eranian, (Wed Nov 7, 3:34 am)
Re: [PATCH] fix up perfmon to build on -mm, Stephane Eranian, (Wed Nov 7, 6:42 am)
Re: [PATCH] fix up perfmon to build on -mm, Greg KH, (Wed Nov 7, 10:07 am)
Re: [PATCH] fix up perfmon to build on -mm, Greg KH, (Wed Nov 7, 10:08 am)
Re: [PATCH] fix up perfmon to build on -mm, Andrew Morton, (Wed Nov 7, 10:33 am)
Re: [PATCH] fix up perfmon to build on -mm, Greg KH, (Wed Nov 7, 10:41 am)
Re: [PATCH] fix up perfmon to build on -mm, Greg KH, (Wed Nov 7, 10:47 am)
Re: [PATCH] fix up perfmon to build on -mm, Stephane Eranian, (Wed Nov 7, 10:50 am)
Re: [PATCH] fix up perfmon to build on -mm, Stephane Eranian, (Wed Nov 7, 10:57 am)
Re: [PATCH] fix up perfmon to build on -mm, Greg KH, (Wed Nov 7, 12:53 pm)
Re: [PATCH] fix up perfmon to build on -mm, Stephane Eranian, (Wed Nov 7, 1:39 pm)
Re: [PATCH] fix up perfmon to build on -mm, Stephane Eranian, (Thu Nov 8, 8:27 am)
Re: [PATCH] fix up perfmon to build on -mm, Andrew Morton, (Fri Nov 9, 1:06 pm)
Re: [PATCH] fix up perfmon to build on -mm, Greg KH, (Fri Nov 9, 2:38 pm)
Re: [PATCH] fix up perfmon to build on -mm, Andi Kleen, (Sat Nov 10, 1:32 pm)
perfmon2 merge news, Robert Richter, (Tue Nov 13, 8:17 am)
Re: [perfmon2] perfmon2 merge news, William Cohen, (Tue Nov 13, 8:35 am)
Re: [perfmon2] perfmon2 merge news, Stephane Eranian, (Tue Nov 13, 10:55 am)
Re: perfmon2 merge news, Stephane Eranian, (Tue Nov 13, 11:32 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, William Cohen, (Tue Nov 13, 11:33 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Philip Mucci, (Tue Nov 13, 11:47 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Greg KH, (Tue Nov 13, 11:59 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Andrew Morton, (Tue Nov 13, 1:07 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Greg KH, (Tue Nov 13, 1:14 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Andi Kleen, (Tue Nov 13, 1:36 pm)
Re: [perfmon2] perfmon2 merge news, Andi Kleen, (Tue Nov 13, 1:42 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Stephane Eranian, (Tue Nov 13, 2:13 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Andi Kleen, (Tue Nov 13, 2:29 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Stephane Eranian, (Tue Nov 13, 2:33 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Greg KH, (Tue Nov 13, 2:45 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Stephane Eranian, (Tue Nov 13, 2:46 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Andi Kleen, (Tue Nov 13, 2:50 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Stephane Eranian, (Tue Nov 13, 3:22 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Andi Kleen, (Tue Nov 13, 3:25 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Christoph Hellwig, (Tue Nov 13, 3:27 pm)
Re: perfmon2 merge news, Christoph Hellwig, (Tue Nov 13, 3:29 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Stephane Eranian, (Tue Nov 13, 3:58 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Nick Piggin, (Tue Nov 13, 4:49 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Nick Piggin, (Tue Nov 13, 5:25 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Philip Mucci, (Tue Nov 13, 5:28 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Nick Piggin, (Tue Nov 13, 5:28 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Andi Kleen, (Tue Nov 13, 6:52 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Andi Kleen, (Tue Nov 13, 7:07 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Paul Mackerras, (Wed Nov 14, 12:24 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Andrew Morton, (Wed Nov 14, 12:40 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Nick Piggin, (Wed Nov 14, 3:17 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Christoph Hellwig, (Wed Nov 14, 3:38 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Paul Mackerras, (Wed Nov 14, 3:43 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Christoph Hellwig, (Wed Nov 14, 4:00 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Nick Piggin, (Wed Nov 14, 4:03 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, David Miller, (Wed Nov 14, 4:12 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, David Miller, (Wed Nov 14, 4:14 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Paul Mackerras, (Wed Nov 14, 4:39 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Paul Mackerras, (Wed Nov 14, 4:44 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, David Miller, (Wed Nov 14, 4:52 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, David Miller, (Wed Nov 14, 4:52 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, David Miller, (Wed Nov 14, 4:58 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Paul Mackerras, (Wed Nov 14, 5:03 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, David Miller, (Wed Nov 14, 5:07 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Andi Kleen, (Wed Nov 14, 5:38 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Stephane Eranian, (Wed Nov 14, 6:09 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Stephane Eranian, (Wed Nov 14, 6:47 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Stephane Eranian, (Wed Nov 14, 6:51 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Stephane Eranian, (Wed Nov 14, 7:13 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Andi Kleen, (Wed Nov 14, 7:24 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Andi Kleen, (Wed Nov 14, 7:26 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, William Cohen, (Wed Nov 14, 8:44 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Stephane Eranian, (Wed Nov 14, 9:13 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Philippe Elie, (Wed Nov 14, 11:53 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Andi Kleen, (Wed Nov 14, 12:15 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, David Miller, (Wed Nov 14, 12:48 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Paul Mackerras, (Wed Nov 14, 2:30 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Paul Mackerras, (Wed Nov 14, 2:50 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Chuck Ebbert, (Wed Nov 14, 3:56 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, David Miller, (Wed Nov 14, 4:03 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Paul Mackerras, (Wed Nov 14, 4:12 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, David Miller, (Wed Nov 14, 4:21 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Stephane Eranian, (Wed Nov 14, 5:07 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Paul Mackerras, (Wed Nov 14, 5:23 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Paul Mackerras, (Wed Nov 14, 6:11 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, David Miller, (Wed Nov 14, 6:27 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Paul Mackerras, (Wed Nov 14, 7:34 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, dean gaudet, (Wed Nov 14, 9:20 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Paul Mackerras, (Wed Nov 14, 9:47 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, dean gaudet, (Wed Nov 14, 10:14 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Herbert Xu, (Thu Nov 15, 12:48 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Andi Kleen, (Thu Nov 15, 1:19 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Stephane Eranian, (Thu Nov 15, 1:53 am)
RE: [perfmon2] [perfmon] Re: perfmon2 merge news, Dan Terpstra, (Thu Nov 15, 10:01 am)
Re: perfmon2 merge news, Philip Mucci, (Fri Nov 16, 2:18 am)
Re: perfmon2 merge news, Andi Kleen, (Fri Nov 16, 8:15 am)
Re: perfmon2 merge news, Stephane Eranian, (Fri Nov 16, 9:00 am)
Re: perfmon2 merge news, Andi Kleen, (Fri Nov 16, 9:28 am)
Re: perfmon2 merge news, William Cohen, (Fri Nov 16, 10:13 am)
Re: perfmon2 merge news, Stephane Eranian, (Fri Nov 16, 10:36 am)
Re: perfmon2 merge news, dean gaudet, (Fri Nov 16, 10:51 am)
Re: PMC core internal API design, Mathieu Desnoyers, (Fri Nov 16, 11:25 am)
Re: perfmon2 merge news, Philip Mucci, (Fri Nov 16, 1:16 pm)
Re: perfmon2 merge news, David Miller, (Fri Nov 16, 5:15 pm)
Re: perfmon2 merge news, David Miller, (Fri Nov 16, 5:29 pm)
Re: perfmon2 merge news, Greg KH, (Fri Nov 16, 6:07 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, David Miller, (Mon Nov 19, 6:08 am)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Stephane Eranian, (Mon Nov 19, 1:53 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Paul Mackerras, (Mon Nov 19, 2:43 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, Stephane Eranian, (Mon Nov 19, 3:48 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, David Miller, (Mon Nov 19, 5:53 pm)
Re: [perfmon] Re: [perfmon2] perfmon2 merge news, David Miller, (Mon Nov 19, 5:55 pm)
Re: [perfmon2] perfmon2 merge news, Stephane Eranian, (Thu Dec 13, 9:00 am)
Re: [perfmon2] perfmon2 merge news, Frank Ch. Eigler, (Fri Dec 14, 12:12 pm)
Re: [perfmon2] perfmon2 merge news, Stephane Eranian, (Fri Dec 14, 2:07 pm)
Re: [perfmon2] perfmon2 merge news, Frank Ch. Eigler, (Sat Dec 15, 8:54 am)