From 1b781271d6c08aeb49eb0a8c3254ed2ce3f107b1 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Tue, 17 Apr 2012 10:23:59 +0200 Subject: [PATCH] readahead_multiplier --- tuned/plugins/plugin_disk.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/tuned/plugins/plugin_disk.py b/tuned/plugins/plugin_disk.py index 5f064f2..0f53458 100644 --- a/tuned/plugins/plugin_disk.py +++ b/tuned/plugins/plugin_disk.py @@ -52,6 +52,8 @@ class DiskPlugin(tuned.plugins.Plugin): "elevator" : "", "disk_alpm" : "", "disk_apm" : "", + "disk_spindown" : "", + "disk_readahead_multiplier" : "", } def _update_idle(self, dev): @@ -101,6 +103,7 @@ class DiskPlugin(tuned.plugins.Plugin): os.system("hdparm -S0 -B255 /dev/"+dev+" > /dev/null 2>&1") self._revert_elevator(dev) self._revert_disk_apm(dev) + self._revert_disk_readahead_multiplier(dev) self._revert_disk_alpm() @@ -110,6 +113,8 @@ class DiskPlugin(tuned.plugins.Plugin): if not self._elevator_set: self._apply_elevator(dev) self._apply_disk_apm(dev) + self._apply_disk_spindown(dev) + self._apply_disk_readahead_multiplier(dev) self._init_stats(dev) self._update_stats(dev, devload) @@ -205,4 +210,33 @@ class DiskPlugin(tuned.plugins.Plugin): if storage.data["disk"].has_key("disk_apm_" + dev): tuned.utils.commands.execute(["hdparm", "-B", storage.data["disk"]["disk_apm_" + dev], "/dev/" + dev]) del storage.data["disk"]["disk_apm_" + dev] + + def _apply_disk_spindown(self, dev): + if len(self._options["disk_spindown"]) == 0: + return False + + tuned.utils.commands.execute(["hdparm", "-S", self._options["disk_spindown"], "/dev/" + dev]) + return True + + def _apply_disk_readahead_multiplier(self, dev): + self._revert_elevator(dev) + + if len(self._options["elevator"]) == 0: + return False + + sys_file = os.path.join("/sys/block/", dev, "queue/read_ahead_kb") + try: + value = open(sys_file).read().strip() + except (OSError,IOError) as e: + log.error("Reading %s error: %s" % (sys_file, e)) + return + + new_value = int(int(value) * float(self._options["disk_readahead_multiplier"])) + tuned.utils.commands.set_file("disk", "disk_readahead_multiplier_" + dev, sys_file, str(new_value)) + return True + + def _revert_disk_readahead_multiplier(self, dev): + sys_file = os.path.join("/sys/block/", dev, "queue/read_ahead_kb") + tuned.utils.commands.revert_file("disk", "disk_readahead_multiplier_" + dev, sys_file) +