qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 0/13] Add generic packet buffering API


From: Mark McLoughlin
Subject: Re: [Qemu-devel] [PATCH 0/13] Add generic packet buffering API
Date: Tue, 19 May 2009 11:33:29 +0100

On Tue, 2009-05-19 at 13:18 +0300, Avi Kivity wrote:
> Mark McLoughlin wrote:
> > Hi,
> >         This patch series works towards two[1] goals:
> >
> >   1) Merging the code in qemu-kvm which drains the tap file descriptor
> >      when it is readable and buffers a packet if it fails to add it to
> >      the NIC receive queue
> >
> >   2) Using the new TAP_SETSNDBUF ioctl() to put a limit on the number
> >      of in-flight packets allowed on a tap device; in this case, if a
> >      NIC pops a packet from its transmit queue, we need to be able to
> >      buffer said packet if the tap queue is full
> >   
> 
> Isn't it better instead to unpop the buffer?  The NIC tx ring already is 
> a buffer, no need to add another one on top.
> 
> It will need adjustments to the device models; for example we'll need 
> virtqueue_pop_commit() after we're certain the tap had enough room for 
> our packet and virtqueue_pop_cancel() (to unmap the buffers) if we don't.

Yep, it's possible with virtio. However, you can't unpop the buffer from
a tap file descriptor or socket.

The alternative in those cases is to implement buffering for each, or to
always check the receiving side has buffers available before popping. I
choose this option because checking in advance for each packet seems
expensive - i.e. a syscall for tap/socket or a trawl through the ring
for virtio.

Cheers,
Mark.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]