From: Eric Dumazet <eric.dumazet@gmail.com>
To: David Miller <davem@davemloft.net>
Cc: netdev@vger.kernel.org, herbert@gondor.apana.org.au
Subject: Re: [PATCH 2/2] ipv4: Initialize on-stack cork more efficiently.
Date: Sat, 07 May 2011 07:11:44 +0200 [thread overview]
Message-ID: <1304745104.2821.590.camel@edumazet-laptop> (raw)
In-Reply-To: <1304721317.2821.156.camel@edumazet-laptop>
Le samedi 07 mai 2011 à 00:35 +0200, Eric Dumazet a écrit :
> Le vendredi 06 mai 2011 à 15:26 -0700, David Miller a écrit :
> > ip_setup_cork() explicitly initializes every member of
> > inet_cork except flags, addr, and opt. So we can simply
> > set those three members to zero instead of using a
> > memset() via an empty struct assignment.
> >
> > Signed-off-by: David S. Miller <davem@davemloft.net>
> > ---
> > net/ipv4/ip_output.c | 5 ++++-
> > 1 files changed, 4 insertions(+), 1 deletions(-)
> >
> > diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
> > index eb0647a..5f5fe4f 100644
> > --- a/net/ipv4/ip_output.c
> > +++ b/net/ipv4/ip_output.c
> > @@ -1408,7 +1408,7 @@ struct sk_buff *ip_make_skb(struct sock *sk,
> > struct ipcm_cookie *ipc, struct rtable **rtp,
> > unsigned int flags)
> > {
> > - struct inet_cork cork = {};
> > + struct inet_cork cork;
> > struct sk_buff_head queue;
> > int err;
> >
> > @@ -1417,6 +1417,9 @@ struct sk_buff *ip_make_skb(struct sock *sk,
> >
> > __skb_queue_head_init(&queue);
> >
> > + cork.flags = 0;
> > + cork.addr = 0;
> > + cork.opt = 0;
> > err = ip_setup_cork(sk, &cork, ipc, rtp);
> > if (err)
> > return ERR_PTR(err);
>
> Very nice, thanks for finishing this stuff :)
>
> Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
>
By the way, when I spotted this "struct inet_cork cork = {};" to be
optimized, my idea was to add yet another case of fastpath to UDP send :
For small datagrams (most UDP uses : RTP, DNS...),
perform the user->kernel copy before route lookup, so that we can
perform an RCU route lookup. This would tremendously speedup UDP, since
the refcount handling is our last hot spot (not counting qdisc if
present)
PerfTop: 16142 irqs/sec kernel:97.5% exact: 0.0% [1000Hz cycles], (all, 16 CPUs)
-----------------------------------------------------------------------------------------------------------
samples pcnt function DSO
_______ _____ ________________________ ______________________
16735.00 24.2% __ip_route_output_key vmlinux
9706.00 14.1% dst_release vmlinux
6754.00 9.8% __ip_make_skb vmlinux
5737.00 8.3% udp_send_skb vmlinux
5384.00 7.8% ip_finish_output vmlinux
3578.00 5.2% udp_sendmsg vmlinux
1435.00 2.1% copy_user_generic_string vmlinux
1358.00 2.0% ia32_sysenter_target vmlinux
1095.00 1.6% __ip_append_data vmlinux
832.00 1.2% kfree vmlinux
794.00 1.2% __memset vmlinux
677.00 1.0% fget_light vmlinux
641.00 0.9% sock_wfree vmlinux
637.00 0.9% dev_queue_xmit vmlinux
next prev parent reply other threads:[~2011-05-07 5:11 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-06 22:26 [PATCH 2/2] ipv4: Initialize on-stack cork more efficiently David Miller
2011-05-06 22:35 ` Eric Dumazet
2011-05-06 22:37 ` David Miller
2011-05-07 5:11 ` Eric Dumazet [this message]
2011-05-07 5:21 ` David Miller
2011-05-06 22:44 ` Joe Perches
2011-05-06 22:59 ` David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1304745104.2821.590.camel@edumazet-laptop \
--to=eric.dumazet@gmail.com \
--cc=davem@davemloft.net \
--cc=herbert@gondor.apana.org.au \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox