netdev
[Top] [All Lists]

Re: [PATCH] acenic - don't spin in hard_start_xmit when ring fills

To: "David S. Miller" <davem@xxxxxxxxxxxxx>
Subject: Re: [PATCH] acenic - don't spin in hard_start_xmit when ring fills
From: Stephen Hemminger <shemminger@xxxxxxxx>
Date: Thu, 16 Sep 2004 16:42:06 -0700
Cc: jes@xxxxxxxxxxxxxxxxxx, jgarzik@xxxxxxxxx, netdev@xxxxxxxxxxx
In-reply-to: <20040916162250.5b7cfa85.davem@xxxxxxxxxxxxx>
Organization: Open Source Development Lab
References: <20040916161753.37254cbd@xxxxxxxxxxxxxxxxxxxxx> <20040916162250.5b7cfa85.davem@xxxxxxxxxxxxx>
Sender: netdev-bounce@xxxxxxxxxxx
On Thu, 16 Sep 2004 16:22:50 -0700
"David S. Miller" <davem@xxxxxxxxxxxxx> wrote:

> On Thu, 16 Sep 2004 16:17:53 -0700
> Stephen Hemminger <shemminger@xxxxxxxx> wrote:
> 
> > Running performance tests on the acenic, I noticed that the driver
> > spins when the transmit ring gets full.  This might have been okay when
> > CPU's were slower, but it isn't the right thing to do. Better to
> > return TX_BUSY and let network scheduling handle it.
> 
> Acenic does completely lockless processing, are you sure you didn't
> add a race or bug?

NO, the bus just isn't fast enough to keep up with the number of small
packets I am shoving at it.

You got TX_LOCKED and TX_BUSY confused. The problem is drivers that
don't check to see if the last packet sent fills the ring and stop
themselves.

>       o NETDEV_TX_BUSY Cannot transmit packet, try later 
>         Usually a bug, means queue start/stop flow control is broken in
>         the driver. Note: the driver must NOT put the skb in its DMA ring.

<Prev in Thread] Current Thread [Next in Thread>