On 2/7/19 3:49 PM, Yonghong Song wrote:
On Thu, Feb 7, 2019 at 8:15 AM Mauricio Vasquez
<[email protected]> wrote:
Hello folks,
We have an eBPF program that shares a 64-bits integer with userspace
using an array map. The eBPF program only reads the integer while the
user-space application only writes it.
We know this is possible that under some conditions, for example the
integer is not aligned to cache line size in x86_64, the reader can see
a partially updated value. We wonder if eBPF have some guarantees about
not just cache line, you mean not in its naturally aligned boundary?
Exactly.
One load/store is actually broken into multiple loads/stores by the compiler?
atomicity of the load operation in this case, or if this is totally
dependent on the target architecture.
Is there a way to implement this without using bpf_spin_lock?
So you mean both user space and bpf program are using bpf_spin_lock?
Please consider this example based on BCC
https://gist.github.com/mauriciovasquezbernal/73ade7609eadcf23fb254401ed945cb3.
In this case the counter member is naturally aligned, so in x86_64 the
program will never see a partial update. However this could be not true
for all architectures. AFAIK bpf_spin_lock is the only way to implement
this example in a safe way for all architectures.
In other words, it is not possible to make assumptions about load or
store operations atomicity in eBPF, this is dependent on the
architecture where the program is run.
Is that statement correct?
Thanks,
Mauricio.
Thanks,
Mauricio.
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#1572): https://lists.iovisor.org/g/iovisor-dev/message/1572
Mute This Topic: https://lists.iovisor.org/mt/29691062/21656
Group Owner: [email protected]
Unsubscribe: https://lists.iovisor.org/g/iovisor-dev/unsub
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-