mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
xenapi: Extension to get vif total i/o stats.
From: Stefan de Konink <skinkie@xs4all.nl> Signed-off-by: Keir Fraser <keir.fraser@eu.citrix.com>
This commit is contained in:
1 parent
8f52dbd472
commit
22883da437
4 files changed
+36
-1
No files matched your search
@@ -2111,6 +2111,8 @@ class XendAPI(object):
|
||||
|
||||
VIF_metrics_attr_ro = ['io_read_kbs',
|
||||
'io_write_kbs',
|
||||
'io_total_read_kbs',
|
||||
'io_total_write_kbs',
|
||||
'last_updated']
|
||||
VIF_metrics_attr_rw = []
|
||||
VIF_metrics_methods = []
|
||||
@@ -2125,6 +2127,8 @@ class XendAPI(object):
|
||||
return xen_api_success(
|
||||
{ 'io_read_kbs' : vm.get_dev_property('vif', ref, 'io_read_kbs'),
|
||||
'io_write_kbs' : vm.get_dev_property('vif', ref, 'io_write_kbs'),
|
||||
'io_total_read_kbs' : vm.get_dev_property('vif', ref, 'io_total_read_kbs'),
|
||||
'io_total_write_kbs' : vm.get_dev_property('vif', ref, 'io_total_write_kbs'),
|
||||
'last_updated' : now()
|
||||
})
|
||||
|
||||
@@ -2134,6 +2138,12 @@ class XendAPI(object):
|
||||
def VIF_metrics_get_io_write_kbs(self, session, ref):
|
||||
return self._VIF_get(ref, 'io_write_kbs')
|
||||
|
||||
def VIF_metrics_get_io_total_read_kbs(self, _, ref):
|
||||
return self._VIF_get(ref, 'io_total_read_kbs')
|
||||
|
||||
def VIF_metrics_get_io_total_write_kbs(self, session, ref):
|
||||
return self._VIF_get(ref, 'io_total_write_kbs')
|
||||
|
||||
def VIF_metrics_get_last_updated(self, _1, _2):
|
||||
return xen_api_success(now())
|
||||
|
||||
|
||||
@@ -2606,9 +2606,14 @@ class XendDomainInfo:
|
||||
rx_bps, tx_bps = xennode.get_vif_util(self.domid, devid)
|
||||
config['io_read_kbs'] = rx_bps/1024
|
||||
config['io_write_kbs'] = tx_bps/1024
|
||||
rx, tx = xennode.get_vif_stat(self.domid, devid)
|
||||
config['io_total_read_kbs'] = rx/1024
|
||||
config['io_total_write_kbs'] = tx/1024
|
||||
else:
|
||||
config['io_read_kbs'] = 0.0
|
||||
config['io_write_kbs'] = 0.0
|
||||
config['io_write_kbs'] = 0.0
|
||||
config['io_total_read_kbs'] = 0.0
|
||||
config['io_total_write_kbs'] = 0.0
|
||||
|
||||
config['security_label'] = config.get('security_label', '')
|
||||
|
||||
|
||||
@@ -63,6 +63,8 @@ class XendMonitor(threading.Thread):
|
||||
@type domain_vcpus_util: {domid: {vcpuid: float, vcpuid: float}}
|
||||
@ivar domain_vifs_util: Bytes per second for VIFs indexed by domain
|
||||
@type domain_vifs_util: {domid: {vifid: (rx_bps, tx_bps)}}
|
||||
@ivar domain_vifs_stat: Total amount of bytes used for VIFs indexed by domain
|
||||
@type domain_vifs_stat: {domid: {vbdid: (rx, tx)}}
|
||||
@ivar domain_vbds_util: Blocks per second for VBDs index by domain.
|
||||
@type domain_vbds_util: {domid: {vbdid: (rd_reqps, wr_reqps)}}
|
||||
|
||||
@@ -83,6 +85,7 @@ class XendMonitor(threading.Thread):
|
||||
# instantaneous statistics
|
||||
self._domain_vcpus_util = {}
|
||||
self._domain_vifs_util = {}
|
||||
self._domain_vifs_stat = {}
|
||||
self._domain_vbds_util = {}
|
||||
self.pifs_util = {}
|
||||
|
||||
@@ -107,6 +110,13 @@ class XendMonitor(threading.Thread):
|
||||
finally:
|
||||
self.lock.release()
|
||||
|
||||
def get_domain_vifs_stat(self):
|
||||
self.lock.acquire()
|
||||
try:
|
||||
return self._domain_vifs_stat
|
||||
finally:
|
||||
self.lock.release()
|
||||
|
||||
def get_pifs_util(self):
|
||||
self.lock.acquire()
|
||||
try:
|
||||
@@ -269,6 +279,7 @@ class XendMonitor(threading.Thread):
|
||||
if domid not in self._domain_vifs:
|
||||
self._domain_vifs[domid] = vifs
|
||||
self._domain_vifs_util[domid] = {}
|
||||
self._domain_vifs_stat[domid] = {}
|
||||
continue
|
||||
|
||||
for devid, (usage_at, rx, tx) in vifs.items():
|
||||
@@ -286,6 +297,8 @@ class XendMonitor(threading.Thread):
|
||||
# not the guest interface
|
||||
self._domain_vifs_util[domid][devid] = \
|
||||
(tx_util, rx_util)
|
||||
self._domain_vifs_stat[domid][devid] = \
|
||||
(float(tx), float(rx))
|
||||
|
||||
self._domain_vifs[domid] = vifs
|
||||
|
||||
@@ -313,6 +326,7 @@ class XendMonitor(threading.Thread):
|
||||
if domid not in active_domids:
|
||||
del self._domain_vifs_util[domid]
|
||||
del self._domain_vifs[domid]
|
||||
del self._domain_vifs_stat[domid]
|
||||
for domid in self._domain_vbds_util.keys():
|
||||
if domid not in active_domids:
|
||||
del self._domain_vbds_util[domid]
|
||||
|
||||
@@ -651,6 +651,12 @@ class XendNode:
|
||||
return vif_loads[domid].get(vifid, (0.0, 0.0))
|
||||
return (0.0, 0.0)
|
||||
|
||||
def get_vif_stat(self, domid, vifid):
|
||||
vif_loads = self.monitor.get_domain_vifs_stat()
|
||||
if domid in vif_loads:
|
||||
return vif_loads[domid].get(vifid, (0.0, 0.0))
|
||||
return (0.0, 0.0)
|
||||
|
||||
def get_vbd_util(self, domid, vbdid):
|
||||
vbd_loads = self.monitor.get_domain_vbds_util()
|
||||
if domid in vbd_loads:
|
||||
|
||||