* [Qemu-devel] [PATCH] virtio-net: calculate proper msix vectors on init
@ 2014-02-21 5:00 Jason Wang
2014-02-21 8:50 ` Jason Wang
2014-02-23 6:34 ` Michael S. Tsirkin
0 siblings, 2 replies; 4+ messages in thread
From: Jason Wang @ 2014-02-21 5:00 UTC (permalink / raw)
To: aliguori, mst, qemu-devel; +Cc: Paolo Bonzini, Jason Wang
Currently, the default msix vectors for virtio-net-pci is 3 which is
obvious not suitable for multiqueue guest, so we depends on the user
or management tools to pass a correct vectors parameter. In fact, we
can simplifying this by calculate the number of vectors on init.
Consider we have N queues, the number of vectors needed is 2*N + 2
(plus one config interrupt and control vq). We didn't check whether or
not host support control vq because it was added unconditionally by
qemu to avoid breaking legacy guests such as Minix.
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
---
hw/virtio/virtio-pci.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
index 7b91841..1dec491 100644
--- a/hw/virtio/virtio-pci.c
+++ b/hw/virtio/virtio-pci.c
@@ -1416,7 +1416,8 @@ static const TypeInfo virtio_serial_pci_info = {
static Property virtio_net_properties[] = {
DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags,
VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, false),
- DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 3),
+ DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors,
+ DEV_NVECTORS_UNSPECIFIED),
DEFINE_VIRTIO_NET_FEATURES(VirtIOPCIProxy, host_features),
DEFINE_NIC_PROPERTIES(VirtIONetPCI, vdev.nic_conf),
DEFINE_VIRTIO_NET_PROPERTIES(VirtIONetPCI, vdev.net_conf),
@@ -1428,6 +1429,13 @@ static int virtio_net_pci_init(VirtIOPCIProxy *vpci_dev)
DeviceState *qdev = DEVICE(vpci_dev);
VirtIONetPCI *dev = VIRTIO_NET_PCI(vpci_dev);
DeviceState *vdev = DEVICE(&dev->vdev);
+ VirtIONet *net = VIRTIO_NET(&dev->vdev);
+
+ if (vpci_dev->nvectors == DEV_NVECTORS_UNSPECIFIED) {
+ vpci_dev->nvectors = 2 * MAX(net->nic_conf.queues, 1) + 2;
+ }
+
+ fprintf(stderr, "vectors is %d\n", vpci_dev->nvectors);
virtio_net_set_config_size(&dev->vdev, vpci_dev->host_features);
virtio_net_set_netclient_name(&dev->vdev, qdev->id,
--
1.8.3.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH] virtio-net: calculate proper msix vectors on init
2014-02-21 5:00 [Qemu-devel] [PATCH] virtio-net: calculate proper msix vectors on init Jason Wang
@ 2014-02-21 8:50 ` Jason Wang
2014-02-23 6:34 ` Michael S. Tsirkin
1 sibling, 0 replies; 4+ messages in thread
From: Jason Wang @ 2014-02-21 8:50 UTC (permalink / raw)
To: aliguori, mst, qemu-devel; +Cc: Paolo Bonzini, Jason Wang
On 02/21/2014 01:00 PM, Jason Wang wrote:
> Currently, the default msix vectors for virtio-net-pci is 3 which is
> obvious not suitable for multiqueue guest, so we depends on the user
> or management tools to pass a correct vectors parameter. In fact, we
> can simplifying this by calculate the number of vectors on init.
>
> Consider we have N queues, the number of vectors needed is 2*N + 2
> (plus one config interrupt and control vq). We didn't check whether or
> not host support control vq because it was added unconditionally by
> qemu to avoid breaking legacy guests such as Minix.
>
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: Michael S. Tsirkin <mst@redhat.com>
> Signed-off-by: Jason Wang <jasowang@redhat.com>
> ---
Unnecessary debug line was found, will send V2.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH] virtio-net: calculate proper msix vectors on init
2014-02-21 5:00 [Qemu-devel] [PATCH] virtio-net: calculate proper msix vectors on init Jason Wang
2014-02-21 8:50 ` Jason Wang
@ 2014-02-23 6:34 ` Michael S. Tsirkin
2014-02-24 4:58 ` Jason Wang
1 sibling, 1 reply; 4+ messages in thread
From: Michael S. Tsirkin @ 2014-02-23 6:34 UTC (permalink / raw)
To: Jason Wang; +Cc: Paolo Bonzini, qemu-devel, aliguori
On Fri, Feb 21, 2014 at 01:00:57PM +0800, Jason Wang wrote:
> Currently, the default msix vectors for virtio-net-pci is 3 which is
> obvious not suitable for multiqueue guest, so we depends on the user
> or management tools to pass a correct vectors parameter. In fact, we
> can simplifying this by calculate the number of vectors on init.
>
> Consider we have N queues, the number of vectors needed is 2*N + 2
> (plus one config interrupt and control vq). We didn't check whether or
> not host support control vq because it was added unconditionally by
> qemu to avoid breaking legacy guests such as Minix.
>
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: Michael S. Tsirkin <mst@redhat.com>
> Signed-off-by: Jason Wang <jasowang@redhat.com>
> ---
> hw/virtio/virtio-pci.c | 10 +++++++++-
> 1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
> index 7b91841..1dec491 100644
> --- a/hw/virtio/virtio-pci.c
> +++ b/hw/virtio/virtio-pci.c
> @@ -1416,7 +1416,8 @@ static const TypeInfo virtio_serial_pci_info = {
> static Property virtio_net_properties[] = {
> DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags,
> VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, false),
> - DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 3),
> + DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors,
> + DEV_NVECTORS_UNSPECIFIED),
> DEFINE_VIRTIO_NET_FEATURES(VirtIOPCIProxy, host_features),
> DEFINE_NIC_PROPERTIES(VirtIONetPCI, vdev.nic_conf),
> DEFINE_VIRTIO_NET_PROPERTIES(VirtIONetPCI, vdev.net_conf),
> @@ -1428,6 +1429,13 @@ static int virtio_net_pci_init(VirtIOPCIProxy *vpci_dev)
> DeviceState *qdev = DEVICE(vpci_dev);
> VirtIONetPCI *dev = VIRTIO_NET_PCI(vpci_dev);
> DeviceState *vdev = DEVICE(&dev->vdev);
> + VirtIONet *net = VIRTIO_NET(&dev->vdev);
> +
> + if (vpci_dev->nvectors == DEV_NVECTORS_UNSPECIFIED) {
> + vpci_dev->nvectors = 2 * MAX(net->nic_conf.queues, 1) + 2;
> + }
> +
> + fprintf(stderr, "vectors is %d\n", vpci_dev->nvectors);
last lin shouldn't be there obviously.
>
> virtio_net_set_config_size(&dev->vdev, vpci_dev->host_features);
> virtio_net_set_netclient_name(&dev->vdev, qdev->id,
> --
> 1.8.3.2
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH] virtio-net: calculate proper msix vectors on init
2014-02-23 6:34 ` Michael S. Tsirkin
@ 2014-02-24 4:58 ` Jason Wang
0 siblings, 0 replies; 4+ messages in thread
From: Jason Wang @ 2014-02-24 4:58 UTC (permalink / raw)
To: Michael S. Tsirkin; +Cc: Paolo Bonzini, qemu-devel, aliguori
On 02/23/2014 02:34 PM, Michael S. Tsirkin wrote:
> On Fri, Feb 21, 2014 at 01:00:57PM +0800, Jason Wang wrote:
>> Currently, the default msix vectors for virtio-net-pci is 3 which is
>> obvious not suitable for multiqueue guest, so we depends on the user
>> or management tools to pass a correct vectors parameter. In fact, we
>> can simplifying this by calculate the number of vectors on init.
>>
>> Consider we have N queues, the number of vectors needed is 2*N + 2
>> (plus one config interrupt and control vq). We didn't check whether or
>> not host support control vq because it was added unconditionally by
>> qemu to avoid breaking legacy guests such as Minix.
>>
>> Cc: Paolo Bonzini <pbonzini@redhat.com>
>> Cc: Michael S. Tsirkin <mst@redhat.com>
>> Signed-off-by: Jason Wang <jasowang@redhat.com>
>> ---
>> hw/virtio/virtio-pci.c | 10 +++++++++-
>> 1 file changed, 9 insertions(+), 1 deletion(-)
>>
>> diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
>> index 7b91841..1dec491 100644
>> --- a/hw/virtio/virtio-pci.c
>> +++ b/hw/virtio/virtio-pci.c
>> @@ -1416,7 +1416,8 @@ static const TypeInfo virtio_serial_pci_info = {
>> static Property virtio_net_properties[] = {
>> DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags,
>> VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, false),
>> - DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 3),
>> + DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors,
>> + DEV_NVECTORS_UNSPECIFIED),
>> DEFINE_VIRTIO_NET_FEATURES(VirtIOPCIProxy, host_features),
>> DEFINE_NIC_PROPERTIES(VirtIONetPCI, vdev.nic_conf),
>> DEFINE_VIRTIO_NET_PROPERTIES(VirtIONetPCI, vdev.net_conf),
>> @@ -1428,6 +1429,13 @@ static int virtio_net_pci_init(VirtIOPCIProxy *vpci_dev)
>> DeviceState *qdev = DEVICE(vpci_dev);
>> VirtIONetPCI *dev = VIRTIO_NET_PCI(vpci_dev);
>> DeviceState *vdev = DEVICE(&dev->vdev);
>> + VirtIONet *net = VIRTIO_NET(&dev->vdev);
>> +
>> + if (vpci_dev->nvectors == DEV_NVECTORS_UNSPECIFIED) {
>> + vpci_dev->nvectors = 2 * MAX(net->nic_conf.queues, 1) + 2;
>> + }
>> +
>> + fprintf(stderr, "vectors is %d\n", vpci_dev->nvectors);
> last lin shouldn't be there obviously.
True, I've sent V2 to the list, please have a look.
Thanks
>>
>> virtio_net_set_config_size(&dev->vdev, vpci_dev->host_features);
>> virtio_net_set_netclient_name(&dev->vdev, qdev->id,
>> --
>> 1.8.3.2
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2014-02-24 4:58 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-02-21 5:00 [Qemu-devel] [PATCH] virtio-net: calculate proper msix vectors on init Jason Wang
2014-02-21 8:50 ` Jason Wang
2014-02-23 6:34 ` Michael S. Tsirkin
2014-02-24 4:58 ` Jason Wang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).