All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Davies <jonathan.davies@citrix.com>
To: Eric Dumazet <eric.dumazet@gmail.com>, Wei Liu <wei.liu2@citrix.com>
Cc: <netdev@vger.kernel.org>, <xen-devel@lists.xenproject.org>,
	"Konrad Rzeszutek Wilk" <konrad.wilk@oracle.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	David Vrabel <david.vrabel@citrix.com>
Subject: Re: [PATCH] xen-netfront: transmit fully GSO-sized packets
Date: Thu, 26 Mar 2015 15:08:58 +0000	[thread overview]
Message-ID: <5514210A.6020808@citrix.com> (raw)
In-Reply-To: <1427371537.25985.136.camel@edumazet-glaptop2.roam.corp.google.com>


On 26/03/15 12:05, Eric Dumazet wrote:
> On Thu, 2015-03-26 at 11:13 +0000, Jonathan Davies wrote:
>> xen-netfront limits transmitted skbs to be at most 44 segments in size. However,
>> GSO permits up to 65536 bytes, which means a maximum of 45 segments of 1448
>> bytes each. This slight reduction in the size of packets means a slight loss in
>> efficiency.
>>
>> Since c/s 9ecd1a75d, xen-netfront sets gso_max_size to
>>      XEN_NETIF_MAX_TX_SIZE - MAX_TCP_HEADER,
>> where XEN_NETIF_MAX_TX_SIZE is 65535 bytes.
>>
>> The calculation used by tcp_tso_autosize (and also tcp_xmit_size_goal since c/s
>> 6c09fa09d) in determining when to split an skb into two is
>>      sk->sk_gso_max_size - 1 - MAX_TCP_HEADER.
>>
>> So the maximum permitted size of an skb is calculated to be
>>      (XEN_NETIF_MAX_TX_SIZE - MAX_TCP_HEADER) - 1 - MAX_TCP_HEADER.
>>
>> Intuitively, this looks like the wrong formula -- we don't need two TCP headers.
>> Instead, there is no need to deviate from the default gso_max_size of 65536 as
>> this already accommodates the size of the header.
>>
>> Currently, the largest skb transmitted by netfront is 63712 bytes (44 segments
>> of 1448 bytes each), as observed via tcpdump. This patch makes netfront send
>> skbs of up to 65160 bytes (45 segments of 1448 bytes each).
>>
>> Fixes: 9ecd1a75d977 ("xen-netfront: reduce gso_max_size to account for max TCP header")
>> Signed-off-by: Jonathan Davies <jonathan.davies@citrix.com>
>> ---
>>   drivers/net/xen-netfront.c | 2 --
>>   1 file changed, 2 deletions(-)
>>
>> diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
>> index e9b960f..fb6e978 100644
>> --- a/drivers/net/xen-netfront.c
>> +++ b/drivers/net/xen-netfront.c
>> @@ -1279,8 +1279,6 @@ static struct net_device *xennet_create_dev(struct xenbus_device *dev)
>>   	netdev->ethtool_ops = &xennet_ethtool_ops;
>>   	SET_NETDEV_DEV(netdev, &dev->dev);
>>
>> -	netif_set_gso_max_size(netdev, XEN_NETIF_MAX_TX_SIZE - MAX_TCP_HEADER);
>> -
>>   	np->netdev = netdev;
>>
>>   	netif_carrier_off(netdev);
>
> Hmm, this partially reverts commit
> 9ecd1a75d977e2e8c48139c7d3efed183f898d94
>
>
>
> Why xennet_change_mtu() is not changed by your patch ?

I think you are right: the mtu calculation suffers from the same 
problem. I believe the value of mtu relates to the size of the whole 
packet, including the header (which is why the value of dev->mtu is 
normally 1500 rather than 1448).

Wei, as the author of commit 9ecd1a75d977 ("xen-netfront: reduce 
gso_max_size to account for max TCP header"), do you agree that the max 
mtu formula should not need to subtract MAX_TCP_HEADER?

Regards,
Jonathan

  parent reply	other threads:[~2015-03-26 15:12 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-26 11:13 [PATCH] xen-netfront: transmit fully GSO-sized packets Jonathan Davies
2015-03-26 12:05 ` Eric Dumazet
2015-03-26 12:05 ` Eric Dumazet
2015-03-26 15:08   ` Jonathan Davies
2015-03-26 15:08   ` Jonathan Davies [this message]
2015-03-30 13:46     ` Wei Liu
2015-03-31  9:16       ` Jonathan Davies
2015-03-31  9:16       ` Jonathan Davies
2015-03-30 13:46     ` Wei Liu
2015-03-26 14:14 ` Sergei Shtylyov
2015-03-26 14:14 ` Sergei Shtylyov
  -- strict thread matches above, loose matches on Subject: below --
2015-03-26 11:13 Jonathan Davies

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=5514210A.6020808@citrix.com \
    --to=jonathan.davies@citrix.com \
    --cc=boris.ostrovsky@oracle.com \
    --cc=david.vrabel@citrix.com \
    --cc=eric.dumazet@gmail.com \
    --cc=konrad.wilk@oracle.com \
    --cc=netdev@vger.kernel.org \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xenproject.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.