1
0
Fork 0

Merge pull request #155 from redhat-performance/revert-140-rhbz1592743

Revert "Make copy of instance's devices before executing changes to system"
This commit is contained in:
Jaroslav Škarvada 2019-01-31 16:35:29 +01:00 committed by GitHub
commit 778576af60
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 52 additions and 63 deletions

View file

@ -6,7 +6,6 @@ import collections
from tuned.utils.commands import commands
import os
from subprocess import Popen, PIPE
import copy
log = tuned.logs.get()
@ -192,19 +191,19 @@ class Plugin(object):
# Tuning activation and deactivation.
#
def _run_for_each_device(self, instance, callback, instance_devices):
def _run_for_each_device(self, instance, callback):
if self._devices_supported:
devices = instance_devices
devices = instance.devices
else:
devices = [None, ]
for device in devices:
callback(instance, device)
def _instance_pre_static(self, instance, enabling, devices):
def _instance_pre_static(self, instance, enabling):
pass
def _instance_post_static(self, instance, enabling, devices):
def _instance_post_static(self, instance, enabling):
pass
def _call_device_script(self, instance, script, op, devices, full_rollback = False):
@ -242,10 +241,6 @@ class Plugin(object):
ret = False
return ret
def _copy_instance_devices(self, instance):
"""Return a copy of instance devices"""
return copy.copy(instance.devices)
def instance_apply_tuning(self, instance):
"""
Apply static and dynamic tuning if the plugin instance is active.
@ -253,16 +248,14 @@ class Plugin(object):
if not instance.active:
return
current_devices = self._copy_instance_devices(instance)
if instance.has_static_tuning:
self._call_device_script(instance, instance.script_pre, "apply", current_devices)
self._instance_pre_static(instance, True, current_devices)
self._instance_apply_static(instance, current_devices)
self._instance_post_static(instance, True, current_devices)
self._call_device_script(instance, instance.script_post, "apply", current_devices)
self._call_device_script(instance, instance.script_pre, "apply", instance.devices)
self._instance_pre_static(instance, True)
self._instance_apply_static(instance)
self._instance_post_static(instance, True)
self._call_device_script(instance, instance.script_post, "apply", instance.devices)
if instance.has_dynamic_tuning and self._global_cfg.get(consts.CFG_DYNAMIC_TUNING, consts.CFG_DEF_DYNAMIC_TUNING):
self._run_for_each_device(instance, self._instance_apply_dynamic, current_devices)
self._run_for_each_device(instance, self._instance_apply_dynamic)
def instance_verify_tuning(self, instance, ignore_missing):
"""
@ -271,14 +264,12 @@ class Plugin(object):
if not instance.active:
return None
current_devices = self._copy_instance_devices(instance)
if instance.has_static_tuning:
if self._call_device_script(instance, instance.script_pre, "verify", current_devices) == False:
if self._call_device_script(instance, instance.script_pre, "verify", instance.devices) == False:
return False
if self._instance_verify_static(instance, ignore_missing, current_devices) == False:
if self._instance_verify_static(instance, ignore_missing) == False:
return False
if self._call_device_script(instance, instance.script_post, "verify", current_devices) == False:
if self._call_device_script(instance, instance.script_post, "verify", instance.devices) == False:
return False
return True
else:
@ -291,37 +282,35 @@ class Plugin(object):
if not instance.active:
return
if instance.has_dynamic_tuning and self._global_cfg.get(consts.CFG_DYNAMIC_TUNING, consts.CFG_DEF_DYNAMIC_TUNING):
self._run_for_each_device(instance, self._instance_update_dynamic, self._copy_instance_devices(instance))
self._run_for_each_device(instance, self._instance_update_dynamic)
def instance_unapply_tuning(self, instance, full_rollback = False):
"""
Remove all tunings applied by the plugin instance.
"""
current_devices = self._copy_instance_devices(instance)
if instance.has_dynamic_tuning and self._global_cfg.get(consts.CFG_DYNAMIC_TUNING, consts.CFG_DEF_DYNAMIC_TUNING):
self._run_for_each_device(instance, self._instance_unapply_dynamic, current_devices)
self._run_for_each_device(instance, self._instance_unapply_dynamic)
if instance.has_static_tuning:
self._call_device_script(instance, instance.script_post, "unapply", current_devices, full_rollback = full_rollback)
self._instance_pre_static(instance, False, current_devices)
self._instance_unapply_static(instance, current_devices, full_rollback)
self._instance_post_static(instance, False, current_devices)
self._call_device_script(instance, instance.script_pre, "unapply", current_devices, full_rollback = full_rollback)
self._call_device_script(instance, instance.script_post, "unapply", instance.devices, full_rollback = full_rollback)
self._instance_pre_static(instance, False)
self._instance_unapply_static(instance, full_rollback)
self._instance_post_static(instance, False)
self._call_device_script(instance, instance.script_pre, "unapply", instance.devices, full_rollback = full_rollback)
def _instance_apply_static(self, instance, devices):
def _instance_apply_static(self, instance):
self._execute_all_non_device_commands(instance)
self._execute_all_device_commands(instance, devices)
self._execute_all_device_commands(instance, instance.devices)
def _instance_verify_static(self, instance, ignore_missing, devices):
def _instance_verify_static(self, instance, ignore_missing):
ret = True
if self._verify_all_non_device_commands(instance, ignore_missing) == False:
ret = False
if self._verify_all_device_commands(instance, devices, ignore_missing) == False:
if self._verify_all_device_commands(instance, instance.devices, ignore_missing) == False:
ret = False
return ret
def _instance_unapply_static(self, instance, devices, full_rollback = False):
self._cleanup_all_device_commands(instance, devices)
def _instance_unapply_static(self, instance, full_rollback = False):
self._cleanup_all_device_commands(instance, instance.devices)
self._cleanup_all_non_device_commands(instance)
def _instance_apply_dynamic(self, instance, device):

View file

@ -103,7 +103,7 @@ class BootloaderPlugin(base.Plugin):
log.info("removing initrd image '%s'" % self._initrd_dst_img_val)
self._cmd.unlink(self._initrd_dst_img_val)
def _instance_unapply_static(self, instance, devices, full_rollback = False):
def _instance_unapply_static(self, instance, full_rollback = False):
if full_rollback:
log.info("removing grub2 tuning previously added by Tuned")
self._remove_grub2_tuning()

View file

@ -141,8 +141,8 @@ class CPULatencyPlugin(base.Plugin):
self._set_intel_pstate_attr(attr, value)
return v
def _instance_apply_static(self, instance, devices):
super(CPULatencyPlugin, self)._instance_apply_static(instance, devices)
def _instance_apply_static(self, instance):
super(CPULatencyPlugin, self)._instance_apply_static(instance)
if not instance._first_instance:
return
@ -155,8 +155,8 @@ class CPULatencyPlugin(base.Plugin):
self._max_perf_pct_save = self._getset_intel_pstate_attr("max_perf_pct", instance.options["max_perf_pct"])
self._no_turbo_save = self._getset_intel_pstate_attr("no_turbo", instance.options["no_turbo"])
def _instance_unapply_static(self, instance, devices, full_rollback = False):
super(CPULatencyPlugin, self)._instance_unapply_static(instance, devices, full_rollback)
def _instance_unapply_static(self, instance, full_rollback = False):
super(CPULatencyPlugin, self)._instance_unapply_static(instance, full_rollback)
if instance._first_instance and self._has_intel_pstate:
self._set_intel_pstate_attr("min_perf_pct", self._min_perf_pct_save)

View file

@ -39,7 +39,7 @@ class ModulesPlugin(base.Plugin):
if retcode != 0:
log.warn("cannot insert/reinsert module '%s', reboot is required: %s" % (module, out.strip()))
def _instance_apply_static(self, instance, devices):
def _instance_apply_static(self, instance):
self._clear_modprobe_file()
s = ""
retcode = 0
@ -73,7 +73,7 @@ class ModulesPlugin(base.Plugin):
def _unquote_path(self, path):
return str(path).replace("/", "")
def _instance_verify_static(self, instance, ignore_missing, devices):
def _instance_verify_static(self, instance, ignore_missing):
ret = True
# not all modules exports all their parameteters through sysfs, so hardcode check with ignore_missing
ignore_missing = True
@ -100,7 +100,7 @@ class ModulesPlugin(base.Plugin):
ret = False
return ret
def _instance_unapply_static(self, instance, devices, full_rollback = False):
def _instance_unapply_static(self, instance, full_rollback = False):
if full_rollback:
self._clear_modprobe_file()

View file

@ -348,8 +348,8 @@ class SchedulerPlugin(base.Plugin):
affinity = self._convert_affinity(affinity)
return (rule_prio, scheduler, priority, affinity, regex)
def _instance_apply_static(self, instance, devices):
super(SchedulerPlugin, self)._instance_apply_static(instance, devices)
def _instance_apply_static(self, instance):
super(SchedulerPlugin, self)._instance_apply_static(instance)
try:
ps = self.get_processes()
except (OSError, IOError) as e:
@ -410,8 +410,8 @@ class SchedulerPlugin(base.Plugin):
self._scheduler_original = {}
self._storage.unset(self._scheduler_storage_key)
def _instance_unapply_static(self, instance, devices, full_rollback = False):
super(SchedulerPlugin, self)._instance_unapply_static(instance, devices, full_rollback)
def _instance_unapply_static(self, instance, full_rollback = False):
super(SchedulerPlugin, self)._instance_unapply_static(instance, full_rollback)
if self._daemon and instance._runtime_tuning:
instance._terminate.set()
instance._thread.join()

View file

@ -53,13 +53,13 @@ class ScriptPlugin(base.Plugin):
return False
return True
def _instance_apply_static(self, instance, devices):
super(ScriptPlugin, self)._instance_apply_static(instance, devices)
def _instance_apply_static(self, instance):
super(ScriptPlugin, self)._instance_apply_static(instance)
self._call_scripts(instance._scripts, ["start"])
def _instance_verify_static(self, instance, ignore_missing, devices):
def _instance_verify_static(self, instance, ignore_missing):
ret = True
if super(ScriptPlugin, self)._instance_verify_static(instance, ignore_missing, devices) == False:
if super(ScriptPlugin, self)._instance_verify_static(instance, ignore_missing) == False:
ret = False
args = ["verify"]
if ignore_missing:
@ -71,9 +71,9 @@ class ScriptPlugin(base.Plugin):
ret = False
return ret
def _instance_unapply_static(self, instance, devices,full_rollback = False):
def _instance_unapply_static(self, instance, full_rollback = False):
args = ["stop"]
if full_rollback:
args = args + ["full_rollback"]
self._call_scripts(reversed(instance._scripts), args)
super(ScriptPlugin, self)._instance_unapply_static(instance, devices, full_rollback)
super(ScriptPlugin, self)._instance_unapply_static(instance, full_rollback)

View file

@ -28,7 +28,7 @@ class SysctlPlugin(base.Plugin):
instance._sysctl_original = self._storage.get(storage_key, {})
if len(instance._sysctl_original) > 0:
log.info("recovering old sysctl settings from previous run")
self._instance_unapply_static(instance, self._copy_instance_devices(instance))
self._instance_unapply_static(instance)
instance._sysctl_original = {}
self._storage.unset(storage_key)
@ -38,7 +38,7 @@ class SysctlPlugin(base.Plugin):
storage_key = self._storage_key(instance.name)
self._storage.unset(storage_key)
def _instance_apply_static(self, instance, devices):
def _instance_apply_static(self, instance):
for option, value in list(instance._sysctl.items()):
original_value = self._read_sysctl(option)
if original_value != None:
@ -52,7 +52,7 @@ class SysctlPlugin(base.Plugin):
log.info("reapplying system sysctl")
self._cmd.execute(["sysctl", "--system"])
def _instance_verify_static(self, instance, ignore_missing, devices):
def _instance_verify_static(self, instance, ignore_missing):
ret = True
# override, so always skip missing
ignore_missing = True
@ -64,7 +64,7 @@ class SysctlPlugin(base.Plugin):
ret = False
return ret
def _instance_unapply_static(self, instance, devices, full_rollback = False):
def _instance_unapply_static(self, instance, full_rollback = False):
for option, value in list(instance._sysctl_original.items()):
self._write_sysctl(option, value)

View file

@ -31,7 +31,7 @@ class SysfsPlugin(base.Plugin):
def _instance_cleanup(self, instance):
pass
def _instance_apply_static(self, instance, devices):
def _instance_apply_static(self, instance):
for key, value in list(instance._sysfs.items()):
v = self._variables.expand(value)
for f in glob.iglob(key):
@ -41,7 +41,7 @@ class SysfsPlugin(base.Plugin):
else:
log.error("rejecting write to '%s' (not inside /sys)" % f)
def _instance_verify_static(self, instance, ignore_missing, devices):
def _instance_verify_static(self, instance, ignore_missing):
ret = True
for key, value in list(instance._sysfs.items()):
v = self._variables.expand(value)
@ -52,7 +52,7 @@ class SysfsPlugin(base.Plugin):
ret = False
return ret
def _instance_unapply_static(self, instance, devices, full_rollback = False):
def _instance_unapply_static(self, instance, full_rollback = False):
for key, value in list(instance._sysfs_original.items()):
self._write_sysfs(key, value)

View file

@ -95,7 +95,7 @@ class SystemdPlugin(base.Plugin):
conf = self._add_keyval(conf, consts.SYSTEMD_CPUAFFINITY_VAR, cpu_affinity_saved)
self._write_systemd_system_conf(conf)
def _instance_unapply_static(self, instance, devices, full_rollback = False):
def _instance_unapply_static(self, instance, full_rollback = False):
if full_rollback:
log.info("removing '%s' systemd tuning previously added by Tuned" % consts.SYSTEMD_CPUAFFINITY_VAR)
self._remove_systemd_tuning()