PNG  IHDR* pHYs+ IDATx]n#; cdLb Ǚ[at¤_:uP}>!Usă cag޿ ֵNu`ݼTâabO7uL&y^wFٝA"l[|ŲHLN밪4*sG3|Dv}?+y߉{OuOAt4Jj.u]Gz*҉sP'VQKbA1u\`& Af;HWj hsO;ogTu uj7S3/QzUr&wS`M$X_L7r2;aE+ώ%vikDA:dR+%KzƉo>eOth$z%: :{WwaQ:wz%4foɹE[9<]#ERINƻv溂E%P1i01 |Jvҗ&{b?9g=^wζXn/lK::90KwrюO\!ջ3uzuGv^;騢wq<Iatv09:tt~hEG`v;3@MNZD.1]L:{ծI3`L(÷ba")Y.iljCɄae#I"1 `3*Bdz>j<fU40⨬%O$3cGt]j%Fߠ_twJ;ABU8vP3uEԑwQ V:h%))LfraqX-ۿX]v-\9I gl8tzX ]ecm)-cgʒ#Uw=Wlێn(0hPP/ӨtQ“&J35 $=]r1{tLuǮ*i0_;NƝ8;-vݏr8+U-kruȕYr0RnC]*ެ(M:]gE;{]tg(#ZJ9y>utRDRMdr9㪩̞zֹb<ģ&wzJM"iI( .ꮅX)Qw:9,i좜\Ԛi7&N0:asϓc];=ΗOӣ APqz93 y $)A*kVHZwBƺnWNaby>XMN*45~ղM6Nvm;A=jֲ.~1}(9`KJ/V F9[=`~[;sRuk]rєT!)iQO)Y$V ی ۤmzWz5IM Zb )ˆC`6 rRa}qNmUfDsWuˤV{ Pݝ'=Kֳbg,UҘVz2ﴻnjNgBb{? ߮tcsͻQuxVCIY۠:(V뺕 ٥2;t`@Fo{Z9`;]wMzU~%UA蛚dI vGq\r82iu +St`cR.6U/M9IENDB`import errno from . import hotplug from .decorators import * import tuned.logs import tuned.consts as consts from tuned.utils.commands import commands import os import re log = tuned.logs.get() class SCSIHostPlugin(hotplug.Plugin): """ `scsi_host`:: Tunes options for SCSI hosts. + The plug-in sets Aggressive Link Power Management (ALPM) to the value specified by the [option]`alpm` option. The option takes one of three values: `min_power`, `medium_power` and `max_performance`. + NOTE: ALPM is only available on SATA controllers that use the Advanced Host Controller Interface (AHCI). + .ALPM setting when extended periods of idle time are expected ==== ---- [scsi_host] alpm=min_power ---- ==== """ def __init__(self, *args, **kwargs): super(SCSIHostPlugin, self).__init__(*args, **kwargs) self._cmd = commands() def _init_devices(self): super(SCSIHostPlugin, self)._init_devices() self._devices_supported = True self._free_devices = set() for device in self._hardware_inventory.get_devices("scsi"): if self._device_is_supported(device): self._free_devices.add(device.sys_name) self._assigned_devices = set() def _get_device_objects(self, devices): return [self._hardware_inventory.get_device("scsi", x) for x in devices] @classmethod def _device_is_supported(cls, device): return device.device_type == "scsi_host" def _hardware_events_init(self): self._hardware_inventory.subscribe(self, "scsi", self._hardware_events_callback) def _hardware_events_cleanup(self): self._hardware_inventory.unsubscribe(self) def _hardware_events_callback(self, event, device): if self._device_is_supported(device): super(SCSIHostPlugin, self)._hardware_events_callback(event, device) def _added_device_apply_tuning(self, instance, device_name): super(SCSIHostPlugin, self)._added_device_apply_tuning(instance, device_name) def _removed_device_unapply_tuning(self, instance, device_name): super(SCSIHostPlugin, self)._removed_device_unapply_tuning(instance, device_name) @classmethod def _get_config_options(cls): return { "alpm" : None, } def _instance_init(self, instance): instance._has_static_tuning = True instance._has_dynamic_tuning = False def _instance_cleanup(self, instance): pass def _get_alpm_policy_file(self, device): return os.path.join("/sys/class/scsi_host/", str(device), "link_power_management_policy") @command_set("alpm", per_device = True) def _set_alpm(self, policy, device, sim, remove): if policy is None: return None policy_file = self._get_alpm_policy_file(device) if not sim: if os.path.exists(policy_file): self._cmd.write_to_file(policy_file, policy, \ no_error = [errno.ENOENT] if remove else False) else: log.info("ALPM control file ('%s') not found, skipping ALPM setting for '%s'" % (policy_file, str(device))) return None return policy @command_get("alpm") def _get_alpm(self, device, ignore_missing=False): policy_file = self._get_alpm_policy_file(device) policy = self._cmd.read_file(policy_file, no_error = True).strip() return policy if policy != "" else None