Digging a bit deep  i found that if

pid > 0 && cpu == -1

then only mmap during attr->inherit=1 fails. what i could be missing.?

On 8 April 2015 at 11:38, sahil aggarwal <sahil.ag...@gmail.com> wrote:
> Hey Elazar,
>
> In the example you sent me, if i set :
> attr->inherit=1
>
> Then,
>  mmap(mmap_pages->wrap_base + page_size,             \
>             mmap_len - page_size, PROT_READ |               \
>             PROT_WRITE, MAP_FIXED | MAP_SHARED,   \
>              fd, 0);
>
> call fails with "Invalid argument".
>
> Happens only if inherit is set. Do i need to set any other flag
> too.?
>
> Thanks
> Regards
>
> On 3 April 2015 at 11:04, sahil aggarwal <sahil.ag...@gmail.com> wrote:
>> Sorry for that dumb ques. Problem was somewhere else.
>>
>> On 2 April 2015 at 19:00, sahil aggarwal <sahil.ag...@gmail.com> wrote:
>>> Yeah you are right. And, there seem to be problem when i declare
>>> 'struct perf_event_attr'
>>> at run time. Is it know issue.?
>>> It gives me -EINVAL(Invalid Argument).
>>>
>>> Run Time:
>>> perf_event_open(0x22a20b8, 0, 0xffffffff, 0xffffffff, 0) = -1 EINVAL
>>> (Invalid argument)
>>>
>>> Compile Time:
>>> perf_event_open(0x7fffa242ee50, 0xffffffff, 0x1, 0xffffffff, 0) = 6
>>>
>>> On 2 April 2015 at 00:20, Elazar Leibovich
>>> <elazar.leibov...@ravellosystems.com> wrote:
>>>> You can't && event ids in config, it'll simply give a different event.
>>>> You need to open a stream per tracing event.
>>>>
>>>> On Wed, Apr 1, 2015 at 2:49 PM, sahil aggarwal <sahil.ag...@gmail.com> 
>>>> wrote:
>>>>> If i enable multiple tracepoints, say:
>>>>>
>>>>> type    = PERF_TYPE_TRACEPOINT
>>>>> config  = 87 | 402  (sched/sched_switch && syscalls/sys_enter_open)
>>>>> sample_type = PERF_SAMPLE_TIME       |
>>>>>                          PERF_SAMPLE_RAW       |
>>>>>                          PERF_SAMPLE_TID          |
>>>>>                          PERF_SAMPLE_STREAM_ID ;
>>>>>
>>>>> It gives me some ID when i print sample_id(i thought it will print
>>>>> config value).  But how i can connect this ID with my type of event
>>>>> (sched_switch or sys_enter_open). .?
>>>>>
>>>>> On 1 April 2015 at 15:34, sahil aggarwal <sahil.ag...@gmail.com> wrote:
>>>>>> No i didn't give it a shot yet but code was very helpful.
>>>>>> And, the raw data form was same as struct defined for event in format
>>>>>> file(syscalls/sys_enter_open/format).
>>>>>>
>>>>>>
>>>>>> On 1 April 2015 at 15:28, Elazar Leibovich
>>>>>> <elazar.leibov...@ravellosystems.com> wrote:
>>>>>>> Yes, this is correct, as far as I can tell, when you create a 
>>>>>>> perf_event for
>>>>>>> every tracepoint event.
>>>>>>>
>>>>>>> I personally created a separate thread for each trace point, since I 
>>>>>>> found
>>>>>>> this approach simpler, but it is certainly possible to use a single 
>>>>>>> thread +
>>>>>>> select from all perf_event_open file descriptor.
>>>>>>>
>>>>>>> BTW, did you manage to experiment with perf using the tool I attached?
>>>>>>>
>>>>>>> On Wed, Apr 1, 2015 at 12:22 PM, sahil aggarwal <sahil.ag...@gmail.com>
>>>>>>> wrote:
>>>>>>>>
>>>>>>>> Hi Elazar
>>>>>>>>
>>>>>>>> Finally i am able to make small prototype to enable tracepoints. :)
>>>>>>>>
>>>>>>>> One more thing, is it possible to enable multiple tracepoints through
>>>>>>>> 1 thread and
>>>>>>>> while parsing output find out to which tracepoint that raw data 
>>>>>>>> belongs.?
>>>>>>>>
>>>>>>>> Or i would have to create separate thread for each tracepoint. ?
>>>>>>>>
>>>>>>>> Man page says:
>>>>>>>>   Set config to one of the  following:
>>>>>>>>           .........
>>>>>>>>
>>>>>>>> So i am assuming i will have to create separate thread for each event.
>>>>>>>>
>>>>>>>>
>>>>>>>> Thanks a lot.
>>>>>>>>
>>>>>>>> On 31 March 2015 at 23:37, Elazar Leibovich
>>>>>>>> <elazar.leibov...@ravellosystems.com> wrote:
>>>>>>>> > Look at the man page, you should set the type to PERF_TYPE_TRACEPOINT
>>>>>>>> > and set the config to the event id.
>>>>>>>> >
>>>>>>>> > On my system, sys_enter_open event id is 455
>>>>>>>> >
>>>>>>>> > $ sudo cat 
>>>>>>>> > /sys/kernel/debug/tracing/events/syscalls/sys_enter_open/id
>>>>>>>> > 455
>>>>>>>> >
>>>>>>>> > Add PERF_SAMPLE_RAW to the sample_type.
>>>>>>>> >
>>>>>>>> > BTW
>>>>>>>> > You can compile the tar.gz I sent and echo JSON in the attr format to
>>>>>>>> > it, it'll print back perf data in json format. Easier to experiment
>>>>>>>> > with perf_event_open API than writing a C program.
>>>>>>>> >
>>>>>>>> > For example
>>>>>>>> >
>>>>>>>> > $ make
>>>>>>>> > $ sudo ./perf2 <<EOF
>>>>>>>> > {
>>>>>>>> >   "attr": {
>>>>>>>> >     "sample_type": [
>>>>>>>> >       "PERF_SAMPLE_IP",
>>>>>>>> >       "PERF_SAMPLE_RAW"
>>>>>>>> >     ],
>>>>>>>> >     "wakeup_events": 1,
>>>>>>>> >     "config": 455,
>>>>>>>> >     "sample_period": 1,
>>>>>>>> >     "type": "PERF_TYPE_TRACEPOINT"
>>>>>>>> >   }
>>>>>>>> > }
>>>>>>>> > EOF
>>>>>>>> >
>>>>>>>> > {"type":"PERF_RECORD_SAMPLE","misc":"PERF_RECORD_MISC_USER","sample":{"ip":"7f4f3625263d","data":[-57,1,0,0,7,11,0,0,2,0,0,0,0,0,0,0,-32,101,75,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}}
>>>>>>>> >
>>>>>>>> > {"type":"PERF_RECORD_SAMPLE","misc":"PERF_RECORD_MISC_USER","sample":{"ip":"7f4f3625263d","data":[-57,1,0,0,7,11,0,0,2,0,0,0,0,0,0,0,-64,112,75,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}}
>>>>>>>> >
>>>>>>>> > {"type":"PERF_RECORD_SAMPLE","misc":"PERF_RECORD_MISC_USER","sample":{"ip":"7f4f3625263d","data":[-57,1,0,0,7,11,0,0,2,0,0,0,0,0,0,0,-112,70,75,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}}
>>>>>>>> >
>>>>>>>> > {"type":"PERF_RECORD_SAMPLE","misc":"PERF_RECORD_MISC_USER","sample":{"ip":"7f4f3625263d","data":[-57,1,0,0,7,11,0,0,2,0,0,0,0,0,0,0,-32,70,75,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}}
>>>>>>>> >
>>>>>>>> > {"type":"PERF_RECORD_SAMPLE","misc":"PERF_RECORD_MISC_USER","sample":{"ip":"7f4f3625263d","data":[-57,1,0,0,7,11,0,0,2,0,0,0,0,0,0,0,0,-99,26,-19,-1,127,0,0,0,0,0,0,0,0,0,0,-74,1,0,0,0,0,0,0,0,0,0,0]}}
>>>>>>>> > ...
>>>>>>>> >
>>>>>>>> > What is the raw data? Depends on the event. For sys_enter/exit it is
>>>>>>>> > struct syscall_trace_enter/exit.
>>>>>>>> >
>>>>>>>> > http://osxr.org/linux/source/kernel/trace/trace.h#0095
>>>>>>>> > struct trace_entry {
>>>>>>>> >      unsigned short      type;
>>>>>>>> >      unsigned char       flags;
>>>>>>>> >      unsigned char       preempt_count;
>>>>>>>> >      int         pid;
>>>>>>>> > };
>>>>>>>> > struct syscall_trace_enter {
>>>>>>>> >     struct trace_entry  ent;
>>>>>>>> >     int         nr;
>>>>>>>> >     unsigned long       args[];
>>>>>>>> > };
>>>>>>>> >
>>>>>>>> > How did I know that? I followed the kernel logic here:
>>>>>>>> >
>>>>>>>> > http://osxr.org/linux/source/kernel/trace/trace_syscalls.c#0636
>>>>>>>> > static void perf_syscall_exit(void *ignore, struct pt_regs *regs, 
>>>>>>>> > long
>>>>>>>> > ret)
>>>>>>>> > {
>>>>>>>> > ...
>>>>>>>> > rec = (struct syscall_trace_exit *)perf_trace_buf_prepare(size, ...);
>>>>>>>> > ...
>>>>>>>> > }
>>>>>>>> >
>>>>>>>> > Note that indeed after short+char+char+int we have 2, the open 
>>>>>>>> > syscall
>>>>>>>> > number in all event's raw data.
>>>>>>>> >
>>>>>>>> > On Tue, Mar 31, 2015 at 6:22 PM, sahil aggarwal 
>>>>>>>> > <sahil.ag...@gmail.com>
>>>>>>>> > wrote:
>>>>>>>> >> Actually i need most of the sampling around PERF_TYPE_TRACEPOINT,
>>>>>>>> >> so if i enable tracepoint "syscalls/sys_enter_open/" what will be 
>>>>>>>> >> the
>>>>>>>> >> "type"
>>>>>>>> >> field in perf_event_header.? And, the the record struct will be 
>>>>>>>> >> same as
>>>>>>>> >> given
>>>>>>>> >> in "syscalls/sys_enter_open/format" .?
>>>>>>>> >>
>>>>>>>> >> Thanks
>>>>>>>> >>
>>>>>>>> >> On 31 March 2015 at 20:40, sahil aggarwal <sahil.ag...@gmail.com>
>>>>>>>> >> wrote:
>>>>>>>> >>> Yeah that was clear enough.
>>>>>>>> >>> Thanks a lot. Your code is of great help.
>>>>>>>> >>>
>>>>>>>> >>> Regards
>>>>>>>> >>> Sahil
>>>>>>>> >>>
>>>>>>>> >>> On 31 March 2015 at 19:45, Elazar Leibovich
>>>>>>>> >>> <elazar.leibov...@ravellosystems.com> wrote:
>>>>>>>> >>>> I wanted to ensure the user always see contiguous array of data 
>>>>>>>> >>>> from
>>>>>>>> >>>> the ring buffer.
>>>>>>>> >>>>
>>>>>>>> >>>> The last piece of data, say "abcde" could wrap around in the ring
>>>>>>>> >>>> buffer and appear like:
>>>>>>>> >>>>
>>>>>>>> >>>> [de...                 ...abc]
>>>>>>>> >>>>
>>>>>>>> >>>> I wanted the user to see a contigious array of the form [abcde].
>>>>>>>> >>>>
>>>>>>>> >>>> So in the case I'm having input that wrap around, I'll simply 
>>>>>>>> >>>> copy it
>>>>>>>> >>>> to the first buffer
>>>>>>>> >>>>
>>>>>>>> >>>> [wrap_buffer][de..                 ...abc]
>>>>>>>> >>>> would become
>>>>>>>> >>>> [               abc][de...               ...abc]
>>>>>>>> >>>>
>>>>>>>> >>>> And then I'll the user pointer to the leftmost "a", and he'll see
>>>>>>>> >>>> "abcde" without knowing he's handling a ring buffer.
>>>>>>>> >>>>
>>>>>>>> >>>> Let me know if I was clear enough.
>>>>>>>> >>>>
>>>>>>>> >>>> On Tue, Mar 31, 2015 at 2:18 PM, sahil aggarwal
>>>>>>>> >>>> <sahil.ag...@gmail.com> wrote:
>>>>>>>> >>>>>
>>>>>>>> >>>>> Hi Elazar
>>>>>>>> >>>>>
>>>>>>>> >>>>> Can you help me understand why you have used
>>>>>>>> >>>>> mmap_pages->wrap_base.? And, instead of allocating
>>>>>>>> >>>>> (2^n)+1 pages you allocate (2^n)+2 pages, why so.?
>>>>>>>> >>>>> wrap_base points to (2^n)+2 pages and base points to
>>>>>>>> >>>>> (2^n)+1 pages, what is use of wrap_base.? I tried reading
>>>>>>>> >>>>> perf source too, there it seems they use (2^n)+1 pages only.
>>>>>>>> >>>>>
>>>>>>>> >>>>>
>>>>>>>> >>>>> Thanks
>>>>>>>> >>>>> Regards
>>>>>>>> >> --
>>>>>>>> >> To unsubscribe from this list: send the line "unsubscribe
>>>>>>>> >> linux-perf-users" in
>>>>>>>> >> the body of a message to majord...@vger.kernel.org
>>>>>>>> >> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>>>>>>
>>>>>>>
--
To unsubscribe from this list: send the line "unsubscribe linux-perf-users" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to