[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Poor performance of xend on servers with more than 10000 FC device paths
Hi Lutz, Well done!! Best regards, Kan Fri, 23 Jul 2010 08:31:14 +0200, "Dube, Lutz" wrote: >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 > >diff -r fac9d58d3c8a -r 02d55e7d0e94 tools/examples/xend-config.sxp >--- a/tools/examples/xend-config.sxp Wed Jul 21 13:15:33 2010 +0200 >+++ b/tools/examples/xend-config.sxp Fri Jul 23 08:23:19 2010 >+0200 >@@ -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 fac9d58d3c8a -r 02d55e7d0e94 tools/python/xen/util/vscsi_util.py >--- a/tools/python/xen/util/vscsi_util.py Wed Jul 21 13:15:33 >2010 +0200 >+++ b/tools/python/xen/util/vscsi_util.py Fri Jul 23 08:23:19 2010 >+0200 >@@ -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 fac9d58d3c8a -r 02d55e7d0e94 tools/python/xen/xend/XendNode.py >--- a/tools/python/xen/xend/XendNode.py Wed Jul 21 13:15:33 2010 +0200 >+++ b/tools/python/xen/xend/XendNode.py Fri Jul 23 08:23:19 2010 +0200 >@@ -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 fac9d58d3c8a -r 02d55e7d0e94 tools/python/xen/xend/XendOptions.py >--- a/tools/python/xen/xend/XendOptions.py Wed Jul 21 13:15: >33 2010 +0200 >+++ b/tools/python/xen/xend/XendOptions.py Fri Jul 23 08:23:19 >2010 +0200 >@@ -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_defau >lt) >+ >+ def get_pscsi_device_mask(self): >+ return self.get_config_value("pscsi-device-mask", >+ self.xend_pscsi_device_mask) > > class XendOptionsFile(XendOptions): > > > >-------------------------------text/plain------------------------------- >_______________________________________________ >Xen-devel mailing list >Xen-devel@xxxxxxxxxxxxxxxxxxx >http://lists.xensource.com/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |