Re: [PATCH bpf-next 1/6] bpf: implement BPF ring buffer and verifier support for it
From: Thomas Gleixner <hidden>
Date: 2020-05-14 20:39:24
Also in:
bpf, linux-arch
From: Thomas Gleixner <hidden>
Date: 2020-05-14 20:39:24
Also in:
bpf, linux-arch
Jakub Kicinski [off-list ref] writes:
On Wed, 13 May 2020 12:25:27 -0700 Andrii Nakryiko wrote:quoted
One interesting implementation bit, that significantly simplifies (and thus speeds up as well) implementation of both producers and consumers is how data area is mapped twice contiguously back-to-back in the virtual memory. This allows to not take any special measures for samples that have to wrap around at the end of the circular buffer data area, because the next page after the last data page would be first data page again, and thus the sample will still appear completely contiguous in virtual memory. See comment and a simple ASCII diagram showing this visually in bpf_ringbuf_area_alloc().Out of curiosity - is this 100% okay to do in the kernel and user space these days? Is this bit part of the uAPI in case we need to back out of it? In the olden days virtually mapped/tagged caches could get confused seeing the same physical memory have two active virtual mappings, or at least that's what I've been told in school :)
Yes, caching the same thing twice causes coherency problems. VIVT can be found in ARMv5, MIPS, NDS32 and Unicore32.
Checking with Paul - he says that could have been the case for Itanium and PA-RISC CPUs.
Itanium: PIPT L1/L2.
PA-RISC: VIPT L1 and PIPT L2
Thanks,
tglx