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: Tue, 19 Jun 2012 18:49:04 -0700 From: Alexander Duyck <alexander.duyck@...il.com> To: Alexander Duyck <alexander.h.duyck@...el.com> CC: netdev@...r.kernel.org, davem@...emloft.net, jeffrey.t.kirsher@...el.com, Eric Dumazet <edumazet@...gle.com> Subject: Re: [PATCH] net: Update netdev_alloc_frag to work more efficiently with TCP and GRO On 6/19/2012 5:43 PM, Alexander Duyck wrote: > This patch is meant to help improve system performance when > netdev_alloc_frag is used in scenarios in which buffers are short lived. > This is accomplished by allowing the page offset to be reset in the event > that the page count is 1. I also reordered the direction in which we give > out sections of the page so that we start at the end of the page and end at > the start. The main motivation being that I preferred to have offset > represent the amount of page remaining to be used. > > My primary test case was using ixgbe in combination with TCP. With this > patch applied I saw CPU utilization drop from 3.4% to 3.0% for a single > thread of netperf receiving a TCP stream via ixgbe. > > I also tested several scenarios in which the page reuse would not be > possible such as UDP flows and routing. In both of these scenarios I saw > no noticeable performance degradation compared to the kernel without this > patch. > > Cc: Eric Dumazet<edumazet@...gle.com> > Signed-off-by: Alexander Duyck<alexander.h.duyck@...el.com> > --- > > net/core/skbuff.c | 15 +++++++++++---- > 1 files changed, 11 insertions(+), 4 deletions(-) > > diff --git a/net/core/skbuff.c b/net/core/skbuff.c > index 5b21522..eb3853c 100644 > --- a/net/core/skbuff.c > +++ b/net/core/skbuff.c > @@ -317,15 +317,22 @@ void *netdev_alloc_frag(unsigned int fragsz) > if (unlikely(!nc->page)) { > refill: > nc->page = alloc_page(GFP_ATOMIC | __GFP_COLD); > - nc->offset = 0; > } > if (likely(nc->page)) { > - if (nc->offset + fragsz> PAGE_SIZE) { > + unsigned int offset = PAGE_SIZE; > + > + if (page_count(nc->page) != 1) > + offset = nc->offset; > + > + if (offset< fragsz) { > put_page(nc->page); > goto refill; > } > - data = page_address(nc->page) + nc->offset; > - nc->offset += fragsz; > + > + offset -= fragsz; > + nc->offset = offset; > + > + data = page_address(nc->page) + offset; > get_page(nc->page); > } > local_irq_restore(flags); > > -- > 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 It looks like I forgot to add "--auto" to the command line when I sent this out via stg mail so I am just adding Eric to the CC list on this reply. Sorry for the extra noise. 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