On Fri, Jan 29, 2016 at 1:33 PM, Eric Dumazet <eric.duma...@gmail.com> wrote: > On Fri, 2016-01-29 at 13:16 -0800, Alexander Duyck wrote: > >> It has to be something recent. I know back when I wrote the code I >> tested it on a few different architectures and had to add a few bits >> in __skb_get_poff so that it would read doff as a u8 instead of >> bitfield in a u32. >> >> Looking at the code it seems like this should be an easy fix. Just >> swap the two lines that acquire and test the flow label with the check >> for dissector_uses_key(... _KEY_FLOW_LABEL). Then ixgbe will stop >> trying to grab flow labels. > > Note that if we properly align headers, we also align TCP/UDP payload. > > Meaning that copying data in recvmsg() is likely faster in some cpus. > (The ones having NET_IP_ALIGN set to 2 presumably)
It also means DMA becomes dramatically slower as it introduces a partial write access for the start of every frame. It is why we had set NET_IP_ALIGN to 0 on x86 since DMA was becoming more expensive when unaligned then reading IP unaligned headers. The gain on recvmsg would probably be minimal. The only time I have seen any significant speed-up for copying is if you can get both ends aligned to something like 16B. - Alex