ó ±2öYc@s‘ddlZddlTddlZddlmZddljZddlZddl Z ddl Z ej j ƒZ dejfd„ƒYZdS(iÿÿÿÿN(t*(tcommandstCPULatencyPlugincBs‘eZdZd„Zd„Zd„Zed„ƒZd„Zd„Z d„Z d„Z d „Z d „Z d „Zd „Zd „Zd„Zd„Zed„Zd„Zd„Zd„Zd„Zd„Zeddeƒd„ƒZedƒed„ƒZdd„Zeddeddƒd„ƒZ edƒed „ƒZ!ed!deƒd"„ƒZ"d#„Z#d$„Z$ed!ƒed%„ƒZ%RS(&sP Plugin for tuning CPU options. Powersaving, governor, required latency, etc. cOskt|j|ƒj||Žt|_t|_t|_d|_ d|_ d|_ i|_ t ƒ|_dS(N(tsupert __class__t__init__tTruet _has_pm_qost_has_energy_perf_biastFalset_has_intel_pstatetNonet_min_perf_pct_savet_max_perf_pct_savet_no_turbo_savet_governors_mapRt_cmd(tselftargstkwargs((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyRs       cCsUt|_tƒ|_x-|jjdƒD]}|jj|jƒq(Wtƒ|_dS(Ntcpu( Rt_devices_supportedtsett _free_devicest_hardware_inventoryt get_devicestaddtsys_namet_assigned_devices(Rtdevice((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt _init_devices"s   cst‡fd†|ƒS(Ncsˆjjd|ƒS(NR(Rt get_device(tx(R(s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt,s(tmap(Rtdevices((Rs</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt_get_device_objects+scCsJi dd6dd6dd6dd6dd6dd 6dd 6dd 6dd 6dd 6S(Ngš™™™™™É?tload_thresholdidt latency_lowièt latency_hight force_latencytgovernortsampling_down_factortenergy_perf_biast min_perf_pctt max_perf_pcttno_turbo(R (R((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt_get_config_options.scCst|_d}|jjddgdtj|gƒd}|dkrRt|_n)|dkrntjdƒn tjdƒdS(Nitx86_energy_perf_policys-rt no_errorsisgunable to run x86_energy_perf_policy tool, ignoring CPU energy performance bias, is the tool installed?sXyour CPU doesn't support MSR_IA32_ENERGY_PERF_BIAS, ignoring CPU energy performance bias( R RRtexecuteterrnotENOENTRtlogtwarning(Rtretcode_unsupportedtretcode((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt_check_energy_perf_bias=s +   cCs2tjjdƒ|_|jr.tjdƒndS(Ns$/sys/devices/system/cpu/intel_pstatesintel_pstate detected(tostpathtexistsR R5tinfo(R((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt_check_intel_pstateHs cCs.t|ƒ}|jjt|ƒjddƒƒS(NRt(tstrRt is_cpu_onlinetreplace(RRtsd((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt_is_cpu_onlineMs cCstjjd|ƒS(Ns3/sys/devices/system/cpu/%s/cpufreq/scaling_governor(R:R;R<(RR((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt_cpu_has_scaling_governorQscCsL|j|ƒs$tjd|ƒtS|j|ƒsHtjd|ƒtStS(Ns'%s' is not online, skippings.there is no scaling governor fo '%s', skipping(RDR5tdebugR RER(RR((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt_check_cpu_can_change_governorTscCst|_t|_|jjƒd|krät|_ytjt j tj ƒ|_ Wn.t k rƒtjdt j ƒt|_nXd|_|jddkrÄ|jjddƒ|_t|_n d|_|jƒ|jƒnt|_tjd|jƒt|jƒd|_dS(Nis-Unable to open '%s', disabling PM_QoS controlR(tloadsILatency settings from non-first CPU plugin instance '%s' will be ignored.(Rt_has_static_tuningR t_has_dynamic_tuningt _instancestvaluest_first_instanceR:topentconststPATH_CPU_DMA_LATENCYtO_WRONLYt_cpu_latency_fdtOSErrorR5terrorRR t_latencytoptionst_monitors_repositorytcreatet _load_monitorR9R>R=tnametlistR#t _first_device(Rtinstance((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt_instance_init]s&           cCsQ|jrM|jr%tj|jƒn|jdk rM|jj|jƒqMndS(N( RMRR:tcloseRRRYR RWtdelete(RR]((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt_instance_cleanup{s   cCs|jjd|dƒjƒS(Ns'/sys/devices/system/cpu/intel_pstate/%s(Rt read_fileR tstrip(Rtattr((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt_get_intel_pstate_attr‚scCs*|dk r&|jjd||ƒndS(Ns'/sys/devices/system/cpu/intel_pstate/%s(R Rt write_to_file(RRdtval((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt_set_intel_pstate_attr…s cCs3|dkrdS|j|ƒ}|j||ƒ|S(N(R ReRh(RRdtvaluetv((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt_getset_intel_pstate_attr‰s  cCs³t|j|ƒj|ƒ|js&dS|jd}|dk rO|j|ƒn|jr¯|jd|jdƒ|_ |jd|jdƒ|_ |jd|jdƒ|_ ndS(NR(R,R-R.( RRt_instance_apply_staticRMRVR t _set_latencyR RkR R R(RR]tforce_latency_value((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyRls    cCsnt|j|ƒj||ƒ|jrj|jrj|jd|jƒ|jd|jƒ|jd|jƒndS(NR,R-R.( RRt_instance_unapply_staticRMR RhR R R(RR]t full_rollback((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyRožs cCs|j||ƒdS(N(t_instance_update_dynamic(RR]R((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt_instance_apply_dynamic¦scCsh||jkrdS|jjƒd}||jdkrP|j|jdƒn|j|jdƒdS(NtsystemR%R'R&(R\RYtget_loadRVRm(RR]RRH((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyRq©s cCsdS(N((RR]R((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt_instance_unapply_dynamic´scCsjt|ƒ}|jrf|j|krftjd|ƒtjd|ƒ}tj|j |ƒ||_ndS(Nssetting new cpu latency %dti( tintRRUR5R=tstructtpackR:twriteRR(Rtlatencyt latency_bin((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyRm·s  cCs |jjd|ƒjƒjƒS(Ns>/sys/devices/system/cpu/%s/cpufreq/scaling_available_governors(RRbRctsplit(RR((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt_get_available_governors¿sR)t per_devicecCs“|j|ƒsdS||j|ƒkrL|sHtjd||fƒndS|s‰tjd||fƒ|jjd|t|ƒƒnt|ƒS(Ns7ignoring governor '%s' on cpu '%s', it is not supporteds!setting governor '%s' on cpu '%s's3/sys/devices/system/cpu/%s/cpufreq/scaling_governor(RGR R~R5R=RRfR@(RR)Rtsim((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt _set_governorÂs cCszd}|j|ƒsdS|jjd|d|ƒjƒ}t|ƒdkrV|}n|dkrvtjd|ƒn|S(Ns3/sys/devices/system/cpu/%s/cpufreq/scaling_governortno_erroris*could not get current governor on cpu '%s'(R RGRRbRctlenR5RT(RRtignore_missingR)tdata((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt _get_governorÏs"  tondemandcCsd|S(Ns7/sys/devices/system/cpu/cpufreq/%s/sampling_down_factor((RR)((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt_sampling_down_factor_pathÝsR*tpriorityi cCsd}||jkr%|jjƒnd|j|<|j|ƒ}|dkrbtjd|ƒdS||jjƒkr||j|<|j|ƒ}tj j |ƒsÀtjd||fƒdSt |ƒ}|stj d||fƒ|j j||ƒqn|S(NsIignoring sampling_down_factor setting for CPU '%s', cannot match governorsTignoring sampling_down_factor setting for CPU '%s', governor '%s' doesn't support its6setting sampling_down_factor to '%s' for governor '%s'(R RtclearR†R5RFRLRˆR:R;R<R@R=RRf(RR*RR€RgR)R;((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt_set_sampling_down_factoràs&    cCs`|j|d|ƒ}|dkr%dS|j|ƒ}tjj|ƒsJdS|jj|ƒjƒS(NR„( R†R RˆR:R;R<RRbRc(RRR„R)R;((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt_get_sampling_down_factorûs R+cCs|j|ƒs$tjd|ƒdS|jrˆ|s~|jdƒ}tjd||fƒ|jjdd|t |ƒgƒnt |ƒSdSdS(Ns%s is not online, skippingRs)setting energy_perf_bias '%s' on cpu '%s'R0s-c( RDR5RFR RtlstripR=RR2R@(RR+RR€tcpu_id((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt_set_energy_perf_biass % cCsYyt|ƒ}WnBtk rT}yt|dƒ}WqUtk rP}|}qUXnX|S(Ni(Rwt ValueError(RtsRjte((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt_try_parse_numscCs.idd6dd6dd6j|j|ƒ|ƒS(Nt performanceitnormalit powersavei(tgetR“(RR‘((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt_energy_perf_policy_to_humansc CsÈd}|j|ƒs*tjd|ƒdS|jrÄ|jdƒ}|jjdd|dgƒ\}}|dkrÄxL|jƒD];}|j ƒ}t |ƒdkr|j |dƒ}PqqWqÄn|S( Ns%s is not online, skippingRR0s-cs-riii( R RDR5RFRRRR2t splitlinesR}RƒR˜( RRR„R+RŽR8tlinestlinetl((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyt_get_energy_perf_bias s $  (&t__name__t __module__t__doc__RRR$t classmethodR/R9R>RDRERGR^RaReRhRkRlR RoRrRqRuRmR~t command_setRRt command_getR†RˆR‹RŒRR“R˜R(((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyRsD                 !    (tbaset decoratorst tuned.logsttunedttuned.utils.commandsRt tuned.constsROR:RxR3tlogsR—R5tPluginR(((s</usr/lib/python2.7/site-packages/tuned/plugins/plugin_cpu.pyts