[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20140929.162950.1960056644564225055.davem@davemloft.net>
Date: Mon, 29 Sep 2014 16:29:50 -0400 (EDT)
From: David Miller <davem@...emloft.net>
To: david.stevens@...cle.com
Cc: netdev@...r.kernel.org, sowmini.varadhan@...cle.com,
raghuram.kothakota@...cle.com
Subject: Re: [PATCHv8 net-next 2/4] sunvnet: make transmit path zero-copy
in the kernel
From: David L Stevens <david.stevens@...cle.com>
Date: Mon, 29 Sep 2014 15:54:10 -0400
> This patch removes pre-allocated transmit buffers and instead directly maps
> pending packets on demand. This saves O(n^2) maximum-sized transmit buffers,
> for n hosts on a vswitch, as well as a copy to those buffers.
>
> Single-stream TCP throughput linux-solaris dropped ~5% for 1500-byte MTU,
> but linux-linux at 1500-bytes increased ~20%.
>
> Signed-off-by: David L Stevens <david.stevens@...cle.com>
It doesn't work to liberate SKBs in the TX ring purely from the
->ndo_start_xmit() method.
All SKBs given to a device must be liberated in a finite, short,
amount of time.
This means that there must be an event which indicates TX completion
(either precisely, or at some small finite amount of time afterwards)
which will trigger kfree_skb().
Otherwise you can get a set of TX skbs in the TX queue, then if the
network goes quiet they are all stuck there indefinitely.
These SKBS hold onto resources such as sockets, netfilter state, etc.
Even if you apply a sledgehammer and skb_orphan() these packets, that
doesn't release the netfilter and other pieces of state.
--
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