]> git.proxmox.com Git - mirror_qemu.git/commit
vhost: don't set vring call if no vector
authorJason Wang <jasowang@redhat.com>
Mon, 1 Aug 2016 08:07:58 +0000 (16:07 +0800)
committerMichael S. Tsirkin <mst@redhat.com>
Fri, 9 Sep 2016 17:58:34 +0000 (20:58 +0300)
commit96a3d98d2cdbd897ff5ab33427aa4cfb94077665
treede0ccd907485b084a285fb3ee33494cf25fe270f
parent3eff376977c457475272a34d243dac6af7cd6a47
vhost: don't set vring call if no vector

We used to set vring call fd unconditionally even if guest driver does
not use MSIX for this vritqueue at all. This will cause lots of
unnecessary userspace access and other checks for drivers does not use
interrupt at all (e.g virtio-net pmd). So check and clean vring call
fd if guest does not use any vector for this virtqueue at
all.

Perf diffs (on rx) shows lots of cpus wasted on vhost_signal() were saved:

#
    28.12%  -27.82%  [vhost]           [k] vhost_signal
    14.44%   -1.69%  [kernel.vmlinux]  [k] copy_user_generic_string
     7.05%   +1.53%  [kernel.vmlinux]  [k] __free_page_frag
     6.51%   +5.53%  [vhost]           [k] vhost_get_vq_desc
...

Pktgen tests shows 15.8% improvement on rx pps and 6.5% on tx pps.

Before: RX 2.08Mpps TX 1.35Mpps
After:  RX 2.41Mpps TX 1.44Mpps

Signed-off-by: Jason Wang <jasowang@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
hw/virtio/vhost.c