mirror of
https://github.com/virt-manager/virt-manager.git
synced 2025-02-25 18:55:27 -06:00
preferences: Allow disabling VM CPU poll
With this, the only libvirt API call we hit on each tick is the connection nodeinfo.
This commit is contained in:
parent
a70b836b2d
commit
d220cc5d52
@ -116,11 +116,15 @@
|
|||||||
<description>The statistics update interval in seconds</description>
|
<description>The statistics update interval in seconds</description>
|
||||||
</key>
|
</key>
|
||||||
|
|
||||||
|
<key name="enable-cpu-poll" type="b">
|
||||||
|
<default>true</default>
|
||||||
|
<summary>Poll VM CPU stats</summary>
|
||||||
|
<description>Whether or not the app will poll VM CPU statistics</description>
|
||||||
|
</key>
|
||||||
<key name="enable-disk-poll" type="b">
|
<key name="enable-disk-poll" type="b">
|
||||||
<default>false</default>
|
<default>false</default>
|
||||||
<summary>Poll disk i/o stats</summary>
|
<summary>Poll disk i/o stats</summary>
|
||||||
<description>Whether or not the app will poll VM disk i/o statistics</description>
|
<description>Whether or not the app will poll VM disk i/o statistics</description>
|
||||||
|
|
||||||
</key>
|
</key>
|
||||||
<key name="enable-net-poll" type="b">
|
<key name="enable-net-poll" type="b">
|
||||||
<default>false</default>
|
<default>false</default>
|
||||||
|
@ -116,7 +116,7 @@
|
|||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">0</property>
|
<property name="left_attach">0</property>
|
||||||
<property name="top_attach">1</property>
|
<property name="top_attach">2</property>
|
||||||
<property name="width">1</property>
|
<property name="width">1</property>
|
||||||
<property name="height">1</property>
|
<property name="height">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
@ -132,7 +132,7 @@
|
|||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
<property name="top_attach">1</property>
|
<property name="top_attach">2</property>
|
||||||
<property name="width">1</property>
|
<property name="width">1</property>
|
||||||
<property name="height">1</property>
|
<property name="height">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
@ -148,7 +148,7 @@
|
|||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">0</property>
|
<property name="left_attach">0</property>
|
||||||
<property name="top_attach">2</property>
|
<property name="top_attach">3</property>
|
||||||
<property name="width">1</property>
|
<property name="width">1</property>
|
||||||
<property name="height">1</property>
|
<property name="height">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
@ -164,7 +164,7 @@
|
|||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
<property name="top_attach">2</property>
|
<property name="top_attach">3</property>
|
||||||
<property name="width">1</property>
|
<property name="width">1</property>
|
||||||
<property name="height">1</property>
|
<property name="height">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
@ -180,7 +180,7 @@
|
|||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">0</property>
|
<property name="left_attach">0</property>
|
||||||
<property name="top_attach">3</property>
|
<property name="top_attach">4</property>
|
||||||
<property name="width">1</property>
|
<property name="width">1</property>
|
||||||
<property name="height">1</property>
|
<property name="height">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
@ -196,7 +196,7 @@
|
|||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
<property name="top_attach">3</property>
|
<property name="top_attach">4</property>
|
||||||
<property name="width">1</property>
|
<property name="width">1</property>
|
||||||
<property name="height">1</property>
|
<property name="height">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
@ -256,6 +256,38 @@
|
|||||||
<property name="height">1</property>
|
<property name="height">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="label28">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
|
<property name="label" translatable="yes">Poll C_PU usage</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="mnemonic_widget">prefs-stats-enable-cpu</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="left_attach">0</property>
|
||||||
|
<property name="top_attach">1</property>
|
||||||
|
<property name="width">1</property>
|
||||||
|
<property name="height">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCheckButton" id="prefs-stats-enable-cpu">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">False</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
|
<property name="draw_indicator">True</property>
|
||||||
|
<signal name="toggled" handler="on_prefs_stats_enable_cpu_toggled" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="left_attach">1</property>
|
||||||
|
<property name="top_attach">1</property>
|
||||||
|
<property name="width">1</property>
|
||||||
|
<property name="height">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
@ -343,6 +343,8 @@ class vmmConfig(object):
|
|||||||
|
|
||||||
|
|
||||||
# Disable/Enable different stats polling
|
# Disable/Enable different stats polling
|
||||||
|
def get_stats_enable_cpu_poll(self):
|
||||||
|
return self.conf.get("/stats/enable-cpu-poll")
|
||||||
def get_stats_enable_disk_poll(self):
|
def get_stats_enable_disk_poll(self):
|
||||||
return self.conf.get("/stats/enable-disk-poll")
|
return self.conf.get("/stats/enable-disk-poll")
|
||||||
def get_stats_enable_net_poll(self):
|
def get_stats_enable_net_poll(self):
|
||||||
@ -350,6 +352,8 @@ class vmmConfig(object):
|
|||||||
def get_stats_enable_memory_poll(self):
|
def get_stats_enable_memory_poll(self):
|
||||||
return self.conf.get("/stats/enable-memory-poll")
|
return self.conf.get("/stats/enable-memory-poll")
|
||||||
|
|
||||||
|
def set_stats_enable_cpu_poll(self, val):
|
||||||
|
self.conf.set("/stats/enable-cpu-poll", val)
|
||||||
def set_stats_enable_disk_poll(self, val):
|
def set_stats_enable_disk_poll(self, val):
|
||||||
self.conf.set("/stats/enable-disk-poll", val)
|
self.conf.set("/stats/enable-disk-poll", val)
|
||||||
def set_stats_enable_net_poll(self, val):
|
def set_stats_enable_net_poll(self, val):
|
||||||
@ -357,6 +361,8 @@ class vmmConfig(object):
|
|||||||
def set_stats_enable_memory_poll(self, val):
|
def set_stats_enable_memory_poll(self, val):
|
||||||
self.conf.set("/stats/enable-memory-poll", val)
|
self.conf.set("/stats/enable-memory-poll", val)
|
||||||
|
|
||||||
|
def on_stats_enable_cpu_poll_changed(self, cb, row=None):
|
||||||
|
return self.conf.notify_add("/stats/enable-cpu-poll", cb, row)
|
||||||
def on_stats_enable_disk_poll_changed(self, cb, row=None):
|
def on_stats_enable_disk_poll_changed(self, cb, row=None):
|
||||||
return self.conf.notify_add("/stats/enable-disk-poll", cb, row)
|
return self.conf.notify_add("/stats/enable-disk-poll", cb, row)
|
||||||
def on_stats_enable_net_poll_changed(self, cb, row=None):
|
def on_stats_enable_net_poll_changed(self, cb, row=None):
|
||||||
|
@ -2498,7 +2498,8 @@ class vmmDetails(vmmGObjectUI):
|
|||||||
dsk_txt = _("Disabled")
|
dsk_txt = _("Disabled")
|
||||||
net_txt = _("Disabled")
|
net_txt = _("Disabled")
|
||||||
|
|
||||||
cpu_txt = "%d %%" % self.vm.guest_cpu_time_percentage()
|
if self.config.get_stats_enable_cpu_poll():
|
||||||
|
cpu_txt = "%d %%" % self.vm.guest_cpu_time_percentage()
|
||||||
|
|
||||||
if self.config.get_stats_enable_memory_poll():
|
if self.config.get_stats_enable_memory_poll():
|
||||||
cur_vm_memory = self.vm.stats_memory()
|
cur_vm_memory = self.vm.stats_memory()
|
||||||
|
@ -261,6 +261,7 @@ class vmmDomain(vmmLibvirtObject):
|
|||||||
self.mem_stats_supported = False
|
self.mem_stats_supported = False
|
||||||
|
|
||||||
self._enable_mem_stats = False
|
self._enable_mem_stats = False
|
||||||
|
self._enable_cpu_stats = False
|
||||||
|
|
||||||
self._enable_net_poll = False
|
self._enable_net_poll = False
|
||||||
self._stats_net_supported = True
|
self._stats_net_supported = True
|
||||||
@ -303,19 +304,23 @@ class vmmDomain(vmmLibvirtObject):
|
|||||||
self.toggle_sample_network_traffic()
|
self.toggle_sample_network_traffic()
|
||||||
self.toggle_sample_disk_io()
|
self.toggle_sample_disk_io()
|
||||||
self.toggle_sample_mem_stats()
|
self.toggle_sample_mem_stats()
|
||||||
|
self.toggle_sample_cpu_stats()
|
||||||
|
|
||||||
self.force_update_status(from_event=True)
|
self.force_update_status(from_event=True)
|
||||||
|
|
||||||
# Hook up listeners that need to be cleaned up
|
# Hook up listeners that need to be cleaned up
|
||||||
|
self.add_gconf_handle(
|
||||||
|
self.config.on_stats_enable_cpu_poll_changed(
|
||||||
|
self.toggle_sample_cpu_stats))
|
||||||
self.add_gconf_handle(
|
self.add_gconf_handle(
|
||||||
self.config.on_stats_enable_net_poll_changed(
|
self.config.on_stats_enable_net_poll_changed(
|
||||||
self.toggle_sample_network_traffic))
|
self.toggle_sample_network_traffic))
|
||||||
self.add_gconf_handle(
|
self.add_gconf_handle(
|
||||||
self.config.on_stats_enable_disk_poll_changed(
|
self.config.on_stats_enable_disk_poll_changed(
|
||||||
self.toggle_sample_disk_io))
|
self.toggle_sample_disk_io))
|
||||||
self.add_gconf_handle(
|
self.add_gconf_handle(
|
||||||
self.config.on_stats_enable_memory_poll_changed(
|
self.config.on_stats_enable_memory_poll_changed(
|
||||||
self.toggle_sample_mem_stats))
|
self.toggle_sample_mem_stats))
|
||||||
|
|
||||||
self.connect("status-changed", self._update_start_vcpus)
|
self.connect("status-changed", self._update_start_vcpus)
|
||||||
self.connect("pre-startup", self._prestartup_nodedev_check)
|
self.connect("pre-startup", self._prestartup_nodedev_check)
|
||||||
@ -1422,6 +1427,9 @@ class vmmDomain(vmmLibvirtObject):
|
|||||||
#################
|
#################
|
||||||
|
|
||||||
def _sample_cpu_stats(self, info, now):
|
def _sample_cpu_stats(self, info, now):
|
||||||
|
if not self._enable_cpu_stats:
|
||||||
|
return 0, 0, 0, 0
|
||||||
|
|
||||||
prevCpuTime = 0
|
prevCpuTime = 0
|
||||||
prevTimestamp = 0
|
prevTimestamp = 0
|
||||||
cpuTime = 0
|
cpuTime = 0
|
||||||
@ -1523,6 +1531,9 @@ class vmmDomain(vmmLibvirtObject):
|
|||||||
def toggle_sample_mem_stats(self, ignore=None):
|
def toggle_sample_mem_stats(self, ignore=None):
|
||||||
self._enable_mem_stats = self.config.get_stats_enable_memory_poll()
|
self._enable_mem_stats = self.config.get_stats_enable_memory_poll()
|
||||||
|
|
||||||
|
def toggle_sample_cpu_stats(self, ignore=None):
|
||||||
|
self._enable_cpu_stats = self.config.get_stats_enable_cpu_poll()
|
||||||
|
|
||||||
|
|
||||||
###################
|
###################
|
||||||
# Stats accessors #
|
# Stats accessors #
|
||||||
@ -1838,7 +1849,9 @@ class vmmDomain(vmmLibvirtObject):
|
|||||||
if not self._using_events():
|
if not self._using_events():
|
||||||
self._invalidate_xml()
|
self._invalidate_xml()
|
||||||
|
|
||||||
info = self._backend.info()
|
info = []
|
||||||
|
if not self._using_events() or self._enable_cpu_stats:
|
||||||
|
info = self._backend.info()
|
||||||
|
|
||||||
if stats_update:
|
if stats_update:
|
||||||
self._tick_stats(info)
|
self._tick_stats(info)
|
||||||
|
@ -189,6 +189,7 @@ class vmmManager(vmmGObjectUI):
|
|||||||
|
|
||||||
# Initialize stat polling columns based on global polling
|
# Initialize stat polling columns based on global polling
|
||||||
# preferences (we want signal handlers for this)
|
# preferences (we want signal handlers for this)
|
||||||
|
self.enable_polling(COL_GUEST_CPU)
|
||||||
self.enable_polling(COL_DISK)
|
self.enable_polling(COL_DISK)
|
||||||
self.enable_polling(COL_NETWORK)
|
self.enable_polling(COL_NETWORK)
|
||||||
self.enable_polling(COL_MEM)
|
self.enable_polling(COL_MEM)
|
||||||
@ -277,15 +278,17 @@ class vmmManager(vmmGObjectUI):
|
|||||||
# Register callbacks with the global stats enable/disable values
|
# Register callbacks with the global stats enable/disable values
|
||||||
# that disable the associated vmlist widgets if reporting is disabled
|
# that disable the associated vmlist widgets if reporting is disabled
|
||||||
self.add_gconf_handle(
|
self.add_gconf_handle(
|
||||||
self.config.on_stats_enable_disk_poll_changed(self.enable_polling,
|
self.config.on_stats_enable_cpu_poll_changed(
|
||||||
COL_DISK))
|
self.enable_polling, COL_GUEST_CPU))
|
||||||
self.add_gconf_handle(
|
self.add_gconf_handle(
|
||||||
self.config.on_stats_enable_net_poll_changed(self.enable_polling,
|
self.config.on_stats_enable_disk_poll_changed(
|
||||||
COL_NETWORK))
|
self.enable_polling, COL_DISK))
|
||||||
|
self.add_gconf_handle(
|
||||||
|
self.config.on_stats_enable_net_poll_changed(
|
||||||
|
self.enable_polling, COL_NETWORK))
|
||||||
self.add_gconf_handle(
|
self.add_gconf_handle(
|
||||||
self.config.on_stats_enable_memory_poll_changed(
|
self.config.on_stats_enable_memory_poll_changed(
|
||||||
self.enable_polling,
|
self.enable_polling, COL_MEM))
|
||||||
COL_MEM))
|
|
||||||
|
|
||||||
self.toggle_guest_cpu_usage_visible_widget()
|
self.toggle_guest_cpu_usage_visible_widget()
|
||||||
self.toggle_host_cpu_usage_visible_widget()
|
self.toggle_host_cpu_usage_visible_widget()
|
||||||
@ -982,6 +985,9 @@ class vmmManager(vmmGObjectUI):
|
|||||||
return cmp(obj1.network_traffic_rate(), obj2.network_traffic_rate())
|
return cmp(obj1.network_traffic_rate(), obj2.network_traffic_rate())
|
||||||
|
|
||||||
def enable_polling(self, column):
|
def enable_polling(self, column):
|
||||||
|
if column == COL_GUEST_CPU:
|
||||||
|
widgn = ["menu_view_stats_guest_cpu", "menu_view_stats_host_cpu"]
|
||||||
|
do_enable = self.config.get_stats_enable_cpu_poll()
|
||||||
if column == COL_DISK:
|
if column == COL_DISK:
|
||||||
widgn = "menu_view_stats_disk"
|
widgn = "menu_view_stats_disk"
|
||||||
do_enable = self.config.get_stats_enable_disk_poll()
|
do_enable = self.config.get_stats_enable_disk_poll()
|
||||||
@ -991,18 +997,19 @@ class vmmManager(vmmGObjectUI):
|
|||||||
elif column == COL_MEM:
|
elif column == COL_MEM:
|
||||||
widgn = "menu_view_stats_memory"
|
widgn = "menu_view_stats_memory"
|
||||||
do_enable = self.config.get_stats_enable_memory_poll()
|
do_enable = self.config.get_stats_enable_memory_poll()
|
||||||
widget = self.widget(widgn)
|
|
||||||
|
|
||||||
tool_text = ""
|
for w in util.listify(widgn):
|
||||||
|
widget = self.widget(w)
|
||||||
|
tool_text = ""
|
||||||
|
|
||||||
if do_enable:
|
if do_enable:
|
||||||
widget.set_sensitive(True)
|
widget.set_sensitive(True)
|
||||||
else:
|
else:
|
||||||
if widget.get_active():
|
if widget.get_active():
|
||||||
widget.set_active(False)
|
widget.set_active(False)
|
||||||
widget.set_sensitive(False)
|
widget.set_sensitive(False)
|
||||||
tool_text = _("Disabled in preferences dialog.")
|
tool_text = _("Disabled in preferences dialog.")
|
||||||
widget.set_tooltip_text(tool_text)
|
widget.set_tooltip_text(tool_text)
|
||||||
|
|
||||||
def _toggle_graph_helper(self, do_show, col, datafunc, menu):
|
def _toggle_graph_helper(self, do_show, col, datafunc, menu):
|
||||||
img = -1
|
img = -1
|
||||||
|
@ -45,6 +45,7 @@ class vmmPreferences(vmmGObjectUI):
|
|||||||
self.refresh_add_spice_usbredir()
|
self.refresh_add_spice_usbredir()
|
||||||
self.refresh_storage_format()
|
self.refresh_storage_format()
|
||||||
self.refresh_cpu_default()
|
self.refresh_cpu_default()
|
||||||
|
self.refresh_cpu_poll()
|
||||||
self.refresh_disk_poll()
|
self.refresh_disk_poll()
|
||||||
self.refresh_net_poll()
|
self.refresh_net_poll()
|
||||||
self.refresh_memory_poll()
|
self.refresh_memory_poll()
|
||||||
@ -71,6 +72,7 @@ class vmmPreferences(vmmGObjectUI):
|
|||||||
"on_prefs_add_spice_usbredir_changed": self.change_add_spice_usbredir,
|
"on_prefs_add_spice_usbredir_changed": self.change_add_spice_usbredir,
|
||||||
"on_prefs_storage_format_changed": self.change_storage_format,
|
"on_prefs_storage_format_changed": self.change_storage_format,
|
||||||
"on_prefs_cpu_default_changed": self.change_cpu_default,
|
"on_prefs_cpu_default_changed": self.change_cpu_default,
|
||||||
|
"on_prefs_stats_enable_cpu_toggled": self.change_cpu_poll,
|
||||||
"on_prefs_stats_enable_disk_toggled": self.change_disk_poll,
|
"on_prefs_stats_enable_disk_toggled": self.change_disk_poll,
|
||||||
"on_prefs_stats_enable_net_toggled": self.change_net_poll,
|
"on_prefs_stats_enable_net_toggled": self.change_net_poll,
|
||||||
"on_prefs_stats_enable_memory_toggled": self.change_memory_poll,
|
"on_prefs_stats_enable_memory_toggled": self.change_memory_poll,
|
||||||
@ -214,6 +216,9 @@ class vmmPreferences(vmmGObjectUI):
|
|||||||
val = self.config.get_default_cpu_setting(raw=True)
|
val = self.config.get_default_cpu_setting(raw=True)
|
||||||
uiutil.set_row_selection(combo, val)
|
uiutil.set_row_selection(combo, val)
|
||||||
|
|
||||||
|
def refresh_cpu_poll(self):
|
||||||
|
self.widget("prefs-stats-enable-cpu").set_active(
|
||||||
|
self.config.get_stats_enable_cpu_poll())
|
||||||
def refresh_disk_poll(self):
|
def refresh_disk_poll(self):
|
||||||
self.widget("prefs-stats-enable-disk").set_active(
|
self.widget("prefs-stats-enable-disk").set_active(
|
||||||
self.config.get_stats_enable_disk_poll())
|
self.config.get_stats_enable_disk_poll())
|
||||||
@ -355,6 +360,8 @@ class vmmPreferences(vmmGObjectUI):
|
|||||||
typ = uiutil.get_list_selection(src, 0) or "default"
|
typ = uiutil.get_list_selection(src, 0) or "default"
|
||||||
self.config.set_default_cpu_setting(typ.lower())
|
self.config.set_default_cpu_setting(typ.lower())
|
||||||
|
|
||||||
|
def change_cpu_poll(self, src):
|
||||||
|
self.config.set_stats_enable_cpu_poll(src.get_active())
|
||||||
def change_disk_poll(self, src):
|
def change_disk_poll(self, src):
|
||||||
self.config.set_stats_enable_disk_poll(src.get_active())
|
self.config.set_stats_enable_disk_poll(src.get_active())
|
||||||
def change_net_poll(self, src):
|
def change_net_poll(self, src):
|
||||||
|
Loading…
Reference in New Issue
Block a user