[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20140419040815.GB4681@amosk.info>
Date: Sat, 19 Apr 2014 12:08:15 +0800
From: Amos Kong <akong@...hat.com>
To: "MichaelS.Tsirkin" <mst@...hat.com>,
virtualization@...ts.linux-foundation.org
Cc: jasowang@...hat.com, netdev@...r.kernel.org
Subject: RFC: sharing config interrupt between virtio devices for saving MSI
Hi all,
I'm working on this item in Upstream Networking todolist:
| - Sharing config interrupts
| Support more devices by sharing a single msi vector
| between multiple virtio devices.
| (Applies to virtio-blk too).
I have this solution here, and only have draft patches of Solution
1 & 2, let's discuss if solution 3 is feasible.
* We should not introduce perf regression in this change
* little effect is acceptable because we are _sharing_ interrupt
Solution 1:
==========
share one LSI interrupt for configuration change of all virtio devices.
Draft patch: share_lsi_for_all_config.patch
Solution 2:
==========
share one MSI interrupt for configuration change of all virtio devices.
Draft patch: share_msix_for_all_config.patch
Solution 3:
==========
dynamic adjust interrupt policy when device is added or removed
Current:
-------
- try to allocate a MSI to device's config
- try to allocate a MSI for each vq
- share one MSI for all vqs of one device
- share one LSI for config & vqs of one device
additional dynamic policies:
---------------------------
- if there is no enough MSI, adjust interrupt allocation for returning
some MSI
- try to find a device that allocated one MSI for each vq, change
it to share one MSI for saving the MSI
- try to share one MSI for config of all virtio_pci devices
- try to share one LSI for config of all devices
- if device is removed, try to re-allocate freed MSI to existed
devices, if they aren't in best status (one MSI for config, one
MSI for each vq)
- if config of all devices is sharing one LSI, try to upgrade it to MSI
- if config of all devices is sharing one MSI, try to allocate one
MSI for configuration change of each device
- try to find a device that is sharing one MSI for all vqs, try to
allocate one MSI for each vq
BTW, I saw we still notify all vqs even VIRTIO_PCI_ISR_CONFIG bit of
isr is set, is it necessary?
diff --git a/drivers/virtio/virtio_pci.c b/drivers/virtio/virtio_pci.c
index 101db3f..176aabc 100644
--- a/drivers/virtio/virtio_pci.c
+++ b/drivers/virtio/virtio_pci.c
@@ -259,9 +259,9 @@ static irqreturn_t vp_interrupt(int irq, void
*opaque)
/* Configuration change? Tell driver if it wants to know. */
if (isr & VIRTIO_PCI_ISR_CONFIG)
- vp_config_changed(irq, opaque);
-
- return vp_vring_interrupt(irq, opaque);
+ return vp_config_changed(irq, opaque);
+ else
+ return vp_vring_interrupt(irq, opaque);
}
static void vp_free_vectors(struct virtio_device *vdev)
--
Amos.
View attachment "share_lsi_for_all_config.patch" of type "text/plain" (2044 bytes)
View attachment "share_msix_for_all_config.path" of type "text/plain" (2718 bytes)
Powered by blists - more mailing lists