* [Qemu-devel] [PATCH 1/2] pc: add machine type for 0.12 @ 2009-11-25 8:16 Gerd Hoffmann 2009-11-25 8:16 ` [Qemu-devel] [PATCH 2/2] virtio: enable msi-x for console+balloon Gerd Hoffmann 0 siblings, 1 reply; 11+ messages in thread From: Gerd Hoffmann @ 2009-11-25 8:16 UTC (permalink / raw) To: qemu-devel; +Cc: Gerd Hoffmann Add a new machine type for qemu 0.12. Also fixup the 0.11 machine type: msi for virtio-blk-pci was enabled after the 0.11 release, so turn it off in the 0.11 machine type. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- hw/pc.c | 18 +++++++++++++++++- 1 files changed, 17 insertions(+), 1 deletions(-) diff --git a/hw/pc.c b/hw/pc.c index 7c791c4..fdaa52c 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -1279,7 +1279,7 @@ void cmos_set_s3_resume(void) } static QEMUMachine pc_machine = { - .name = "pc-0.11", + .name = "pc-0.12", .alias = "pc", .desc = "Standard PC", .init = pc_init_pci, @@ -1287,6 +1287,21 @@ static QEMUMachine pc_machine = { .is_default = 1, }; +static QEMUMachine pc_machine_v0_11 = { + .name = "pc-0.11", + .desc = "Standard PC, qemu 0.11", + .init = pc_init_pci, + .max_cpus = 255, + .compat_props = (CompatProperty[]) { + { + .driver = "virtio-blk-pci", + .property = "vectors", + .value = stringify(0), + }, + { /* end of list */ } + } +}; + static QEMUMachine pc_machine_v0_10 = { .name = "pc-0.10", .desc = "Standard PC, qemu 0.10", @@ -1324,6 +1339,7 @@ static QEMUMachine isapc_machine = { static void pc_machine_init(void) { qemu_register_machine(&pc_machine); + qemu_register_machine(&pc_machine_v0_11); qemu_register_machine(&pc_machine_v0_10); qemu_register_machine(&isapc_machine); } -- 1.6.2.5 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Qemu-devel] [PATCH 2/2] virtio: enable msi-x for console+balloon 2009-11-25 8:16 [Qemu-devel] [PATCH 1/2] pc: add machine type for 0.12 Gerd Hoffmann @ 2009-11-25 8:16 ` Gerd Hoffmann 2009-12-07 9:37 ` [Qemu-devel] " Michael S. Tsirkin 0 siblings, 1 reply; 11+ messages in thread From: Gerd Hoffmann @ 2009-11-25 8:16 UTC (permalink / raw) To: qemu-devel; +Cc: Gerd Hoffmann Enable MSI-X for virtio-console-pci and virtio-balloon-pci. Add entries to the compatibility machine types so MSI-X will be disabled for pc-0.10 and pc-0.11. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- hw/pc.c | 16 ++++++++++++++++ hw/virtio-pci.c | 11 +++++++++++ 2 files changed, 27 insertions(+), 0 deletions(-) diff --git a/hw/pc.c b/hw/pc.c index fdaa52c..cb78923 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -1297,6 +1297,14 @@ static QEMUMachine pc_machine_v0_11 = { .driver = "virtio-blk-pci", .property = "vectors", .value = stringify(0), + },{ + .driver = "virtio-balloon-pci", + .property = "vectors", + .value = stringify(0), + },{ + .driver = "virtio-console-pci", + .property = "vectors", + .value = stringify(0), }, { /* end of list */ } } @@ -1324,6 +1332,14 @@ static QEMUMachine pc_machine_v0_10 = { .driver = "virtio-blk-pci", .property = "vectors", .value = stringify(0), + },{ + .driver = "virtio-balloon-pci", + .property = "vectors", + .value = stringify(0), + },{ + .driver = "virtio-console-pci", + .property = "vectors", + .value = stringify(0), }, { /* end of list */ } }, diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c index aebcf9d..cb8ab21 100644 --- a/hw/virtio-pci.c +++ b/hw/virtio-pci.c @@ -483,10 +483,13 @@ static int virtio_console_init_pci(PCIDevice *pci_dev) if (!vdev) { return -1; } + vdev->nvectors = proxy->nvectors; virtio_init_pci(proxy, vdev, PCI_VENDOR_ID_REDHAT_QUMRANET, PCI_DEVICE_ID_VIRTIO_CONSOLE, proxy->class_code, 0x00); + /* make the actual value visible */ + proxy->nvectors = vdev->nvectors; return 0; } @@ -531,11 +534,14 @@ static int virtio_balloon_init_pci(PCIDevice *pci_dev) VirtIODevice *vdev; vdev = virtio_balloon_init(&pci_dev->qdev); + vdev->nvectors = proxy->nvectors; virtio_init_pci(proxy, vdev, PCI_VENDOR_ID_REDHAT_QUMRANET, PCI_DEVICE_ID_VIRTIO_BALLOON, PCI_CLASS_MEMORY_RAM, 0x00); + /* make the actual value visible */ + proxy->nvectors = vdev->nvectors; return 0; } @@ -569,6 +575,7 @@ static PCIDeviceInfo virtio_info[] = { .init = virtio_console_init_pci, .exit = virtio_exit_pci, .qdev.props = (Property[]) { + DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 2), DEFINE_PROP_HEX32("class", VirtIOPCIProxy, class_code, 0), DEFINE_PROP_END_OF_LIST(), }, @@ -579,6 +586,10 @@ static PCIDeviceInfo virtio_info[] = { .init = virtio_balloon_init_pci, .exit = virtio_exit_pci, .qdev.reset = virtio_pci_reset, + .qdev.props = (Property[]) { + DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 3), + DEFINE_PROP_END_OF_LIST(), + }, },{ /* end of list */ } -- 1.6.2.5 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Qemu-devel] Re: [PATCH 2/2] virtio: enable msi-x for console+balloon 2009-11-25 8:16 ` [Qemu-devel] [PATCH 2/2] virtio: enable msi-x for console+balloon Gerd Hoffmann @ 2009-12-07 9:37 ` Michael S. Tsirkin 2009-12-07 10:32 ` Gerd Hoffmann 0 siblings, 1 reply; 11+ messages in thread From: Michael S. Tsirkin @ 2009-12-07 9:37 UTC (permalink / raw) To: Gerd Hoffmann; +Cc: qemu-devel Sorry, I missed this the first time this was posted, and I see this in staging now. Gerd, could you please explain the motivation for this patch? I assumed console/baloon interrupts are not performance critical, so would we not be better off using a shared interrupt for these, reserving MSI vectors for where performance matters? On Wed, Nov 25, 2009 at 09:16:48AM +0100, Gerd Hoffmann wrote: > Enable MSI-X for virtio-console-pci and virtio-balloon-pci. > Add entries to the compatibility machine types so MSI-X will > be disabled for pc-0.10 and pc-0.11. > > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> > --- > hw/pc.c | 16 ++++++++++++++++ > hw/virtio-pci.c | 11 +++++++++++ > 2 files changed, 27 insertions(+), 0 deletions(-) > > diff --git a/hw/pc.c b/hw/pc.c > index fdaa52c..cb78923 100644 > --- a/hw/pc.c > +++ b/hw/pc.c > @@ -1297,6 +1297,14 @@ static QEMUMachine pc_machine_v0_11 = { > .driver = "virtio-blk-pci", > .property = "vectors", > .value = stringify(0), > + },{ > + .driver = "virtio-balloon-pci", > + .property = "vectors", > + .value = stringify(0), > + },{ > + .driver = "virtio-console-pci", > + .property = "vectors", > + .value = stringify(0), > }, > { /* end of list */ } > } > @@ -1324,6 +1332,14 @@ static QEMUMachine pc_machine_v0_10 = { > .driver = "virtio-blk-pci", > .property = "vectors", > .value = stringify(0), > + },{ > + .driver = "virtio-balloon-pci", > + .property = "vectors", > + .value = stringify(0), > + },{ > + .driver = "virtio-console-pci", > + .property = "vectors", > + .value = stringify(0), > }, > { /* end of list */ } > }, > diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c > index aebcf9d..cb8ab21 100644 > --- a/hw/virtio-pci.c > +++ b/hw/virtio-pci.c > @@ -483,10 +483,13 @@ static int virtio_console_init_pci(PCIDevice *pci_dev) > if (!vdev) { > return -1; > } > + vdev->nvectors = proxy->nvectors; > virtio_init_pci(proxy, vdev, > PCI_VENDOR_ID_REDHAT_QUMRANET, > PCI_DEVICE_ID_VIRTIO_CONSOLE, > proxy->class_code, 0x00); > + /* make the actual value visible */ > + proxy->nvectors = vdev->nvectors; > return 0; > } > > @@ -531,11 +534,14 @@ static int virtio_balloon_init_pci(PCIDevice *pci_dev) > VirtIODevice *vdev; > > vdev = virtio_balloon_init(&pci_dev->qdev); > + vdev->nvectors = proxy->nvectors; > virtio_init_pci(proxy, vdev, > PCI_VENDOR_ID_REDHAT_QUMRANET, > PCI_DEVICE_ID_VIRTIO_BALLOON, > PCI_CLASS_MEMORY_RAM, > 0x00); > + /* make the actual value visible */ > + proxy->nvectors = vdev->nvectors; > return 0; > } > > @@ -569,6 +575,7 @@ static PCIDeviceInfo virtio_info[] = { > .init = virtio_console_init_pci, > .exit = virtio_exit_pci, > .qdev.props = (Property[]) { > + DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 2), > DEFINE_PROP_HEX32("class", VirtIOPCIProxy, class_code, 0), > DEFINE_PROP_END_OF_LIST(), > }, > @@ -579,6 +586,10 @@ static PCIDeviceInfo virtio_info[] = { > .init = virtio_balloon_init_pci, > .exit = virtio_exit_pci, > .qdev.reset = virtio_pci_reset, > + .qdev.props = (Property[]) { > + DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 3), > + DEFINE_PROP_END_OF_LIST(), > + }, > },{ > /* end of list */ > } > -- > 1.6.2.5 > > ^ permalink raw reply [flat|nested] 11+ messages in thread
* [Qemu-devel] Re: [PATCH 2/2] virtio: enable msi-x for console+balloon 2009-12-07 9:37 ` [Qemu-devel] " Michael S. Tsirkin @ 2009-12-07 10:32 ` Gerd Hoffmann 2009-12-07 10:59 ` Michael S. Tsirkin 0 siblings, 1 reply; 11+ messages in thread From: Gerd Hoffmann @ 2009-12-07 10:32 UTC (permalink / raw) To: Michael S. Tsirkin; +Cc: qemu-devel On 12/07/09 10:37, Michael S. Tsirkin wrote: > > Sorry, I missed this the first time this was posted, and I see this in > staging now. Gerd, could you please explain the motivation for this > patch? > > I assumed console/baloon interrupts are not performance critical, so > would we not be better off using a shared interrupt for these, > reserving MSI vectors for where performance matters? The motivation was to move them away from the ioapic, to reduce irq sharing of *other* devices which are connected to the ioapic too (i.e. usb, e1000, lsi, ...) I'm aware that these are not performance-critical. I've even tried to use 'vectors=1' because of that. I expected that would make them use MSI-X, but a single IRQ line only. Didn't work though. Intentional? cheers, Gerd ^ permalink raw reply [flat|nested] 11+ messages in thread
* [Qemu-devel] Re: [PATCH 2/2] virtio: enable msi-x for console+balloon 2009-12-07 10:32 ` Gerd Hoffmann @ 2009-12-07 10:59 ` Michael S. Tsirkin 2009-12-07 11:24 ` Gerd Hoffmann 0 siblings, 1 reply; 11+ messages in thread From: Michael S. Tsirkin @ 2009-12-07 10:59 UTC (permalink / raw) To: Gerd Hoffmann; +Cc: qemu-devel On Mon, Dec 07, 2009 at 11:32:36AM +0100, Gerd Hoffmann wrote: > On 12/07/09 10:37, Michael S. Tsirkin wrote: >> >> Sorry, I missed this the first time this was posted, and I see this in >> staging now. Gerd, could you please explain the motivation for this >> patch? >> >> I assumed console/baloon interrupts are not performance critical, so >> would we not be better off using a shared interrupt for these, >> reserving MSI vectors for where performance matters? > > The motivation was to move them away from the ioapic, to reduce irq > sharing of *other* devices which are connected to the ioapic too (i.e. > usb, e1000, lsi, ...) Let's convert these to MSI instead? This will likely pay off long term, e.g. with nested virtualization. > > I'm aware that these are not performance-critical. I've even tried to > use 'vectors=1' because of that. I expected that would make them use > MSI-X, but a single IRQ line only. Didn't work though. Intentional? So it's even worse, we are using up 2 vectors per device? Ugh ... vectors=1 currently will make guest fall back on regular interrupts, because IRQ field is undefined when MSI is used, so there is no way to distinguish between vq interrupt and config change. This last thing is important because it allows fastpath injection of MSI interrupts directly from kernel without notifying qemu to update IRQ field. Maybe we can define something special for a single vector, but this is not a use case I considered so will need guest changes ... > cheers, > Gerd ^ permalink raw reply [flat|nested] 11+ messages in thread
* [Qemu-devel] Re: [PATCH 2/2] virtio: enable msi-x for console+balloon 2009-12-07 10:59 ` Michael S. Tsirkin @ 2009-12-07 11:24 ` Gerd Hoffmann 2009-12-07 13:03 ` Michael S. Tsirkin 0 siblings, 1 reply; 11+ messages in thread From: Gerd Hoffmann @ 2009-12-07 11:24 UTC (permalink / raw) To: Michael S. Tsirkin; +Cc: qemu-devel On 12/07/09 11:59, Michael S. Tsirkin wrote: >> The motivation was to move them away from the ioapic, to reduce irq >> sharing of *other* devices which are connected to the ioapic too (i.e. >> usb, e1000, lsi, ...) > > Let's convert these to MSI instead? > This will likely pay off long term, > e.g. with nested virtualization. Works only of the real hardware we emulate can do MSI-X too, otherwise guests simply wouldn't use it. I think the only case where this could work out is e1000, newer revisions can do MSI-X. Maybe also the upcoming megasas emulation Hannes is working on. >> I'm aware that these are not performance-critical. I've even tried to >> use 'vectors=1' because of that. I expected that would make them use >> MSI-X, but a single IRQ line only. Didn't work though. Intentional? > > So it's even worse, we are using up 2 vectors per device? Ugh ... Yes. Three for balloon, but that can easily changed to two. > no way to distinguish between vq interrupt > and config change. This last thing is important > because it allows fastpath injection of MSI > interrupts directly from kernel without > notifying qemu to update IRQ field. Ah, *that* is the reason for the separate config interrupt. Does the in-kernel injection matter for balloon+console? I'd expect only virtio-net needs that when it is configured with vhost? cheers Gerd ^ permalink raw reply [flat|nested] 11+ messages in thread
* [Qemu-devel] Re: [PATCH 2/2] virtio: enable msi-x for console+balloon 2009-12-07 11:24 ` Gerd Hoffmann @ 2009-12-07 13:03 ` Michael S. Tsirkin 2009-12-07 13:16 ` Gerd Hoffmann 0 siblings, 1 reply; 11+ messages in thread From: Michael S. Tsirkin @ 2009-12-07 13:03 UTC (permalink / raw) To: Gerd Hoffmann, Anthony Liguori; +Cc: qemu-devel On Mon, Dec 07, 2009 at 12:24:02PM +0100, Gerd Hoffmann wrote: > On 12/07/09 11:59, Michael S. Tsirkin wrote: >>> The motivation was to move them away from the ioapic, to reduce irq >>> sharing of *other* devices which are connected to the ioapic too (i.e. >>> usb, e1000, lsi, ...) >> >> Let's convert these to MSI instead? >> This will likely pay off long term, >> e.g. with nested virtualization. > > Works only of the real hardware we emulate can do MSI-X too, otherwise > guests simply wouldn't use it. Sure. Naturally, improving IRQ routing so that e.g. lsi and usb do not share an interrupt would also be a good idea regardless. Also - why not simply use virtio? I assume you are talking about guests with virtio support otherwise MSI support in virtio won't matter for them. > I think the only case where this could > work out is e1000, newer revisions can do MSI-X. Maybe also the > upcoming megasas emulation Hannes is working on. Hmm. I would expect high-end storage to support MSI-X as well. Could you point me to linux drivers for devices we emulate so that I can check? >>> I'm aware that these are not performance-critical. I've even tried to >>> use 'vectors=1' because of that. I expected that would make them use >>> MSI-X, but a single IRQ line only. Didn't work though. Intentional? >> >> So it's even worse, we are using up 2 vectors per device? Ugh ... > > Yes. Three for balloon, but that can easily changed to two. Yes, please, make this change for 0.12. >> no way to distinguish between vq interrupt >> and config change. This last thing is important >> because it allows fastpath injection of MSI >> interrupts directly from kernel without >> notifying qemu to update IRQ field. > > Ah, *that* is the reason for the separate config interrupt. Does the > in-kernel injection matter for balloon+console? No, but changing this will need updating guests. And if we do update guests anyway, I would suggest that we put IRQ field in guest memory, with an atomic set, and guest would get it with test and clear, so that we get a generic interface and not something specific for console/baloon. Naturally, this needs a feature bit, and it won't happen in 0.12/2.6.33 timeframe. > I'd expect only > virtio-net needs that when it is configured with vhost? > > cheers > Gerd Any other device will need the same if it has a kernel backend. -- MST ^ permalink raw reply [flat|nested] 11+ messages in thread
* [Qemu-devel] Re: [PATCH 2/2] virtio: enable msi-x for console+balloon 2009-12-07 13:03 ` Michael S. Tsirkin @ 2009-12-07 13:16 ` Gerd Hoffmann 2009-12-07 14:13 ` Michael S. Tsirkin 0 siblings, 1 reply; 11+ messages in thread From: Gerd Hoffmann @ 2009-12-07 13:16 UTC (permalink / raw) To: Michael S. Tsirkin; +Cc: qemu-devel On 12/07/09 14:03, Michael S. Tsirkin wrote: > Also - why not simply use virtio? I assume you are talking about > guests with virtio support otherwise MSI support in virtio > won't matter for them. Point. Guests with virtio-console+balloon most likely can use virtio for storage+net too, so nothing performance-critical is left in ioapic irq space and IRQ sharing for the leftovers (just usb I think) shouldn't be a big issue. >> Yes. Three for balloon, but that can easily changed to two. > > Yes, please, make this change for 0.12. We can also simply drop this ... > No, but changing this will need updating guests. ... or postphone until we have the "one MSI-X vector" support working. cheers, Gerd ^ permalink raw reply [flat|nested] 11+ messages in thread
* [Qemu-devel] Re: [PATCH 2/2] virtio: enable msi-x for console+balloon 2009-12-07 13:16 ` Gerd Hoffmann @ 2009-12-07 14:13 ` Michael S. Tsirkin 2009-12-07 14:30 ` Gerd Hoffmann 0 siblings, 1 reply; 11+ messages in thread From: Michael S. Tsirkin @ 2009-12-07 14:13 UTC (permalink / raw) To: Gerd Hoffmann; +Cc: qemu-devel On Mon, Dec 07, 2009 at 02:16:33PM +0100, Gerd Hoffmann wrote: > On 12/07/09 14:03, Michael S. Tsirkin wrote: >> Also - why not simply use virtio? I assume you are talking about >> guests with virtio support otherwise MSI support in virtio >> won't matter for them. > > Point. Guests with virtio-console+balloon most likely can use virtio > for storage+net too, so nothing performance-critical is left in ioapic > irq space and IRQ sharing for the leftovers (just usb I think) shouldn't > be a big issue. > >>> Yes. Three for balloon, but that can easily changed to two. >> >> Yes, please, make this change for 0.12. > > We can also simply drop this ... > >> No, but changing this will need updating guests. > > ... or postphone until we have the "one MSI-X vector" support working. OK. Anthony, could you drop this from staging for now please? Gerd, any idea whether "one MSI-X vector" feature is worth pursuing? -- MST ^ permalink raw reply [flat|nested] 11+ messages in thread
* [Qemu-devel] Re: [PATCH 2/2] virtio: enable msi-x for console+balloon 2009-12-07 14:13 ` Michael S. Tsirkin @ 2009-12-07 14:30 ` Gerd Hoffmann 2009-12-07 14:43 ` Michael S. Tsirkin 0 siblings, 1 reply; 11+ messages in thread From: Gerd Hoffmann @ 2009-12-07 14:30 UTC (permalink / raw) To: Michael S. Tsirkin; +Cc: qemu-devel On 12/07/09 15:13, Michael S. Tsirkin wrote: > Gerd, any idea whether "one MSI-X vector" feature is worth pursuing? I'd rate it low priority. First because virtio-enabled guests can use virtio-net+blk. Also because with the upcoming p35 support we'll get a more modern pc emulation including a ioapic with all 24 IRQ lines being wired up, which will help reducing IRQ sharing too. MSI support (no -X) could be more intresting (for emulated devices) as it is older and thus support is more common. My T60 for example has no device with MSI-X support but 9 with MSI support. Linux turns on MSI for 7 of them (4 PCIe ports, e1000, ahci, iwl3945). cheers, Gerd ^ permalink raw reply [flat|nested] 11+ messages in thread
* [Qemu-devel] Re: [PATCH 2/2] virtio: enable msi-x for console+balloon 2009-12-07 14:30 ` Gerd Hoffmann @ 2009-12-07 14:43 ` Michael S. Tsirkin 0 siblings, 0 replies; 11+ messages in thread From: Michael S. Tsirkin @ 2009-12-07 14:43 UTC (permalink / raw) To: Gerd Hoffmann; +Cc: qemu-devel On Mon, Dec 07, 2009 at 03:30:09PM +0100, Gerd Hoffmann wrote: > On 12/07/09 15:13, Michael S. Tsirkin wrote: >> Gerd, any idea whether "one MSI-X vector" feature is worth pursuing? > > I'd rate it low priority. First because virtio-enabled guests can use > virtio-net+blk. Also because with the upcoming p35 support we'll get a > more modern pc emulation including a ioapic with all 24 IRQ lines being > wired up, which will help reducing IRQ sharing too. > > MSI support (no -X) could be more intresting (for emulated devices) as > it is older and thus support is more common. My T60 for example has no > device with MSI-X support but 9 with MSI support. Linux turns on MSI > for 7 of them (4 PCIe ports, e1000, ahci, iwl3945). > > cheers, > Gerd Yes, but what matters is guest support I think. On windows it seems that both msix and msi support were added simulataneously. It won't be hard to add MSI support, but let's determine when is it needed. -- MST ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2009-12-07 14:55 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-11-25 8:16 [Qemu-devel] [PATCH 1/2] pc: add machine type for 0.12 Gerd Hoffmann 2009-11-25 8:16 ` [Qemu-devel] [PATCH 2/2] virtio: enable msi-x for console+balloon Gerd Hoffmann 2009-12-07 9:37 ` [Qemu-devel] " Michael S. Tsirkin 2009-12-07 10:32 ` Gerd Hoffmann 2009-12-07 10:59 ` Michael S. Tsirkin 2009-12-07 11:24 ` Gerd Hoffmann 2009-12-07 13:03 ` Michael S. Tsirkin 2009-12-07 13:16 ` Gerd Hoffmann 2009-12-07 14:13 ` Michael S. Tsirkin 2009-12-07 14:30 ` Gerd Hoffmann 2009-12-07 14:43 ` Michael S. Tsirkin
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).