diff options
author | Jesper Dangaard Brouer <brouer@redhat.com> | 2019-04-12 17:07:48 +0200 |
---|---|---|
committer | Alexei Starovoitov <ast@kernel.org> | 2019-04-17 19:09:25 -0700 |
commit | 86d231459d6dc9094e70c35c3517f4ef860b2f1e (patch) | |
tree | ac3d55b7b5731f7e19fd2e27b242135b3fd453d2 /virt/lib/irqbypass.c | |
parent | 8f0504a97e1ba6b70e1c8b5a88255c280f263287 (diff) | |
download | linux-stable-86d231459d6dc9094e70c35c3517f4ef860b2f1e.tar.gz linux-stable-86d231459d6dc9094e70c35c3517f4ef860b2f1e.tar.bz2 linux-stable-86d231459d6dc9094e70c35c3517f4ef860b2f1e.zip |
bpf: cpumap memory prefetchw optimizations for struct page
A lot of the performance gain comes from this patch.
While analysing performance overhead it was found that the largest CPU
stalls were caused when touching the struct page area. It is first read with
a READ_ONCE from build_skb_around via page_is_pfmemalloc(), and when freed
written by page_frag_free() call.
Measurements show that the prefetchw (W) variant operation is needed to
achieve the performance gain. We believe this optimization it two fold,
first the W-variant saves one step in the cache-coherency protocol, and
second it helps us to avoid the non-temporal prefetch HW optimizations and
bring this into all cache-levels. It might be worth investigating if
prefetch into L2 will have the same benefit.
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
Acked-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Acked-by: Song Liu <songliubraving@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'virt/lib/irqbypass.c')
0 files changed, 0 insertions, 0 deletions