1
0
Fork 0
This commit is contained in:
Jan Kaluza 2012-04-17 09:48:16 +02:00
parent 12a146dee9
commit 7ceef4705f
2 changed files with 37 additions and 5 deletions

View file

@ -3,6 +3,7 @@ import tuned.plugins
import tuned.logs
import tuned.monitors
import tuned.utils.commands
import tuned.utils.storage
import struct
log = tuned.logs.get()
@ -50,6 +51,7 @@ class DiskPlugin(tuned.plugins.Plugin):
return {
"elevator" : "",
"disk_alpm" : "",
"disk_apm" : "",
}
def _update_idle(self, dev):
@ -98,6 +100,7 @@ class DiskPlugin(tuned.plugins.Plugin):
if self.devidle[dev]["LEVEL"] > 0:
os.system("hdparm -S0 -B255 /dev/"+dev+" > /dev/null 2>&1")
self._revert_elevator(dev)
self._revert_disk_apm(dev)
self._revert_disk_alpm()
@ -106,6 +109,7 @@ class DiskPlugin(tuned.plugins.Plugin):
for dev, devload in load.iteritems():
if not self._elevator_set:
self._apply_elevator(dev)
self._apply_disk_apm(dev)
self._init_stats(dev)
self._update_stats(dev, devload)
@ -140,12 +144,12 @@ class DiskPlugin(tuned.plugins.Plugin):
# Commands:
def _apply_elevator(self, dev):
sys_file = os.path.join("/sys/block/", dev, "queue/scheduler")
tuned.utils.commands.revert_file("disk", "elevator_" + dev, sys_file)
self._revert_elevator(dev)
if len(self._options["elevator"]) == 0:
return False
sys_file = os.path.join("/sys/block/", dev, "queue/scheduler")
tuned.utils.commands.set_file("disk", "elevator_" + dev, sys_file, self._options["elevator"])
return True
@ -154,9 +158,7 @@ class DiskPlugin(tuned.plugins.Plugin):
tuned.utils.commands.revert_file("disk", "elevator_" + dev, sys_file)
def _apply_disk_alpm(self):
for host in os.listdir("/sys/class/scsi_host/"):
sys_file = os.path.join("/sys/class/scsi_host/", host, "link_power_management_policy")
tuned.utils.commands.revert_file("disk", "disk_alpm", sys_file)
self._revert_disk_alpm()
if len(self._options["disk_alpm"]) == 0:
return False
@ -187,3 +189,20 @@ class DiskPlugin(tuned.plugins.Plugin):
for host in os.listdir("/sys/class/scsi_host/"):
sys_file = os.path.join("/sys/class/scsi_host/", host, "link_power_management_policy")
tuned.utils.commands.revert_file("disk", "disk_alpm", sys_file)
def _apply_disk_apm(self, dev):
self._revert_disk_apm(dev)
if len(self._options["disk_apm"]) == 0:
return False
#TODO: get current value using hdparm -B. My disk does not support it...
tuned.utils.commands.execute(["hdparm", "-B", self._options["disk_apm"], "/dev/" + dev])
return True
def _revert_disk_apm(self, dev):
storage = tuned.utils.storage.Storage.get_instance()
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]

View file

@ -21,6 +21,7 @@ import tuned.logs
import tuned.monitors
import tuned.utils.storage
import struct
from subprocess import *
log = tuned.logs.get()
@ -71,3 +72,15 @@ def set_file(key, subkey, f, data):
_write_to_file(f, data)
def execute(args):
out = ""
try:
proc = Popen(args, stdout=PIPE, stderr=PIPE)
out, err = proc.communicate()
if proc.returncode:
log.error("Executing %s error: %s" % (args[0], err[:-1]))
except (OSError,IOError) as e:
log.error("Executing %s error: %s" % (args[0], e))
return out