WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] tools/xend: Fix performance of xend with

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] tools/xend: Fix performance of xend with more than 10000 FC device paths
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Sun, 25 Jul 2010 01:45:35 -0700
Delivery-date: Sun, 25 Jul 2010 01:46:38 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User "Dube, Lutz" <lutz.dube@xxxxxxxxxxxxxx>
# Date 1279902875 -3600
# Node ID 4814e16ea4105502332407e3379c49da92018899
# Parent  e23302fcb83c72f93ec01285bd7f4f1641eb67e4
tools/xend: Fix performance of xend with more than 10000 FC device paths

On server startup xend start or a later xend restart needs approx. 30 min to
start/restart. Without attached FC devices xend start/restart needs only some
seconds.

server type: Fujitsu Primergy RX600-S5

The time gets lost in xen/xend/XendNode.py line 329 while calling
vscsi_util.get_all_scsi_device().

329         for pscsi_record in vscsi_util.get_all_scsi_devices():
330             scsi_id = pscsi_record['scsi_id']
331             if scsi_id:
332                 saved_HBA_uuid = None

I think, in most cases we don't need all the PSCSI devices registered in
xend, but only a few of it.
So a good solution for this perforamce issue is to scan only the SCSI device
paths we need, controlled by a new option in xend-config.sxp.

I have made a patch to allow specification of scsi devices we need in xend
in the config file xend-config.sxp.
The new options pscsi-device-mask expects a list of device ids oder partial
device ids like the option of lsscsi, e.g.
(pscsi-device-mask ('<partial-dev-id1' 'partial-dev-id2' ...))

Without this option set in xend-config.sxp or if lsscsi is not support, all
device paths are process like today.

Signed-off-by: Lutz Dube Lutz.Dube@xxxxxxxxxxxxxx
Comment from Masaki Kanno <kanno.masaki@xxxxxxxxxxxxxx>: "Well done"
Committed-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
---
 tools/examples/xend-config.sxp       |    8 ++++++++
 tools/python/xen/util/vscsi_util.py  |   11 ++++++-----
 tools/python/xen/xend/XendNode.py    |    7 ++++++-
 tools/python/xen/xend/XendOptions.py |    7 +++++++
 4 files changed, 27 insertions(+), 6 deletions(-)

diff -r e23302fcb83c -r 4814e16ea410 tools/examples/xend-config.sxp
--- a/tools/examples/xend-config.sxp    Fri Jul 23 17:26:28 2010 +0100
+++ b/tools/examples/xend-config.sxp    Fri Jul 23 17:34:35 2010 +0100
@@ -294,3 +294,11 @@
 # we have to realize this may incur security issue and we can't make sure the
 # device assignment could really work properly even after we do this.
 #(pci-passthrough-strict-check yes)
+
+# If we have a very big scsi device configuration, start of xend is slow,
+# because xend scans all the device paths to build its internal PSCSI device
+# list.  If we need only a few devices for assigning to a guest, we can reduce
+# the scan to this device. Set list list of device paths in same syntax like in
+# command lsscsi, e.g. ('16:0:0:0' '15:0') 
+# (pscsi-device-mask ('*'))
+
diff -r e23302fcb83c -r 4814e16ea410 tools/python/xen/util/vscsi_util.py
--- a/tools/python/xen/util/vscsi_util.py       Fri Jul 23 17:26:28 2010 +0100
+++ b/tools/python/xen/util/vscsi_util.py       Fri Jul 23 17:34:35 2010 +0100
@@ -148,11 +148,12 @@ def _vscsi_get_scsidevices_by_sysfs():
     return devices
 
 
-def vscsi_get_scsidevices():
+def vscsi_get_scsidevices(mask=""):
     """ get all scsi devices information """
 
-    devices = _vscsi_get_scsidevices_by_lsscsi("")
-    if devices:
+    devices = _vscsi_get_scsidevices_by_lsscsi("[%s]" % mask)
+    if devices or (len(mask) and mask[0] != "*"):
+        # devices found or partial device scan
         return devices
     return _vscsi_get_scsidevices_by_sysfs()
 
@@ -274,9 +275,9 @@ def get_scsi_device(pHCTL):
             return _make_scsi_record(scsi_info)
     return None
 
-def get_all_scsi_devices():
+def get_all_scsi_devices(mask=""):
     scsi_records = []
-    for scsi_info in vscsi_get_scsidevices():
+    for scsi_info in vscsi_get_scsidevices(mask):
         scsi_record = _make_scsi_record(scsi_info)
         scsi_records.append(scsi_record)
     return scsi_records
diff -r e23302fcb83c -r 4814e16ea410 tools/python/xen/xend/XendNode.py
--- a/tools/python/xen/xend/XendNode.py Fri Jul 23 17:26:28 2010 +0100
+++ b/tools/python/xen/xend/XendNode.py Fri Jul 23 17:34:35 2010 +0100
@@ -326,7 +326,12 @@ class XendNode:
         pscsi_table = {}
         pscsi_HBA_table = {}
 
-        for pscsi_record in vscsi_util.get_all_scsi_devices():
+        pscsi_records = []
+        for pscsi_mask in xendoptions().get_pscsi_device_mask():
+            pscsi_records += vscsi_util.get_all_scsi_devices(pscsi_mask)
+        log.debug("pscsi record count: %s" % len(pscsi_records))
+
+        for pscsi_record in pscsi_records:
             scsi_id = pscsi_record['scsi_id']
             if scsi_id:
                 saved_HBA_uuid = None
diff -r e23302fcb83c -r 4814e16ea410 tools/python/xen/xend/XendOptions.py
--- a/tools/python/xen/xend/XendOptions.py      Fri Jul 23 17:26:28 2010 +0100
+++ b/tools/python/xen/xend/XendOptions.py      Fri Jul 23 17:34:35 2010 +0100
@@ -164,6 +164,9 @@ class XendOptions:
         """
         print >>sys.stderr, "xend [ERROR]", fmt % args
 
+    """Default mask for pscsi device scan."""
+    xend_pscsi_device_mask = ['*']
+
 
     def configure(self):
         self.set_config()
@@ -429,6 +432,10 @@ class XendOptions:
     def get_pci_dev_assign_strict_check(self):
         return self.get_config_bool("pci-passthrough-strict-check",
                                     self.pci_dev_assign_strict_check_default)
+
+    def get_pscsi_device_mask(self):
+        return self.get_config_value("pscsi-device-mask",
+                                      self.xend_pscsi_device_mask)
 
 class XendOptionsFile(XendOptions):
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] tools/xend: Fix performance of xend with more than 10000 FC device paths, Xen patchbot-unstable <=