lkml.org 
[lkml]   [2012]   [May]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [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


    \
     
     \ /
      Last update: 2012-05-17 05:41    [W:3.494 / U:0.348 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site