lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
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

Powered by Openwall GNU/*/Linux Powered by OpenVZ