+cc@sddlZddlmZddlTddlZddljZddlm Z ddl Z ddl Z ej j ZdejfdYZdS(iNi(thotplug(t*(tcommandst DiskPlugincBs9eZdZdZdZdZdZedZdZ dZ dZ d Z d Z ed Zed Zd ZdZdZdZdZdZdZdZdZdZdZddZdZeddedZe de!dZ"edded Z#e de!d!Z$ed"ded#Z%e d"e!d$Z&d%Z'd&Z(ed'ded(Z)e d'e!d)Z*e+d*ded+Z,d,Z-ed-ded.Z.e d-e!d/Z/RS(0s' Plugin for tuning options of disks. c Ostt|j||ddddddddd d d d g |_d dddddddddd dg |_t|j|_d|_d|_t |_ dS(Niiiiii}iiiUiFi7iiiiiiiiiiiniZi<ig{Gz?( tsuperRt__init__t _power_levelst_spindown_levelstlent_levelst _level_stepst_load_smallestRt_cmd(tselftargstkwargs((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyRs--  cCstt|jt|_t|_t|_t|_xp|j j dD]\}|j |rP|jj |j |jr|j|j r|jj |j qqPqPWt|_dS(Ntblock(RRt _init_devicestTruet_devices_supportedt _use_hdparmtsett _free_devicest_hdparm_apm_devicest_hardware_inventoryt get_devicest_device_is_supportedtaddtsys_namet_is_hdparm_apm_supportedt_assigned_devices(R tdevice((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyRs    cCs&g|D]}|jjd|^qS(NR(Rt get_device(R tdevicestx((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_get_device_objects)scCs|jjddd|gdtjgdt\}}}|tj krdtjdt|_tS|rtj d|tj d||ftSd |krtj d |tStS( Nthdparms-Cs/dev/%st no_errorst return_errs4hdparm command not found, ignoring for other devicess#Device '%s' not supported by hdparms(rc: %s, msg: '%s')tunknowns3Driver for device '%s' does not support apm command( R texecuteterrnotENOENTRtlogtwarntFalseRtinfotdebug(R Rtrctoutterr_msg((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyR,s   cCsI|jdkoH|jjdddkoH|jdkpH|jjdkS( Ntdiskt removablet0tscsitvirtiotxentnvme(R6R7R8R9(t device_typet attributestgettNonetparentt subsystem(tclsR((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyR<scCs|jj|d|jdS(NR(Rt subscribet_hardware_events_callback(R ((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_hardware_events_initCscCs|jj|dS(N(Rt unsubscribe(R ((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_hardware_events_cleanupFscCs;|j|s|dkr7tt|j||ndS(Ntremove(RRRRB(R teventR((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyRBIscCs?|jdk r"|jj|ntt|j||dS(N(t _load_monitorR=t add_deviceRRt_added_device_apply_tuning(R tinstancet device_name((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyRJMscCs?|jdk r"|jj|ntt|j||dS(N(RHR=t remove_deviceRRt_removed_device_unapply_tuning(R RKRL((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyRNRscCs5itd6dd6dd6dd6dd6dd6dd6S(Ntdynamictelevatortapmtspindownt readaheadtreadahead_multiplytscheduler_quantum(RR=(R@((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_get_config_optionsWscCs ddgS(NRQRR((R@((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt#_get_config_options_used_by_dynamiccscCst|_d|_d|_|j|jdr|t|_|jjd|j |_ i|_ i|_ i|_ i|_nt|_d|_ dS(NiROR3(Rt_has_static_tuningt _apm_errcntt_spindown_errcntt _option_booltoptionst_has_dynamic_tuningt_monitors_repositorytcreatetassigned_devicesRHt _device_idlet_statst_idlet_spindown_change_delayedR-R=(R RK((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_instance_initjs          cCs2|jdk r.|jj|jd|_ndS(N(RHR=R^tdelete(R RK((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_instance_cleanup}scCs|rd}|j}nd}|j}|tjkr:dS|dkrOd}ne|tj krtjd|_|_tjddS|d7}|tjkrtjd|n|r||_n ||_dS(NRRRQiisIhdparm command not found, ignoring future set_apm / set_spindown commandss5disabling set_%s command: too many consecutive errors( RZRYtconststERROR_THRESHOLDR)R*R+R,R.(R R0RRtstcnt((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_update_errcnts&       cCsgtjd||jjdd|d|gdtjg\}}|j|tt|j ||jj|d|n|S(Ns%d(RRR R(R RRRRR((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_set_readaheadds cCsM|j|}|jj|d|j}t|dkrCdSt|S(NRi(RR RtstripRR=R(R RRRR((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_get_readaheadls RTc Cs|r dS|jddd|}|r|j|}|dkrGdStt||}|jj|||j||tnE|jj |}|dkrdS|j||t|jj |dS(Nt command_nameRTRL( R=t _storage_keyRRRt_storageRRR-R<tunset( R tenablingt multiplierRtverifyRt storage_keyt old_readaheadt new_readahead((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_multiply_readaheadts"    cCs|j|dS(Nsqueue/iosched/quantum(R(R R((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_scheduler_quantum_filesRUcCs9|j|}|s5|jj|dt|n|S(Ns%d(RR RR(R RRRR((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_set_scheduler_quantums cCsg|j|}|jj|d|j}t|dkr]|sYtjd|ndSt|S(NRis>disk_scheduler_quantum option is not supported for device '%s'( RR RRRR+R.R=R(R RRRR((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_get_scheduler_quantums(0t__name__t __module__t__doc__RRR#Rt classmethodRRCRERBRJRNRVRWReRgRlRnRqR~RvRwRxRRRRt command_setRRt command_getR-RRRRRRRRRtcommand_customRRRR(((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyR sZ               2              (R)tRt decoratorst tuned.logsttunedt tuned.constsRhttuned.utils.commandsRRRtlogsR<R+tPluginR(((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyts