lkml.org 
[lkml]   [2009]   [May]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH 3/5] perf_counter: rework ioctl()s
Paul Mackerras wrote:
> Corey Ashford writes:
>
>> I was seeing that on Power5. On 5/6/2009, I sent along a test case that was
>> supposed to duplicate the sequence of operations, without using PAPI, to Peter
>> Zijlstra, cc'ing you. However, I was unable to get any signals delivered to
>> user space with that code, so I was unable to reproduce the problem outside of
>> the PAPI test case. I don't know why signal delivery doesn't work with that
>> test case... I spent quite a lot of time verifying that it was doing the right
>> thing, but could never get it to work.
>
> I tried your test program out today, with the ioctl calls changed to
> add an extra 0 argument, like this:
>
> ioctl(fd[0], PERF_COUNTER_IOC_ENABLE, 0);
>
> and similarly for the disable call. It all seemed to be fine. There
> is still a little problem with enabling counters - it doesn't happen
> right away. I have a patch to fix that, which I'll send out, and with
> that patch I get:
>
> # ./test_group_disable
> evt[0].config = 0
> evt[1].config = 4
> group_leader = -1
> evt[i].wakeup_events = 0
> successfully opened evt[0]. fd[0] = 3
> group_leader = 3
> evt[i].wakeup_events = 0
> successfully opened evt[1]. fd[1] = 4
> successfully attached signal handler
> fd 3's mmap buffer is located at 0xfffab4b3000
> successfully tuned up fd 3
> fd 4's mmap buffer is located at 0xfffab4aa000
> successfully tuned up fd 4
> enable was successful
> CYCLES: 20904
> BRANCHES: 2413
> signal received while counters are enabled. fd = 3
> signal received while counters are enabled. fd = 3
> signal received while counters are enabled. fd = 3
> signal received while counters are enabled. fd = 3
> signal received while counters are enabled. fd = 3
> signal received while counters are enabled. fd = 4
> signal received while counters are enabled. fd = 3
> signal received while counters are enabled. fd = 3
> signal received while counters are enabled. fd = 3
> signal received while counters are enabled. fd = 3
> signal received while counters are enabled. fd = 3
> signal received while counters are enabled. fd = 3
> signal received while counters are enabled. fd = 4
> signal received while counters are enabled. fd = 3
> signal received while counters are enabled. fd = 3
> signal received while counters are enabled. fd = 3
> signal received while counters are enabled. fd = 3
> signal received while counters are enabled. fd = 3
> signal received while counters are enabled. fd = 3
> signal received while counters are enabled. fd = 4
> signal received while counters are enabled. fd = 3
> signal received while counters are enabled. fd = 3
> signal received while counters are enabled. fd = 3
> disable was successful
> CYCLES: 180149676
> BRANCHES: 30030826
> CYCLES: 180149676
> BRANCHES: 30030826
> CYCLES data_head: 141b0
> BRANCHES data_head: 35a0
> #
>
> So clearly it is getting signals when the leader is enabled, one per
> page of events, and not when the leader is disabled. I notice you
> have evt[].wakeup_events set to 0, which is presumably why we don't
> get more signals than we do.

Interesting. Thanks for finding that ioctl error! That really had me
stumped.

Another hypothesis is that the old PAPI code would open, mmap, close,
then reopen, and mmap again. I wonder if because I wasn't munmap'ing
before the close, that I got some strange behavior from the kernel.
I'll try that today with that test case.

Thanks!

- Corey




\
 
 \ /
  Last update: 2009-05-12 18:21    [W:0.141 / U:0.168 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site