New patch submitted by Igor Lvovsky (ilvovsky(a)redhat.com)
You can review this change at:
http://gerrit.usersys.redhat.com/935
commit 21cfe4c8c08191908142fcfa98346f811fd90739
Author: Igor Lvovsky <ilvovsky(a)redhat.com>
Date: Wed Sep 14 16:37:36 2011 +0300
Related BZ#720385 - Report disk latency (read , write & flush ) for each storage
device.
This patch temporary return zeros instead of real latency values.
The real values will be returned when libvirt will support python binding for
virDomainQemuMonitor command.
Change-Id: Id0d3d4869bcf35ed4d2ff72a5e1ef7aa21fe3455
diff --git a/vdsm/config.py b/vdsm/config.py
index 217b58c..7ad29d9 100644
--- a/vdsm/config.py
+++ b/vdsm/config.py
@@ -80,6 +80,8 @@ config.set('vars', 'vm_sample_cpu_interval',
'15')
config.set('vars', 'vm_sample_cpu_window', '2')
config.set('vars', 'vm_sample_disk_interval', '60')
config.set('vars', 'vm_sample_disk_window', '2')
+config.set('vars', 'vm_sample_disk_latency_interval', '60')
+config.set('vars', 'vm_sample_disk_latency_window', '2')
config.set('vars', 'vm_sample_net_interval', '5')
config.set('vars', 'vm_sample_net_window', '2')
diff --git a/vdsm/libvirtvm.py b/vdsm/libvirtvm.py
index 221589b..4b1fb8b 100644
--- a/vdsm/libvirtvm.py
+++ b/vdsm/libvirtvm.py
@@ -56,12 +56,15 @@ class VmStatsThread(utils.AdvancedStatsThread):
self.sampleDisk = utils.AdvancedStatsFunction(self._sampleDisk,
config.getint('vars',
'vm_sample_disk_interval'),
config.getint('vars',
'vm_sample_disk_window'))
+ self.sampleDiskLatency = utils.AdvancedStatsFunction(self._sampleDiskLatency,
+ config.getint('vars',
'vm_sample_disk_latency_interval'),
+ config.getint('vars',
'vm_sample_disk_latency_window'))
self.sampleNet = utils.AdvancedStatsFunction(self._sampleNet,
config.getint('vars',
'vm_sample_net_interval'),
config.getint('vars',
'vm_sample_net_window'))
- self.addStatsFunction(self.highWrite, self.updateVolumes,
- self.sampleCpu, self.sampleDisk, self.sampleNet)
+ self.addStatsFunction(self.highWrite, self.updateVolumes, self.sampleCpu,
+ self.sampleDisk, self.sampleDiskLatency, self.sampleNet)
def _highWrite(self):
if self._vm._incomingMigrationPending():
@@ -107,6 +110,17 @@ class VmStatsThread(utils.AdvancedStatsThread):
diskSamples[vmDrive.name] = self._vm._dom.blockStats(vmDrive.name)
return diskSamples
+ def _sampleDiskLatency(self):
+ if not self._vm._volumesPrepared:
+ # Avoid queries from storage during recovery process
+ return
+
+ diskLatency = {}
+ for vmDrive in self._vm._drives:
+ # Will be done by virDomainQemuMonitor
+ diskLatency[vmDrive.name] = ()
+ return diskLatency
+
def _sampleNet(self):
netSamples = {}
for vmIface in self._vm.interfaces.keys():
@@ -175,6 +189,22 @@ class VmStatsThread(utils.AdvancedStatsThread):
stats[dName] = dStats
+ def _getDiskLatency(self, stats):
+ sInfo, eInfo, sampleInterval = self.sampleDiskLatency.getStats()
+
+ for vmDrive in self._vm._drives:
+ dName = vmDrive.name
+
+ dLatency = {'readLatency': '0.00',
+ 'writeLatency': '0.00',}
+ try:
+ dLatency['readLatency'] = '0.00'
+ dLatency['writeLatency'] = '0.00'
+ except (KeyError, TypeError):
+ self._log.debug("Disk latency not available")
+
+ stats[dName].update(dLatency)
+
def get(self):
stats = {}
@@ -187,6 +217,7 @@ class VmStatsThread(utils.AdvancedStatsThread):
self._getCpuStats(stats)
self._getNetworkStats(stats)
self._getDiskStats(stats)
+ self._getDiskLatency(stats)
return stats