Rusty Russell wrote:
> We force notification when the ring is full, even if the host has
> indicated it doesn't want to know.  This seemed like a good idea at
> the time: if we fill the transmit ring, we should tell the host
> immediately.
>
> Unfortunately this logic also applies to the receiving ring, which is
> refilled constantly.  We should introduce real notification thesholds
> to replace this logic.  Meanwhile, removing the logic altogether breaks
> the heuristics which KVM uses, so we use a hack: only notify if there are
> outgoing parts of the new buffer.
>
> It even makes a difference with lguest's crappy network implementation:
>       1GB guest->host before: 30.0844
>       1GB guest->host after: 27.6167
>   

A little ugly, but no more performance regression in KVM, so

Acked-by: Anthony Liguori <[EMAIL PROTECTED]>

Regards,

Anthony Liguori

> Signed-off-by: Rusty Russell <[EMAIL PROTECTED]>
>
> diff -r 89bf4894cc36 drivers/virtio/virtio_ring.c
> --- a/drivers/virtio/virtio_ring.c    Mon Jun 16 14:31:30 2008 +1000
> +++ b/drivers/virtio/virtio_ring.c    Wed Jun 18 16:15:49 2008 +1000
> @@ -87,8 +87,11 @@ static int vring_add_buf(struct virtqueu
>       if (vq->num_free < out + in) {
>               pr_debug("Can't add buf len %i - avail = %i\n",
>                        out + in, vq->num_free);
> -             /* We notify *even if* VRING_USED_F_NO_NOTIFY is set here. */
> -             vq->notify(&vq->vq);
> +             /* FIXME: for historical reasons, we force a notify here if
> +              * there are outgoing parts to the buffer.  Presumably the
> +              * host should service the ring ASAP. */
> +             if (out)
> +                     vq->notify(&vq->vq);
>               END_USE(vq);
>               return -ENOSPC;
>       }
>   

_______________________________________________
Virtualization mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/virtualization

Reply via email to