[Cbe-oss-dev] [RFC 4/9] AXON - Ethernet over PCI-E driver
benh at kernel.crashing.org
Thu Dec 28 13:45:31 EST 2006
On Thu, 2006-12-28 at 03:20 +0100, Arnd Bergmann wrote:
> On Thursday 28 December 2006 00:42, Benjamin Herrenschmidt wrote:
> > > So for each SKB the receiver gets 2 interrupts (+ payload) and the emitter get
> > > one. It might not sound like the most efficient protocol but we do need some
> > > messagery to synchronize resource usage and SKB management.
> > It's in fact extremely inefficient :-)
> > You should really implement that differently, with 2 rings of
> > descriptors, like normal hardware does, and proper interrupt mitigation
> > so you can set a threshold on interrupt emission on each side.
> It depends of course on whether it is a bottleneck or not. If this is used
> only for slow data like the occasional DNS query or a heartbeat, it's
> probably not worth doing something more efficient.
> Also, for virtual devices like this, the optimal solution is somewhat
> different than for hardware driven devices. E.g. you can't easily set
> up a timer in the range of a few microseconds to delay your interrupt.
No, but you still want one-direction only transfer rings that can be
entirely populated / fetched without an interrupt, etc...
> On the other hand, you have the advantage that you can tell exactly
> what state the other side is in, so you can implement a much better
> flow control than you could over an ethernet wire. Since you can tell
> whether the receiver is waiting for packets or not, the sender can
> block in user space when the receiver is too busy to accept more
> Also, you can have a huge virtual transfer buffer when you DMA directly
> between the sender and the receiver SKB queue.
More information about the cbe-oss-dev