[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Sun, 10 Nov 2013 21:55:26 -0800
From: Eric Dumazet <eric.dumazet@...il.com>
To: Sujith Manoharan <sujith@...jith.org>
Cc: Eric Dumazet <edumazet@...gle.com>, netdev@...r.kernel.org
Subject: Re: TCP performance regression
On Mon, 2013-11-11 at 11:00 +0530, Sujith Manoharan wrote:
> Hi,
>
> The commit, "tcp: TSQ can use a dynamic limit" causes a large
> performance drop in TCP transmission with the wireless driver ath9k.
>
> With a 2-stream card (AR9462), the usual throughput is around 195 Mbps.
> But, with this commit, it drops to ~125 Mbps, occasionally reaching 130.
>
> If the commit is reverted, performance is normal again and I can get
> 190+ Mbps. Apparently, ath10k is also affected and a 250 Mbps drop
> is seen (from an original 740 Mbps).
I am afraid this commit shows bugs in various network drivers.
All drivers doing TX completion using a timer are buggy.
Random example : drivers/net/ethernet/marvell/mvneta.c
#define MVNETA_TX_DONE_TIMER_PERIOD 10
/* Trigger tx done timer in MVNETA_TX_DONE_TIMER_PERIOD msecs */
static void mvneta_add_tx_done_timer(struct mvneta_port *pp)
{
if (test_and_set_bit(MVNETA_F_TX_DONE_TIMER_BIT, &pp->flags) == 0) {
pp->tx_done_timer.expires = jiffies +
msecs_to_jiffies(MVNETA_TX_DONE_TIMER_PERIOD);
add_timer(&pp->tx_done_timer);
}
}
Holding skb 10 ms before TX completion is totally wrong and must be fixed.
If really NIC is not able to trigger an interrupt after TX completion, then
driver should call skb_orphan() in its ndo_start_xmit()
--
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