diff --git a/tuned/daemon/application.py b/tuned/daemon/application.py index 501c1b4..39990fe 100644 --- a/tuned/daemon/application.py +++ b/tuned/daemon/application.py @@ -1,4 +1,4 @@ -from tuned import storage, units, monitors, plugins, profiles, exports +from tuned import storage, units, monitors, plugins, profiles, exports, hardware from tuned.exceptions import TunedException import tuned.logs import controller @@ -23,8 +23,9 @@ class Application(object): unit_factory = units.Factory() device_matcher = units.DeviceMatcher() + hardware_enumerator = hardware.Enumerator() monitors_repository = monitors.Repository() - plugins_repository = plugins.Repository(storage_factory, monitors_repository) + plugins_repository = plugins.Repository(storage_factory, monitors_repository, hardware_enumerator) unit_manager = units.Manager(plugins_repository, monitors_repository, unit_factory, device_matcher) profile_factory = profiles.Factory() diff --git a/tuned/plugins/base.py b/tuned/plugins/base.py index af76f03..36e1959 100644 --- a/tuned/plugins/base.py +++ b/tuned/plugins/base.py @@ -10,6 +10,7 @@ class Plugin(object): saving. Plugins use Monitor objects to get information from the running system. Methods requiring reimplementation: + - device_requirements(cls) - update_tuning(self) """ @@ -22,7 +23,8 @@ class Plugin(object): return {} @classmethod - def tunable_devices(cls): + def device_requirements(cls): + raise Exception("device_requirements not implemented") return None @classmethod diff --git a/tuned/plugins/repository.py b/tuned/plugins/repository.py index 6c9047a..d0f5307 100644 --- a/tuned/plugins/repository.py +++ b/tuned/plugins/repository.py @@ -8,11 +8,12 @@ __all__ = ["Repository"] class Repository(PluginLoader): - def __init__(self, storage_factory, monitor_repository): + def __init__(self, storage_factory, monitor_repository, hardware_enumerator): super(self.__class__, self).__init__() self._plugins = set() self._storage_factory = storage_factory self._monitor_repository = monitor_repository + self._hardware_enumerator = hardware_enumerator def _set_loader_parameters(self): self._namespace = "tuned.plugins" @@ -28,7 +29,10 @@ class Repository(PluginLoader): def tunable_devices(self, plugin_name): plugin_cls = self.load_plugin(plugin_name) - return plugin_cls.tunable_devices() + device_requirements = plugin_cls.device_requirements() + devices = self._hardware_enumerator.get_devices(**device_requirements) + + return map(lambda device: device.sys_name, devices) def is_supported(self, plugin_name): plugin_cls = self.load_plugin(plugin_name)