Re: [iovisor-dev] Why is BPF_PERF_OUTPUT max_entries set to total processor count?

2020-02-16 Thread Yonghong Song
On Sun, Feb 16, 2020 at 5:09 PM Hayden Livingston
 wrote:
>
> Thanks. I had to re-read your reply and the kernel code multiple
> times, but I think I get it now. Please confirm.
>
> It is this call is made by user mode code:
>
> fd = bpf_create_map(BPF_MAP_TYPE_PERF_EVENT_ARRAY, /*key_size*/
> sizeof(int), /*value_size*/ sizeof(int), NUM_POSSIBLE_CPUS, 0);
>
> key is smp_processor_id. value is perf_events fd. This is why the map
> is both is key integer and value integer.
>
> Why so many indirections? Is it to support pinning where user program
> can different ring buffers?

Perf event ring buffer is per cpu.

>
> To me it seems the kernel code that uses cpu index to look into array
> could just to told fd directly.

Yes, it is what it did in the kernel. Each array element holds one ring buffer.

>
> On Sun, Feb 16, 2020 at 1:50 PM Y Song  wrote:
> >
> > PERF_EVENT_OUTPUT map is to hold per cpu ring buffers created by
> > perf_event_open.
> > That is why its typical size is the number of cpus on the host.
> >
> > On Sun, Feb 16, 2020 at 1:52 AM Hayden Livingston
> >  wrote:
> > >
> > > I'm very confused why BCC creates a map of number of processors for
> > > the perf_events output map.
> > >
> > > I can imagine it being 1 since all it does is act as a kernel-user
> > > mode intermediary and it is true that the code cannot be preempted.
> > >
> > > Or if it can be preempted then I can imagine that since there can't be
> > > more than processor count it is the max depth one has to worry about.
> > >
> > > Is my thinking flawed? Or maybe there is a completely different reason?
> > >
> > >
> > >
>
> 
>

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#1803): https://lists.iovisor.org/g/iovisor-dev/message/1803
Mute This Topic: https://lists.iovisor.org/mt/71322089/21656
Group Owner: iovisor-dev+ow...@lists.iovisor.org
Unsubscribe: https://lists.iovisor.org/g/iovisor-dev/unsub  
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-



Re: [iovisor-dev] Why is BPF_PERF_OUTPUT max_entries set to total processor count?

2020-02-16 Thread Hayden Livingston
Thanks. I had to re-read your reply and the kernel code multiple
times, but I think I get it now. Please confirm.

It is this call is made by user mode code:

fd = bpf_create_map(BPF_MAP_TYPE_PERF_EVENT_ARRAY, /*key_size*/
sizeof(int), /*value_size*/ sizeof(int), NUM_POSSIBLE_CPUS, 0);

key is smp_processor_id. value is perf_events fd. This is why the map
is both is key integer and value integer.

Why so many indirections? Is it to support pinning where user program
can different ring buffers?

To me it seems the kernel code that uses cpu index to look into array
could just to told fd directly.

On Sun, Feb 16, 2020 at 1:50 PM Y Song  wrote:
>
> PERF_EVENT_OUTPUT map is to hold per cpu ring buffers created by
> perf_event_open.
> That is why its typical size is the number of cpus on the host.
>
> On Sun, Feb 16, 2020 at 1:52 AM Hayden Livingston
>  wrote:
> >
> > I'm very confused why BCC creates a map of number of processors for
> > the perf_events output map.
> >
> > I can imagine it being 1 since all it does is act as a kernel-user
> > mode intermediary and it is true that the code cannot be preempted.
> >
> > Or if it can be preempted then I can imagine that since there can't be
> > more than processor count it is the max depth one has to worry about.
> >
> > Is my thinking flawed? Or maybe there is a completely different reason?
> >
> > 
> >

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#1802): https://lists.iovisor.org/g/iovisor-dev/message/1802
Mute This Topic: https://lists.iovisor.org/mt/71322089/21656
Group Owner: iovisor-dev+ow...@lists.iovisor.org
Unsubscribe: https://lists.iovisor.org/g/iovisor-dev/unsub  
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-



Re: [iovisor-dev] Why is BPF_PERF_OUTPUT max_entries set to total processor count?

2020-02-16 Thread Yonghong Song
PERF_EVENT_OUTPUT map is to hold per cpu ring buffers created by
perf_event_open.
That is why its typical size is the number of cpus on the host.

On Sun, Feb 16, 2020 at 1:52 AM Hayden Livingston
 wrote:
>
> I'm very confused why BCC creates a map of number of processors for
> the perf_events output map.
>
> I can imagine it being 1 since all it does is act as a kernel-user
> mode intermediary and it is true that the code cannot be preempted.
>
> Or if it can be preempted then I can imagine that since there can't be
> more than processor count it is the max depth one has to worry about.
>
> Is my thinking flawed? Or maybe there is a completely different reason?
>
> 
>

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#1801): https://lists.iovisor.org/g/iovisor-dev/message/1801
Mute This Topic: https://lists.iovisor.org/mt/71322089/21656
Group Owner: iovisor-dev+ow...@lists.iovisor.org
Unsubscribe: https://lists.iovisor.org/g/iovisor-dev/unsub  
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-