From 516dc1c168847a58d4ed7d19f1875932860e3814 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaroslav=20=C5=A0karvada?= Date: Thu, 28 May 2015 18:44:00 +0200 Subject: [PATCH] plugin_cpu: skip offline CPUs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jaroslav Škarvada --- tuned/plugins/plugin_cpu.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/tuned/plugins/plugin_cpu.py b/tuned/plugins/plugin_cpu.py index a00f283..217bc9a 100644 --- a/tuned/plugins/plugin_cpu.py +++ b/tuned/plugins/plugin_cpu.py @@ -73,6 +73,11 @@ class CPULatencyPlugin(base.Plugin): if self._has_intel_pstate: log.info("intel_pstate detected") + def _is_cpu_online(self, device): + sd = str(device) + # CPU0 is always online + return sd == "cpu0" or self._cmd.read_file("/sys/devices/system/cpu/%s/online" % sd).strip() == "1" + def _instance_init(self, instance): instance._has_static_tuning = True instance._has_dynamic_tuning = False @@ -171,6 +176,9 @@ class CPULatencyPlugin(base.Plugin): @command_set("governor", per_device=True) def _set_governor(self, governor, device, sim): + if not self._is_cpu_online(device): + log.debug("%s is not online, skipping" % device) + return None if governor not in self._get_available_governors(device): if not sim: log.info("ignoring governor '%s' on cpu '%s', it is not supported" % (governor, device)) @@ -187,6 +195,9 @@ class CPULatencyPlugin(base.Plugin): @command_get("governor") def _get_governor(self, device): governor = None + if not self._is_cpu_online(device): + log.debug("%s is not online, skipping" % device) + return None if self._has_cpupower: cpu_id = device.lstrip("cpu") retcode, lines = self._cmd.execute(["cpupower", "-c", cpu_id, "frequency-info", "-p"]) @@ -211,9 +222,12 @@ class CPULatencyPlugin(base.Plugin): @command_set("energy_perf_bias", per_device=True) def _set_energy_perf_bias(self, energy_perf_bias, device, sim): + if not self._is_cpu_online(device): + log.debug("%s is not online, skipping" % device) + return None if self._has_energy_perf_bias: - cpu_id = device.lstrip("cpu") if not sim: + cpu_id = device.lstrip("cpu") log.info("setting energy_perf_bias '%s' on cpu '%s'" % (energy_perf_bias, device)) self._cmd.execute(["x86_energy_perf_policy", "-c", cpu_id, str(energy_perf_bias)]) return str(energy_perf_bias) @@ -236,6 +250,9 @@ class CPULatencyPlugin(base.Plugin): @command_get("energy_perf_bias") def _get_energy_perf_bias(self, device): energy_perf_bias = None + if not self._is_cpu_online(device): + log.debug("%s is not online, skipping" % device) + return None if self._has_energy_perf_bias: cpu_id = device.lstrip("cpu") retcode, lines = self._cmd.execute(["x86_energy_perf_policy", "-c", cpu_id, "-r"])