Messages in this thread | | | Date | Thu, 17 May 2012 10:50:34 +0800 | From | Jason Wang <> | Subject | Re: [V2 PATCH 9/9] vhost: zerocopy: poll vq in zerocopy callback |
| |
On 05/17/2012 01:32 AM, Shirley Ma wrote: > On Wed, 2012-05-16 at 18:14 +0300, Michael S. Tsirkin wrote: >> On Wed, May 16, 2012 at 08:10:27AM -0700, Shirley Ma wrote: >>> On Wed, 2012-05-16 at 10:58 +0800, Jason Wang wrote: >>>>>> drivers/vhost/vhost.c | 1 + >>>>>> 1 files changed, 1 insertions(+), 0 deletions(-) >>>>>> >>>>>> diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c >>>>>> index 947f00d..7b75fdf 100644 >>>>>> --- a/drivers/vhost/vhost.c >>>>>> +++ b/drivers/vhost/vhost.c >>>>>> @@ -1604,6 +1604,7 @@ void vhost_zerocopy_callback(void *arg) >>>>>> struct vhost_ubuf_ref *ubufs = ubuf->arg; >>>>>> struct vhost_virtqueue *vq = ubufs->vq; >>>>>> >>>>>> + vhost_poll_queue(&vq->poll); >>>>>> /* set len = 1 to mark this desc buffers done DMA */ >>>>>> vq->heads[ubuf->desc].len = VHOST_DMA_DONE_LEN; >>>>>> kref_put(&ubufs->kref, vhost_zerocopy_done_signal); >>>>> Doing so, we might have redundant vhost_poll_queue(). Do you >> know in >>>>> which scenario there might be missing of adding and signaling >> during >>>>> zerocopy? >>>> Yes, as we only do signaling and adding during tx work, if there's >> no >>>> tx >>>> work when the skb were sent, we may lose the opportunity to let >> guest >>>> know about the completion. It's easy to be reproduced with netperf >>>> test. >>> The reason which host signals guest is to free guest tx buffers, if >>> there is no tx work, then it's not necessary to signal the guest >> unless >>> guest runs out of memory. The pending buffers will be released >>> virtio_net device gone.
Looks like we only free the skbs in .ndo_start_xmit(). >>> >>> What's the behavior of netperf test when you hit this situation? >>> >>> Thanks >>> Shirley >> IIRC guest networking seems to be lost. > It seems vhost_enable_notify is missing in somewhere else? > > Thanks > Shirley >
The problem is we may stop the tx queue when there no enough capacity to place packets, at this moment we depends on the tx interrupt to re-enable the tx queue. So if we didn't poll the vhost during callback, guest may lose the tx interrupt to re-enable the tx queue which could stall the whole tx queue.
Thanks
| |