disk plugin: use new interface for plugin
This commit is contained in:
parent
719c7efe2b
commit
e990a5ad31
1 changed files with 37 additions and 31 deletions
|
|
@ -66,41 +66,48 @@ class DiskPlugin(base.Plugin):
|
||||||
self._monitors_repository.delete(instance._load_monitor)
|
self._monitors_repository.delete(instance._load_monitor)
|
||||||
instance._load_monitor = None
|
instance._load_monitor = None
|
||||||
|
|
||||||
def _instance_apply_dynamic(self, instance):
|
def _instance_apply_dynamic(self, instance, device):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def _instance_update_dynamic(self, instance):
|
def instance_update_tuning(self, instance):
|
||||||
loads = instance._load_monitor.get_load()
|
instance.current_load = instance._load_monitor.get_load()
|
||||||
for device, load in loads.iteritems():
|
super(self.__class__, self).instance_update_tuning(instance)
|
||||||
if not device in instance._stats:
|
|
||||||
self._init_stats_and_idle(instance, device)
|
|
||||||
self._update_stats(instance, device, load)
|
|
||||||
self._update_idle(instance, device)
|
|
||||||
|
|
||||||
stats = instance._stats[device]
|
def _instance_update_dynamic(self, instance, device):
|
||||||
idle = instance._idle[device]
|
if not device in instance.current_load:
|
||||||
|
return
|
||||||
|
|
||||||
# level change decision
|
load = instance.current_load[device]
|
||||||
|
if not device in instance._stats:
|
||||||
|
self._init_stats_and_idle(instance, device)
|
||||||
|
|
||||||
if idle["level"] + 1 < self._levels and idle["read"] >= self._level_steps and idle["write"] >= self._level_steps:
|
self._update_stats(instance, device, load)
|
||||||
level_change = 1
|
self._update_idle(instance, device)
|
||||||
elif idle["level"] > 0 and (idle["read"] == 0 or idle["write"] == 0):
|
|
||||||
level_change = -1
|
|
||||||
else:
|
|
||||||
level_change = 0
|
|
||||||
|
|
||||||
# change level if decided
|
stats = instance._stats[device]
|
||||||
|
idle = instance._idle[device]
|
||||||
|
|
||||||
if level_change != 0:
|
# level change decision
|
||||||
idle["level"] += level_change
|
|
||||||
new_power_level = self._power_levels[idle["level"]]
|
|
||||||
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))
|
if idle["level"] + 1 < self._levels and idle["read"] >= self._level_steps and idle["write"] >= self._level_steps:
|
||||||
tuned.utils.commands.execute(["hdparm", "-S%d" % new_spindown_level, "-B%d" % new_power_level, "/dev/%s" % device])
|
level_change = 1
|
||||||
|
elif idle["level"] > 0 and (idle["read"] == 0 or idle["write"] == 0):
|
||||||
|
level_change = -1
|
||||||
|
else:
|
||||||
|
level_change = 0
|
||||||
|
|
||||||
log.debug("%s load: read %0.2f, write %0.2f" % (device, stats["read"], stats["write"]))
|
# change level if decided
|
||||||
log.debug("%s idle: read %d, write %d, level %d" % (device, idle["read"], idle["write"], idle["level"]))
|
|
||||||
|
if level_change != 0:
|
||||||
|
idle["level"] += level_change
|
||||||
|
new_power_level = self._power_levels[idle["level"]]
|
||||||
|
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))
|
||||||
|
tuned.utils.commands.execute(["hdparm", "-S%d" % new_spindown_level, "-B%d" % new_power_level, "/dev/%s" % device])
|
||||||
|
|
||||||
|
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"]))
|
||||||
|
|
||||||
def _init_stats_and_idle(self, instance, device):
|
def _init_stats_and_idle(self, instance, device):
|
||||||
instance._stats[device] = { "new": 11 * [0], "old": 11 * [0], "max": 11 * [1] }
|
instance._stats[device] = { "new": 11 * [0], "old": 11 * [0], "max": 11 * [1] }
|
||||||
|
|
@ -131,11 +138,10 @@ class DiskPlugin(base.Plugin):
|
||||||
else:
|
else:
|
||||||
instance._idle[device][operation] = 0
|
instance._idle[device][operation] = 0
|
||||||
|
|
||||||
def _instance_unapply_dynamic(self, instance):
|
def _instance_unapply_dynamic(self, instance, device):
|
||||||
for device in instance._idle.keys():
|
if device in instance._idle and instance._idle[device]["level"] > 0:
|
||||||
if instance._idle[device]["level"] > 0:
|
log.debug("%s restoring power and spindown settings" % device)
|
||||||
log.debug("%s restoring power and spindown settings" % device)
|
tuned.utils.commands.execute(["hdparm", "-S0", "-B255", "/dev/%s" % device])
|
||||||
tuned.utils.commands.execute(["hdparm", "-S0", "-B255", "/dev/%s" % device])
|
|
||||||
|
|
||||||
def _elevator_file(self, device):
|
def _elevator_file(self, device):
|
||||||
return os.path.join("/sys/block/", device, "queue/scheduler")
|
return os.path.join("/sys/block/", device, "queue/scheduler")
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue