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
| ||
|
Date: Sat, 20 Oct 2012 13:39:22 -0700 From: Alexander Duyck <alexander.duyck@...il.com> To: Eric Dumazet <eric.dumazet@...il.com> CC: Jeff Kirsher <jeffrey.t.kirsher@...el.com>, davem@...emloft.net, Alexander Duyck <alexander.h.duyck@...el.com>, netdev@...r.kernel.org, gospo@...hat.com, sassmann@...hat.com Subject: Re: [net-next 01/13] ixgbe: Add support for IPv6 and UDP to ixgbe_get_headlen On 10/20/2012 1:01 AM, Eric Dumazet wrote: > On Fri, 2012-10-19 at 23:25 -0700, Jeff Kirsher wrote: >> From: Alexander Duyck <alexander.h.duyck@...el.com> >> >> This change adds support for IPv6 and UDP to ixgbe_get_headlen. The >> advantage to this is that we can now handle ipv4/UDP, ipv6/TCP, and >> ipv6/UDP with a single memcpy instead of having to do them in multiple >> pskb_may_pull calls. >> >> A quick bit of testing shows that we increase throughput for a single >> session of netperf from 8800Mpbs to about 9300Mpbs in the case of ipv6/TCP. >> As such overall ipv6 performance should improve with this change. >> >> Signed-off-by: Alexander Duyck <alexander.h.duyck@...el.com> >> Tested-by: Stephen Ko <stephen.s.ko@...el.com> >> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@...el.com> >> --- >> drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 15 ++++++++++++++- >> 1 file changed, 14 insertions(+), 1 deletion(-) > Thats pretty interesting. > > Why this work is not done generically, so that all drivers can have > benefit of it ? > > Even a driver not using fragments could have benefit, because we could > prefetch() so that GRO stack is faster (no stall to get the last 2 bytes > of a TCP header when timestamps are used) > > Thanks The ixgbe_get_headlen function originally was written to handle the case where we were doing the hardware LRO/RSC feature but we weren't setting gso_size. We were using it to get the size of the header so we could determine the average payload size of the frame. When we switched over to page based receive the function came along with it and had actually prevented a performance regression for IPv4/TCP which this patch is fixing for the other supported protocols. The main idea of this code is now to emulate what our hardware was doing in determining the length of the header when we had header-data split enabled. I hadn't really thought of any way it could be used in a generic sense. The function is essentially is built around several assumptions that only apply to the igb/ixgbe case such as the fact that the entire block being linear and the limitation of the protocols so that they match up with what we used to do for header-data split. That being said, if there is a way for you to use it in the generic case feel free to copy the ixgbe version, rename it, and export it for use. The key bit for me is that I just need to be able to get the header length before calling eth_type_trans as I only want to do one memcpy for the entire header. Thanks, Alex -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists