All of lore.kernel.org
 help / color / mirror / Atom feed
From: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
To: Johann Baudy <johaahn@gmail.com>
Cc: netdev@vger.kernel.org
Subject: Re: Fwd: Packet mmap: TX RING and zero copy
Date: Mon, 8 Sep 2008 15:26:29 +0400	[thread overview]
Message-ID: <20080908112629.GA26488@2ka.mipt.ru> (raw)
In-Reply-To: <7e0dd21a0809080321p6b9e2bc7m73e2cdd57a8d58b8@mail.gmail.com>

Hi Johann.

On Mon, Sep 08, 2008 at 12:21:16PM +0200, Johann Baudy (johaahn@gmail.com) wrote:
> I've made a test with below patch (with and without UDP fragmentation):
> 
> without UDP fragmentation, packet size are almost always equal to
> PAGE_SIZE due to my mtu limit (2*PACKET_SIZE > mtu).
> with UDP fragmentation, kernel is sending multiple fragmented packets
> of 61448Kbytes.
> 
> Unfortunately, in both case, bitrate is still 15-20 MB/s :(
> According to wireshark, kernel sends 60KB over 9 packets, nothing
> during ~5ms, 60KB and so on. strange ... kernel seems to spend its
> time during push(). Is there a blocking call somewhere ?

Are you sure that it is udp_push_pending_frames() and not some splice
waiting?

> Thanks in advance,
> Johann
> 
> --- a/net/ipv4/udp.c
> +++ b/net/ipv4/udp.c
> 
> @@ -743,7 +743,28 @@ int udp_sendpage(struct sock *sk, struct page
> *page, int offset,
>                  size_t size, int flags)
>  {
>         struct udp_sock *up = udp_sk(sk);
> +       struct inet_sock *inet = inet_sk(sk);
>         int ret;
> +       int mtu = inet->cork.fragsize;
> +       int fragheaderlen;
> +       struct ip_options *opt = NULL;
> +
> +       if (inet->cork.flags & IPCORK_OPT)
> +               opt = inet->cork.opt;

This has to be checked under socket lock.

> +       fragheaderlen = sizeof(struct iphdr) + (opt ? opt->optlen : 0);
> +
> +       // With UDP fragmentation
> +       if (inet->cork.length + size >= 0xFFFF - fragheaderlen) {
> +       // Without UDP fragmentation
> +       //  if( (inet->cork.length + size) > mtu) {

This also should be protected. Two threads can simultaneously check
inet->cork.length and both suceed.

> +               lock_sock(sk);
> +               ret = udp_push_pending_frames(sk);
> +               release_sock(sk);
> +               if (ret) {
> +                       return 0;
> +               }
> +       }

-- 
	Evgeniy Polyakov

  reply	other threads:[~2008-09-08 11:27 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-09-02 18:27 Packet mmap: TX RING and zero copy Johann Baudy
2008-09-02 19:46 ` Evgeniy Polyakov
2008-09-03  7:56   ` Johann Baudy
2008-09-03 10:38     ` Johann Baudy
2008-09-03 11:06       ` David Miller
2008-09-03 13:05         ` Johann Baudy
2008-09-03 13:27           ` Evgeniy Polyakov
2008-09-03 14:57             ` Christoph Lameter
2008-09-03 15:00             ` Johann Baudy
2008-09-03 15:13               ` Evgeniy Polyakov
2008-09-03 15:58                 ` Johann Baudy
2008-09-03 16:43                   ` Evgeniy Polyakov
2008-09-03 20:30                     ` Johann Baudy
2008-09-03 22:03                       ` Evgeniy Polyakov
2008-09-04 14:44                         ` Johann Baudy
2008-09-05  7:17                           ` Evgeniy Polyakov
     [not found]                             ` <7e0dd21a0809050216r65b8f08fm1ad0630790a13a54@mail.gmail.com>
2008-09-05  9:17                               ` Fwd: " Johann Baudy
2008-09-05 11:31                                 ` Evgeniy Polyakov
2008-09-05 12:44                                   ` Johann Baudy
2008-09-05 13:16                                     ` Evgeniy Polyakov
2008-09-05 13:29                                       ` Johann Baudy
2008-09-05 13:37                                         ` Evgeniy Polyakov
2008-09-05 13:55                                           ` Johann Baudy
2008-09-05 14:19                                             ` Evgeniy Polyakov
2008-09-05 14:45                                               ` Johann Baudy
2008-09-05 14:59                                                 ` Evgeniy Polyakov
2008-09-05 15:30                                                   ` Johann Baudy
2008-09-05 15:38                                                     ` Evgeniy Polyakov
2008-09-05 16:01                                                       ` Johann Baudy
2008-09-05 16:34                                                         ` Evgeniy Polyakov
2008-09-08 10:21                                                           ` Johann Baudy
2008-09-08 11:26                                                             ` Evgeniy Polyakov [this message]
2008-09-08 13:01                                                               ` Johann Baudy
2008-09-08 15:28                                                                 ` Evgeniy Polyakov
2008-09-08 15:38                                                                   ` Evgeniy Polyakov
2008-09-09 23:11                                                                     ` Johann Baudy
2008-09-10  6:09                                                                       ` Evgeniy Polyakov
2008-09-05 10:28 ` Robert Iakobashvili
2008-09-05 13:06   ` Johann Baudy

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=20080908112629.GA26488@2ka.mipt.ru \
    --to=johnpol@2ka.mipt.ru \
    --cc=johaahn@gmail.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.