From: Martin Ichilevici de Oliveira <martin.i.oliveira@gmail.com>
To: Vince Weaver <vincent.weaver@maine.edu>, Jiri Olsa <jolsa@redhat.com>
Cc: linux-perf-users@vger.kernel.org
Subject: Re: Interrupt caused by software events
Date: Fri, 11 Jul 2014 11:20:58 -0300 [thread overview]
Message-ID: <20140711142058.GA27580@gamayun> (raw)
In-Reply-To: <20140709135418.GB5767@krava.redhat.com> <alpine.DEB.2.10.1407091002490.26636@vincent-weaver-1.umelst.maine.edu>
[-- Attachment #1: Type: text/plain, Size: 2213 bytes --]
On Wed, Jul 09, 2014 at 10:05:55AM -0400, Vince Weaver wrote:
> Not really sure by what you mean by "real-time", but you can theoretically
> set up the perf_event mmap buffer with a low threshold, and have it
> configured to send a signal to your program whenever an event comes in.
> In theory you can get the PEBS-like info out that way. It's going to have
> fairly high overhead though, especially if you set the sample rate high.
On Wed, Jul 09, 2014 at 03:54:18PM +0200, Jiri Olsa wrote:
> hi,
> you could use perf_event_create_kernel_counter interface,
> check the lockup watchdog in kernel/watchdog.c
Vince and Jiri,
Thank you very much for your replies.
I re-read my email and I'm not sure I was clear, so just in case I
didn't made myself clear, here's a high-level example of what I'm
looking for.
/*******************/
/* Gets called whenever my program generates a cache-miss */
void my_func()
{
unsigned long addr = get_ip_that_generated_event();
printf("A cache-miss occurred at IP: %x!\n", addr);
}
int main()
{
struct perf_event_attr pe;
pe.type = PERF_TYPE_HARDWARE.
pe.config = PERF_COUNT_HW_CACHE_MISSES;
...
register_handler(&pe, my_func);
// code to be monitored
unregister_handler();
return 0;
}
/*******************/
Every time an event occurs (a cache-miss in my example), my_func should
get called. The get_ip_that_generated_event() function should return the
Instruction Pointer that generated the event.
My impression is that this could be done with a low overhead (other then
that introduced by what I do in my_func), because
"perf record -e cache-misses ./a.out"
can pinpoint with little overhead how many times the event was caused by
each instruction. But maybe I'm just missing something.
Vince:
I'm unsure how to configure the mmap buffer you mentioned, and I
couldn't find any examples online. Could you please point me to some
reference, or maybe provide a little example?
Jiri:
I'm under the impression I'd have to be in a kernel module (or in kernel
mode in general) to use perf_event_create_kernel_counter(). Is that
correct?
Thank you once again,
-Martin
[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2014-07-11 14:20 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-08 14:42 Interrupt caused by software events Martin Ichilevici de Oliveira
2014-07-09 13:54 ` Jiri Olsa
2014-07-09 14:05 ` Vince Weaver
2014-07-11 14:20 ` Martin Ichilevici de Oliveira [this message]
2014-07-11 15:26 ` Vince Weaver
2014-07-12 21:15 ` Jiri Olsa
2014-07-13 3:34 ` Andi Kleen
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=20140711142058.GA27580@gamayun \
--to=martin.i.oliveira@gmail.com \
--cc=jolsa@redhat.com \
--cc=linux-perf-users@vger.kernel.org \
--cc=vincent.weaver@maine.edu \
/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.