Thread (4 messages) flat view 4 messages, 2 authors, 2014-07-30

Re: [PATCH RFC v3 net-next 3/3] samples: bpf: eBPF dropmon example in C

From: Alexei Starovoitov <hidden>
Date: 2014-07-30 18:53:58
Also in: lkml, netdev

On Wed, Jul 30, 2014 at 10:36 AM, Frank Ch. Eigler [off-list ref] wrote:
quoted
quoted
What kind of locking/serialization is provided by the ebpf runtime
over shared variables such as my_map?
it's traditional rcu scheme.
OK, that protects the table structure, but:
quoted
[...] In such case concurrent write access to map value can be done
with bpf_xadd instruction, though using normal read/write is also
allowed. In some cases the speed of racy var++ is preferred over
'lock xadd'.
... so concurrency control over shared values is left up to the
programmer.
yes. It has to be flexible and fast.
One of our main use cases is network analytics where a lot of
packets are going through ebpf programs, so every cycle counts.
Mandatory locks in critical path are not acceptable. If we add
locks they will be optional.
quoted
There are no lock/unlock function helpers available to ebpf
programs, since program may terminate early with div by zero
for example, so in-kernel lock helper implementation would
be complicated and slow. It's possible to do, but for the use
cases so far there is no need.
OK, I hope that works out.  I've been told that dtrace does something
similiar (!)  by eschewing protection on global variables such as
strings.  In their case it's less bad than it sounds because they are
used to offloading computation to userspace or to store only
thread-local state, and accept the corollary limitations on control.
interesting.
btw, things like global variables, per-cpu storage are potential ebpf
features. So far they're 'nice to have' instead of 'mandatory'.
The maps are powerful enough to do the same:
Global storage is map of one element.
Per-cpu storage is map of num_cpu elements.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help