[vortex-bug] Tx int. mitigation
Donald Becker
becker@scyld.com
Thu, 14 Dec 2000 19:36:36 -0500 (EST)
On Thu, 14 Dec 2000, Bogdan Costescu wrote:
> On Thu, 14 Dec 2000, Donald Becker wrote:
>
> > You should be calculating the Tx gap the other way.
> > It only takes (10 minimum sized packets at 100Mbps) about 100usec to empty
> > the Tx queue.
> > You will wait until the next timer tick to refill.
>
> No! You will see that the Tx ring is full when trying to re-fill from
> start_xmit() and go to step 2 of Giuseppe's scheme.
The above scenario is where the Tx ring is full, and dev->tbusy is set.
> Freeing the Tx ring is done in two places:
> - in start_xmit() if a packet comes fast enough
> - in ISR if no packet came and the hardware timer expired
Here is the issue: manipulating the timer is very expensive.
And waiting until the queue is full to set the timer means that you might
have 9 already transmitted skbuffs sitting stagnant in the queue preventing
retransmission.
> Exactly, which means that the upper layer will call start_xmit() again and
> you can free the tail of the queue at that moment.
But the upper layer won't call it with dev->tbusy set.
Donald Becker becker@scyld.com
Scyld Computing Corporation http://www.scyld.com
410 Severn Ave. Suite 210 Second Generation Beowulf Clusters
Annapolis MD 21403 410-990-9993