plugin_disk: added err_cnt to hdparm calls
Disabled set_apm and set_spindown commands after 5 consecutive errors (individual counters). Signed-off-by: Jaroslav Škarvada <jskarvad@redhat.com>
This commit is contained in:
parent
de1bb42821
commit
71a0b2d523
2 changed files with 48 additions and 4 deletions
|
|
@ -8,6 +8,11 @@ DBUS_OBJECT = "/Tuned"
|
|||
DEFAULT_PROFILE = "balanced"
|
||||
DEFAULT_STORAGE_FILE = "/run/tuned/save.pickle"
|
||||
LOAD_DIRECTORIES = ["/usr/lib/tuned", "/etc/tuned"]
|
||||
|
||||
# max. number of consecutive errors to give up
|
||||
ERROR_THRESHOLD = 5
|
||||
|
||||
# bootloader plugin configuration
|
||||
GRUB2_CFG_FILES = ["/boot/grub2/grub.cfg", "/boot/efi/EFI/redhat/grub.cfg", "/boot/efi/EFI/fedora/grub.cfg"]
|
||||
GRUB2_TUNED_TEMPLATE_NAME = "00_tuned"
|
||||
GRUB2_TEMPLATE_HEADER_BEGIN = "### BEGIN /etc/grub.d/" + GRUB2_TUNED_TEMPLATE_NAME + " ###"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import hotplug
|
||||
from decorators import *
|
||||
import tuned.logs
|
||||
import tuned.consts as consts
|
||||
from tuned.utils.commands import commands
|
||||
import os
|
||||
import re
|
||||
|
|
@ -78,6 +79,9 @@ class DiskPlugin(hotplug.Plugin):
|
|||
def _instance_init(self, instance):
|
||||
instance._has_static_tuning = True
|
||||
|
||||
self._set_apm_errcnt = 0
|
||||
self._set_spindown_errcnt = 0
|
||||
|
||||
if self._option_bool(instance.options["dynamic"]):
|
||||
instance._has_dynamic_tuning = True
|
||||
instance._load_monitor = self._monitors_repository.create("disk", instance.devices)
|
||||
|
|
@ -93,6 +97,14 @@ class DiskPlugin(hotplug.Plugin):
|
|||
self._monitors_repository.delete(instance._load_monitor)
|
||||
instance._load_monitor = None
|
||||
|
||||
def _check_set_apm_err_threshold(self):
|
||||
if self._set_apm_errcnt >= consts.ERROR_THRESHOLD:
|
||||
log.info("disabling set_apm command, too many consecutive errors")
|
||||
|
||||
def _check_set_spindown_err_threshold(self):
|
||||
if self._set_spindown_errcnt >= consts.ERROR_THRESHOLD:
|
||||
log.info("disabling set_spindown command, too many consecutive errors")
|
||||
|
||||
def _instance_update_dynamic(self, instance, device):
|
||||
load = instance._load_monitor.get_device_load(device)
|
||||
if load is None:
|
||||
|
|
@ -124,8 +136,23 @@ class DiskPlugin(hotplug.Plugin):
|
|||
new_spindown_level = self._spindown_levels[idle["level"]]
|
||||
|
||||
log.debug("tuning level changed to %d (power %d, spindown %d)" % (idle["level"], new_power_level, new_spindown_level))
|
||||
self._cmd.execute(["hdparm", "-S%d" % new_spindown_level, "-B%d" % new_power_level, "/dev/%s" % device])
|
||||
|
||||
if self._set_spindown_errcnt < consts.ERROR_THRESHOLD and self._set_apm_errcnt < consts.ERROR_THRESHOLD:
|
||||
(rc, out) = self._cmd.execute(["hdparm", "-S%d" % new_spindown_level, "-B%d" % new_power_level, "/dev/%s" % device])
|
||||
if rc != 0:
|
||||
self._set_spindown_errcnt += 1
|
||||
self._set_apm_errcnt += 1
|
||||
self._check_set_spindown_err_threshold()
|
||||
self._check_set_apm_err_threshold()
|
||||
elif self._set_spindown_errcnt < consts.ERROR_THRESHOLD:
|
||||
(rc, out) = self._cmd.execute(["hdparm", "-S%d" % new_spindown_level, "/dev/%s" % device])
|
||||
if rc != 0:
|
||||
self._set_spindown_errcnt += 1
|
||||
self._check_set_spindown_err_threshold()
|
||||
elif self._set_apm_errcnt < consts.ERROR_THRESHOLD:
|
||||
(rc, out) = self._cmd.execute(["hdparm", "-B%d" % new_power_level, "/dev/%s" % device])
|
||||
if rc != 0:
|
||||
self._set_apm_errcnt += 1
|
||||
self._check_set_apm_err_threshold()
|
||||
log.debug("%s load: read %0.2f, write %0.2f" % (device, stats["read"], stats["write"]))
|
||||
log.debug("%s idle: read %d, write %d, level %d" % (device, idle["read"], idle["write"], idle["level"]))
|
||||
|
||||
|
|
@ -209,7 +236,13 @@ class DiskPlugin(hotplug.Plugin):
|
|||
|
||||
@command_set("apm", per_device=True)
|
||||
def _set_apm(self, value, device):
|
||||
self._cmd.execute(["hdparm", "-B", str(value), "/dev/" + device])
|
||||
if self._set_apm_errcnt < consts.ERROR_THRESHOLD:
|
||||
(rc, out) = self._cmd.execute(["hdparm", "-B", str(value), "/dev/" + device])
|
||||
if rc:
|
||||
self._set_apm_errcnt += 1
|
||||
self._check_set_apm_err_threshold()
|
||||
else:
|
||||
self._set_apm_errcnt = 0
|
||||
|
||||
@command_get("apm")
|
||||
def _get_apm(self, device):
|
||||
|
|
@ -224,7 +257,13 @@ class DiskPlugin(hotplug.Plugin):
|
|||
|
||||
@command_set("spindown", per_device=True)
|
||||
def _set_spindown(self, value, device):
|
||||
self._cmd.execute(["hdparm", "-S", str(value), "/dev/" + device])
|
||||
if self._set_spindown_errcnt < consts.ERROR_THRESHOLD:
|
||||
(rc, out) = self._cmd.execute(["hdparm", "-S", str(value), "/dev/" + device])
|
||||
if rc:
|
||||
self._set_spindown_errcnt += 1
|
||||
self._check_set_spindown_err_threshold()
|
||||
else:
|
||||
self._set_spindown_errcnt = 0
|
||||
|
||||
@command_get("spindown")
|
||||
def _get_spindown(self, device):
|
||||
|
|
|
|||
Loading…
Reference in a new issue