Re: [PATCH v6 net-next 13/13] mlx5: support BIG TCP packets
From: Eric Dumazet <edumazet@google.com>
Date: 2022-05-13 13:06:07
On Thu, May 12, 2022 at 10:49 PM Saeed Mahameed [off-list ref] wrote:
On 12 May 21:34, Eric Dumazet wrote:quoted
On Thu, May 12, 2022 at 9:29 PM Saeed Mahameed [off-list ref] wrote:quoted
On 12 May 11:02, Paolo Abeni wrote:quoted
On Thu, 2022-05-12 at 01:40 -0700, Saeed Mahameed wrote:quoted
On 09 May 20:32, Eric Dumazet wrote:quoted
From: Coco Li <redacted> mlx5 supports LSOv2. IPv6 gro/tcp stacks insert a temporary Hop-by-Hop header with JUMBO TLV for big packets. We need to ignore/skip this HBH header when populating TX descriptor.Sorry i didn't go through all the documentations or previous discussions, please bare with me, so why not clear HBH just before calling the driver xmit ndo ?I guess this way is more efficient: the driver copies IP hdr and TCP hdr directly in the correct/final location into the tx descriptor, otherwise the caller would have to memmove L2/L3 just before the driver copies them again.quoted
memmove(sizeof(L2/L3)) is not that bad when done only every 64KB+. it's going to be hard to repeat this and maintain this across all drivers only to get this micro optimization that I doubt it will be even measurable.We prefer not changing skb->head, this would break tcpdump.in that case we can provide a helper to the drivers to call, just before they start processing the skb.quoted
Surely calling skb_cow_head() would incur a cost.Sure, but the benefit of this patch outweighs this cost by orders of magnitude, you pay an extra 0.1$ for a cleaner code, and you still get your 64K$ BIG TCP cash.quoted
As I suggested, we can respin the series without the mlx5 patch, this is totally fine for us, if we can avoid missing 5.19 train.To be clear, I am not nacking, Tariq already reviewed and gave his blessing, and i won't resist this patch on v6. I am Just suggesting an improvement to code readability and scalability to other drivers.
The problem is that skb_cow_head() can fail. Really we have thought about this already. A common helper for drivers is mostly unusable, you would have to pre-allocate a per TX-ring slot to store the headers. We would end up with adding complexity at queue creation/dismantle. We could do that later, because some NICs do not inline the headers in TX descriptor, but instead request one mapped buffer for the headers part only. BTW, I know Tariq already reviewed, the issue at hand is about CONFIG_FORTIFY which is blocking us. This is why I was considering not submitting mlx5 change until Kees Cook and others come up with a solution.