lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <658c4328425f7_a33e629412@willemb.c.googlers.com.notmuch> Date: Wed, 27 Dec 2023 10:30:48 -0500 From: Willem de Bruijn <willemdebruijn.kernel@...il.com> To: Alexander Lobakin <aleksander.lobakin@...el.com>, "David S. Miller" <davem@...emloft.net>, Eric Dumazet <edumazet@...gle.com>, Jakub Kicinski <kuba@...nel.org>, Paolo Abeni <pabeni@...hat.com> Cc: Alexander Lobakin <aleksander.lobakin@...el.com>, Maciej Fijalkowski <maciej.fijalkowski@...el.com>, Michal Kubiak <michal.kubiak@...el.com>, Larysa Zaremba <larysa.zaremba@...el.com>, Alexei Starovoitov <ast@...nel.org>, Daniel Borkmann <daniel@...earbox.net>, Willem de Bruijn <willemdebruijn.kernel@...il.com>, intel-wired-lan@...ts.osuosl.org, netdev@...r.kernel.org, linux-kernel@...r.kernel.org Subject: Re: [PATCH RFC net-next 05/34] idpf: convert header split mode to libie + napi_build_skb() Alexander Lobakin wrote: > Currently, idpf uses the following model for the header buffers: > > * buffers are allocated via dma_alloc_coherent(); > * when receiving, napi_alloc_skb() is called and then the header is > copied to the newly allocated linear part. > > This is far from optimal as DMA coherent zone is slow on many systems > and memcpy() neutralizes the idea and benefits of the header split. Do you have data showing this? The assumption for the current model is that the headers will be touched shortly after, so the copy just primes the cache. The single coherently allocated region for all headers reduces IOTLB pressure. It is possible that the alternative model is faster. But that is not trivially obvious. I think patches like this can stand on their own. Probably best to leave them out of the dependency series to enable XDP and AF_XDP. > Instead, use libie to create page_pools for the header buffers, allocate > them dynamically and then build an skb via napi_build_skb() around them > with no memory copy. With one exception... > When you enable header split, you except you'll always have a separate > header buffer, so that you could reserve headroom and tailroom only > there and then use full buffers for the data. For example, this is how > TCP zerocopy works -- you have to have the payload aligned to PAGE_SIZE. > The current hardware running idpf does *not* guarantee that you'll > always have headers placed separately. For example, on my setup, even > ICMP packets are written as one piece to the data buffers. You can't > build a valid skb around a data buffer in this case. > To not complicate things and not lose TCP zerocopy etc., when such thing > happens, use the empty header buffer and pull either full frame (if it's > short) or the Ethernet header there and build an skb around it. GRO > layer will pull more from the data buffer later. This W/A will hopefully > be removed one day. > > Signed-off-by: Alexander Lobakin <aleksander.lobakin@...el.com>
Powered by blists - more mailing lists