MINI MINI MANI MO

Path : /usr/lib/python2.7/site-packages/tuned/plugins/
File Upload :
Current File : //usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyo


=[c@sddlZddlmZddlTddlZddljZddlm	Z	ddl
Z
ddlZejj
ZdejfdYZdS(iNi(thotplug(t*(tcommandst
DiskPlugincBs'eZdZdZdZdZedZdZdZ	dZ
dZd	Zed
Z
edZdZd
ZdZdZdZdZdZdZdZdZddZdZeddedZededZ eddedZ!ededZ"ed ded!Z#ed ed"Z$d#Z%d$Z&ed%ded&Z'ed%ed'Z(e)d(ded)Z*d*Z+ed+ded,Z,ed+ed-Z-RS(.s'
	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--		cCsgt|_t|_x?|jjdD]+}|j|r(|jj|jq(q(Wt|_	dS(Ntblock(
tTruet_devices_supportedtsett
_free_devicest_hardware_inventorytget_devicest_device_is_supportedtaddtsys_namet_assigned_devices(R
tdevice((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt
_init_devicess	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$scCsI|jdkoH|jjdddkoH|jdkpH|jjdkS(Ntdiskt	removablet0tscsitvirtiotxen(R$R%R&(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_init.scCs|jj|dS(N(Rtunsubscribe(R
((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_hardware_events_cleanup1scCs/|j|r+tt|j||ndS(N(RRRR/(R
teventR((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyR/4scCs?|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.pyR68scCs?|jdk	r"|jj|ntt|j||dS(N(R4R*t
remove_deviceRRt_removed_device_unapply_tuning(R
R7R8((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyR:=scCs5itd6dd6dd6dd6dd6dd6dd6S(Ntdynamictelevatortapmtspindownt	readaheadtreadahead_multiplytscheduler_quantum(RR*(R-((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_get_config_optionsBscCs
ddgS(NR=R>((R-((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt#_get_config_options_used_by_dynamicNscCst|_d|_d|_|j|jdr|t|_|jjd|j	|_
i|_i|_i|_
i|_nt|_d|_
dS(NiR;R!(Rt_has_static_tuningt_apm_errcntt_spindown_errcntt_option_booltoptionst_has_dynamic_tuningt_monitors_repositorytcreateRR4t_device_idlet_statst_idlet_spindown_change_delayedtFalseR*(R
R7((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_instance_initUs								cCs2|jdk	r.|jj|jd|_ndS(N(R4R*RJtdelete(R
R7((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_instance_cleanupfscCs|rd}|j}nd}|j}|tjkr:dS|dkrOd}ne|tjkrtjd|_|_tjddS|d7}|tjkrtjd|n|r||_n	||_dS(NR>R=iisIhdparm command not found, ignoring future set_apm / set_spindown commandss5disabling set_%s command: too many consecutive errors(	RFREtconststERROR_THRESHOLDterrnotENOENTtlogtwarntinfo(R
trcR>tstcnt((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_update_errcntks&		

cCsgtjd||jjdd|d|gdtjg\}}|j|tt|j	|<dS(Nschanging spindown to %dthdparms-S%ds/dev/%st	no_errors(
RXtdebugRtexecuteRVRWR^RRPRO(R
R7Rtnew_spindown_levelR[tout((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RbRVRW(R
RR[Rd((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_drive_spinnings1cCs|jj|}|dkr"dS||jkrD|j||n|j||||j|||j|}|j|}|dd|jkr|d|j	kr|d|j	krd}n?|ddkr|ddks|ddkrd}nd}|dkr,|dc|7<|j
|d}|j|d}tj
d|d|jtjkr|j|r|dkrtj
d|t|j|<q|j|||n|jtjkrotj
d	||jjd
d|d|gd
tjg\}	}
|j|	tqonC|j|ro|j|ro|j|d}|j|||ntj
d||d|dftj
d||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(R4tget_device_loadR*RMt_init_stats_and_idlet
_update_statst_update_idleRNR	R
RRRXRaRFRTRURhRROReRERRbRVRWR^RP(R
R7Rtloadtstatstidletlevel_changetnew_power_levelRcR[Rd((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_instance_update_dynamicsB

=	0	5"cCsjiddgd6ddgd6ddgd6|j|<idd6dd6dd	6|j|<t|j|<dS(
NiitnewtolditmaxRiRjRk(RMRNRPRO(R
R7R((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyRms7"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(
NRvRwiitdiffRxRjiRk(RMtzipRxtfloat(
R
R7Rtnew_loadtold_loadtnew_oldRytold_max_loadtpairtmax_load((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyRns .()cCs`xYddgD]K}|j|||jkrG|j||cd7<q
d|j||<q
WdS(NRjRkii(RMRRN(R
R7Rt	operation((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyRoscCsdS(N((R
R7R((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_filesR<t
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_elevatorscCs1|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_elevatorsR=cCsw|jtjkro|se|jjddt|d|gdtjg\}}|j|t	nt|SdSdS(NR_s-Bs/dev/R`(RERTRURRbtstrRVRWR^RPR*(R
RRRR[Rd((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_set_apms:
cCsd}t}|jjddd|gdtjg\}}|tjkrQdS|dkrft}nTtjd|tj	}|ryt
|jd}Wqtk
rt}qXn|rt
jd|n|S(	NR_s-Bs/dev/R`is
.*=\s*(\d+).*is2could not get current APM settings for device '%s'(R*RPRRbRVRWRtretmatchtStinttgroupt
ValueErrorRXterror(R
RRRterrR[Rdtm((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_get_apms 1	

R>cCsw|jtjkro|se|jjddt|d|gdtjg\}}|j|t	nt|SdSdS(NR_s-Ss/dev/R`(RFRTRURRbRRVRWR^RR*(R
RRRR[Rd((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt
_set_spindowns:
cCsdS(Ni((R
RR((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt
_get_spindownscCs|j|dS(Nsqueue/read_ahead_kb(R(R
R((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_readahead_file#scCs_t|jdd}t|d}t|dkr[|dddkr[|d:}n|S(NiiR\i(RtsplitR*RR(R
Rtvaltv((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt	_parse_ra&s
&
R?cCsB|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_readahead.s
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_readahead6s
R@c	Cs|r
dS|jddd|}|r|j|}|dkrGdStt||}|jj|||j||tnE|jj	|}|dkrdS|j||t|jj
|dS(Ntcommand_nameR@R8(R*t_storage_keyRRR{t_storageRRRPR)tunset(	R
tenablingt
multiplierRtverifyRtstorage_keyt
old_readaheadt
new_readahead((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_multiply_readahead>s"		cCs|j|dS(Nsqueue/iosched/quantum(R(R
R((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_scheduler_quantum_fileSsRAcCs9|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_quantumVs cCsc|j|}|jj|d|j}t|dkrY|sUtjdndSt|S(NRis9disk_scheduler_quantum option is not supported by this HW(	RRRRRRXRZR*R(R
RRRR((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt_get_scheduler_quantum]s(.t__name__t
__module__t__doc__RRR tclassmethodRR0R2R/R6R:RBRCRQRSR^ReRhRuRmRnRoRRRtcommand_setRRtcommand_getRPRRRRRRRRRtcommand_customRRRR(((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyRsV	
														0						
	
						(RVtRt
decoratorst
tuned.logsttunedttuned.constsRTttuned.utils.commandsRRRtlogsR)RXtPluginR(((s=/usr/lib/python2.7/site-packages/tuned/plugins/plugin_disk.pyt<module>s


OHA YOOOO