From 566e75013214484c9d324a10941fee11832a08e6 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Mon, 20 Feb 2012 13:34:16 +0100 Subject: [PATCH] Elevators are now part of plugin_disk --- test.cfg | 5 +++-- tuned/plugins/plugin_disk.py | 38 +++++++++++++++++++++++++++++++++++ tuned/plugins/plugin_ktune.py | 25 ----------------------- 3 files changed, 41 insertions(+), 27 deletions(-) diff --git a/test.cfg b/test.cfg index f0c5271..c8eacd3 100644 --- a/test.cfg +++ b/test.cfg @@ -72,7 +72,8 @@ elevator=deadline #[my_broken_plugin] #type=broken -#[my_disk_plugin] -#type=disk +[my_disk_plugin] +type=disk +elevator=deadline diff --git a/tuned/plugins/plugin_disk.py b/tuned/plugins/plugin_disk.py index c565ae1..eb3d813 100644 --- a/tuned/plugins/plugin_disk.py +++ b/tuned/plugins/plugin_disk.py @@ -20,6 +20,7 @@ class DiskPlugin(tuned.plugins.Plugin): self.power = ["255", "225", "195", "165", "145", "125", "105", "85", "70", "55", "30", "20"] self.spindown = ["0", "250", "230", "210", "190", "170", "150", "130", "110", "90", "70", "60"] self.levels = len(self.power) + self._elevator_set = False self._load_monitor = tuned.monitors.get_repository().create("disk", devices) @@ -39,6 +40,37 @@ class DiskPlugin(tuned.plugins.Plugin): return vendor in cls._supported_vendors + @classmethod + def _get_default_options(cls): + return { + "elevator" : "", + } + + def _apply_elevator(self, dev): + if len(self._options["elevator"]) == 0: + return False + + log.debug("Applying elevator: %s < %s" % (dev, self._options["elevator"])) + try: + f = open(os.path.join("/sys/block/", dev, "queue/scheduler"), "w") + f.write(self._options["elevator"]) + f.close() + except (OSError,IOError) as e: + log.error("Setting elevator on %s error: %s" % (dev, e)) + return True + + def _revert_elevator(self, dev): + if len(self._options["elevator"]) == 0: + return + + log.debug("Applying elevator: %s < cfs" % (dev)) + try: + f = open(os.path.join("/sys/block/", dev, "queue/scheduler"), "w") + f.write("cfs") + f.close() + except (OSError,IOError) as e: + log.error("Setting elevator on %s error: %s" % (dev, e)) + def _update_idle(self, dev): idle = self.devidle.setdefault(dev, {}) idle.setdefault("LEVEL", 0) @@ -82,10 +114,14 @@ class DiskPlugin(tuned.plugins.Plugin): for dev in self.devidle.keys(): if self.devidle[dev]["LEVEL"] > 0: os.system("hdparm -S0 -B255 /dev/"+dev+" > /dev/null 2>&1") + self._revert_elevator(dev) def update_tuning(self): load = self._load_monitor.get_load() for dev, devload in load.iteritems(): + if not self._elevator_set: + self._apply_elevator(dev) + self._init_stats(dev) self._update_stats(dev, devload) self._update_idle(dev) @@ -110,3 +146,5 @@ class DiskPlugin(tuned.plugins.Plugin): log.debug("%s load: read %f, write %f" % (dev, self.stats[dev]["read"], self.stats[dev]["write"])) log.debug("%s idle: read %d, write %d, level %d" % (dev, self.devidle[dev]["read"], self.devidle[dev]["write"], self.devidle[dev]["LEVEL"])) + + self._elevator_set = True diff --git a/tuned/plugins/plugin_ktune.py b/tuned/plugins/plugin_ktune.py index 962f29f..c0fe695 100644 --- a/tuned/plugins/plugin_ktune.py +++ b/tuned/plugins/plugin_ktune.py @@ -23,11 +23,8 @@ class KTunePlugin(tuned.plugins.Plugin): @classmethod def _get_default_options(cls): - # TODO: match cciss* somehow return { - "elevator" : "", "script" : "", - "elevator_devs" : "/sys/block/sd*/queue/scheduler", } def _load_ktuned(self): @@ -37,26 +34,6 @@ class KTunePlugin(tuned.plugins.Plugin): self._scripts.append(script) return True - def _apply_elevator(self): - for dev in glob.glob(self._options["elevator_devs"]): - log.debug("Applying elevator: %s < %s" % (dev, self._options["elevator"])) - try: - f = open(dev, "w") - f.write(self._options["elevator"]) - f.close() - except (OSError,IOError) as e: - log.error("Setting elevator on %s error: %s" % (dev, e)) - return True - - def _revert_elevator(self): - for dev in glob.glob(self._options["elevator_devs"]): - log.debug("Applying elevator: %s < cfs" % (dev)) - try: - f = open(dev, "w") - f.write("cfs") - f.close() - except (OSError,IOError) as e: - log.error("Setting elevator on %s error: %s" % (dev, e)) def _call_scripts(self, arg = "start"): for script in self._scripts: @@ -72,7 +49,6 @@ class KTunePlugin(tuned.plugins.Plugin): return True def cleanup(self): - self._revert_elevator() self._call_scripts("stop") def update_tuning(self): @@ -80,5 +56,4 @@ class KTunePlugin(tuned.plugins.Plugin): return self._updated = True - self._apply_elevator() self._call_scripts()