Viewing File: /usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyo


+cc@sddlZddlmZddlTddlZddljZddlm	Z	ddl
Z
ddlZejj
ZdejfdYZdS(iNi(thotplug(t*(tcommandst
DiskPlugincBs9eZdZdZdZdZdZedZdZ	dZ
dZd	Zd
Z
edZed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
dd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_inventorytget_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\}}}|tjkrdtjdt|_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(tdevice_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(Rtunsubscribe(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
tinstancetdevice_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|tjkrtjd|_|_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	|<dS(Nschanging spindown to %dR$s-S%ds/dev/%sR%(
R+R/RR(R)R*RlRR-Rd(R
RKRtnew_spindown_levelR0R1((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_change_spindowns5cCsG|jjddd|gdtjg\}}d|koFd|kS(NR$s-Cs/dev/%sR%tstandbytsleeping(RR(R)R*(R
RR0R1((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_drive_spinnings1cCs||jkrdS|jj|}|dkr5dS||jkrW|j||n|j||||j|||j|}|j|}|dd|j	kr|d|j
kr|d|j
krd}n?|ddkr|ddks
|ddkrd}nd}|dkr?|dc|7<|j|d}|j|d}t
jd|d|jtjkr|j|r|dkrt
jd|t|j|<q|j|||n|jtjkrt
jd	||jjd
d|d|gd
tjg\}	}
|j|	tqnC|j|r|j|r|j|d}|j|||nt
jd||d|dft
jd||d|d|dfdS(Ntlevelitreadtwriteiistuning level changed to %ds;delaying spindown change to %d, drive has already spun downschanging APM_level to %dR$s-B%ds/dev/%sR%s %s load: read %0.2f, write %0.2fs$%s idle: read %d, write %d, level %d(RRHtget_device_loadR=Rbt_init_stats_and_idlet
_update_statst_update_idleRcR	R
RRR+R/RZRhRiRqRRdRnRYRR(R)R*RlR-(R
RKRtloadtstatstidletlevel_changetnew_power_levelRmR0R1((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_instance_update_dynamicsF

=	0	5"cCsjiddgd6ddgd6ddgd6|j|<idd6dd6dd	6|j|<t|j|<dS(
NiitnewtolditmaxRrRsRt(RbRcR-Rd(R
RKR((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyRvs7"c
Cs|j|d|j|d<}||j|d<gt||D]}|d|d^qA}||j|d<|j|d}gt||D]}t|^q}	|	|j|d<t|dt|	d|j|d<t|dt|	d|j|d	<dS(
NRRiitdiffRRsiRt(RbtzipRtfloat(
R
RKRtnew_loadtold_loadtnew_oldRtold_max_loadtpairtmax_load((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyRws .()cCs`xYddgD]K}|j|||jkrG|j||cd7<q
d|j||<q
WdS(NRsRtii(RbRRc(R
RKRt	operation((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyRxscCs@||jkr#tjd|ntt|jttdS(Ns<There is no dynamic tuning available for device '%s' at time(RR+R.RRt_instance_apply_dynamicRR(R
RKR((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyRscCsdS(N((R
RKR((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_instance_unapply_dynamicss/sys/block/cCs_d|krItjj||jdd|}tjj|rI|Sntjj|||S(Nt/t!(tostpathtjointreplacetexists(R
Rtsuffixtprefixtdev((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_sysfs_paths
$cCs|j|dS(Nsqueue/scheduler(R(R
R((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_elevator_filesRPt
per_devicecCs/|j|}|s+|jj||n|S(N(RRt
write_to_file(R
tvalueRtsimtsys_file((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt
_set_elevator
scCs1|j|}|jj|jj|d|S(Ntno_error(RRtget_active_optiont	read_file(R
Rtignore_missingR((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt
_get_elevatorsRQcCs||jkr7|s*tjd|dSt|Sn|jtjkr|s|jj	ddt|d|gdt
jg\}}|j|t
nt|SdSdS(Ns+apm option is not supported for device '%s'R$s-Bs/dev/R%(RR+R.R=tstrRYRhRiRR(R)R*RlR-(R
RRRR0R1((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_set_apms
:
cCs||jkr-|s)tjd|ndSd}t}|jjddd|gdtjg\}}|tjkr~dS|dkrt	}nTt
jd|t
j}|ryt
|jd}Wqtk
rt	}qXn|rtjd	|n|S(
Ns+apm option is not supported for device '%s'R$s-Bs/dev/R%is
.*=\s*(\d+).*is2could not get current APM settings for device '%s'(RR+R.R=R-RR(R)R*RtretmatchtStinttgroupt
ValueErrorterror(R
RRRterrR0R1tm((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_get_apm(s(1	

RRcCs||jkr7|s*tjd|dSt|Sn|jtjkr|s|jj	ddt|d|gdt
jg\}}|j|t
nt|SdSdS(Ns0spindown option is not supported for device '%s'R$s-Ss/dev/R%(RR+R.R=RRZRhRiRR(R)R*RlR(R
RRRR0R1((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt
_set_spindown@s
:
cCs1||jkr-|s)tjd|ndSdS(Ns0spindown option is not supported for device '%s'i(RR+R.R=(R
RR((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt
_get_spindownPs
cCs|j|dS(Nsqueue/read_ahead_kb(R(R
R((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_readahead_fileYscCs_t|jdd}t|d}t|dkr[|dddkr[|d:}n|S(NiiRji(RtsplitR=RR(R
Rtvaltv((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt	_parse_ra\s
&
RScCsB|j|}|j|}|s>|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
multiplierRtverifyRtstorage_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#RtclassmethodRRCRERBRJRNRVRWReRgRlRnRqR~RvRwRxRRRRtcommand_setRRtcommand_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.pyt<module>s

Back to Directory File Manager