a ”ˆ«hã@s„ddlZddlmZddlTddlZddlTddlmZddl m Z ddl Z ddl Z ej  ¡ZddgZdd gZGd d „d ejƒZdS) éNé)Úbase)Ú*)ÚcommandsZbase_reachable_timeZ retrans_timez /run/sysctl.dz /etc/sysctl.dcs€eZdZdZ‡fdd„Zdd„Zdd„Zdd „Zd d „Ze j fd d „Z dd„Z dd„Z dd„Zdd„Zdd„Zddd„Z‡ZS)Ú SysctlPlugina5 Sets various kernel parameters at runtime. This plug-in is used for applying custom `sysctl` settings and should only be used to change system settings that are not covered by other *TuneD* plug-ins. If the settings are covered by other *TuneD* plug-ins, use those plug-ins instead. The syntax for this plug-in is `_key_=_value_`, where `_key_` is the same as the key name provided by the `sysctl` utility. .Adjusting the kernel runtime kernel.sched_min_granularity_ns value ==== ---- [sysctl] kernel.sched_min_granularity_ns=3000000 ---- ==== cs(tt|ƒj|i|¤Žd|_tƒ|_dS)NT)ÚsuperrÚ__init__Z_has_dynamic_optionsrÚ_cmd)ÚselfÚargsÚkwargs©Ú __class__©ú?/usr/lib/python3.9/site-packages/tuned/plugins/plugin_sysctl.pyr(szSysctlPlugin.__init__cCshd|_d|_| |j¡}|j |i¡|_t|jƒdkr\t  d¡|  |¡i|_|j  |¡|j |_ dS)NFTrz0recovering old sysctl settings from previous run)Z_has_dynamic_tuningZ_has_static_tuningÚ _storage_keyÚnameÚ_storageÚgetÚ_sysctl_originalÚlenÚlogÚinfoÚ_instance_unapply_staticÚunsetÚoptionsÚ_sysctl©r ÚinstanceÚ storage_keyrrrÚ_instance_init-s    zSysctlPlugin._instance_initcCs| |j¡}|j |¡dS©N)rrrrrrrrÚ_instance_cleanup=s zSysctlPlugin._instance_cleanupcCsÀt|j ¡ƒD]h\}}| |¡}|dur8t d|¡q|j |j  |¡¡}|  ||¡}|dur||j |<|  ||¡q|  |j¡}|j ||j ¡|j tjtj¡r¼t d¡| |j¡dS)NzDsysctl option %s will not be set, failed to read the original value.zreapplying system sysctl)ÚlistrÚitemsÚ _read_sysctlrÚerrorÚ _variablesÚexpandr ÚunquoteÚ_process_assignment_modifiersrÚ _write_sysctlrrrÚsetZ _global_cfgZget_boolÚconstsZCFG_REAPPLY_SYSCTLZCFG_DEF_REAPPLY_SYSCTLrÚ_apply_system_sysctl)r rÚoptionÚvalueÚoriginal_valueZ new_valuerrrrÚ_instance_apply_staticAs( ÿ ÿÿ   z#SysctlPlugin._instance_apply_staticcCsrd}d}t|j ¡ƒD]V\}}| |¡}| |j |¡|¡}|dur| ||j  |¡|j  |¡|¡dkrd}q|S)NTF) r#rr$r%r*r'r(Z _verify_valuer Z remove_ws)r rÚignore_missingZdevicesÚretr/r0Zcurr_valrrrÚ_instance_verify_staticWs $z$SysctlPlugin._instance_verify_staticcCs(t|j ¡ƒD]\}}| ||¡qdSr!)r#rr$r+)r rZrollbackr/r0rrrrcsz%SysctlPlugin._instance_unapply_staticc Csœi}tD]P}zt |¡}Wnty0YqYn0|D] }| d¡sFq6||vr6|||<q6qt| ¡ƒD]$}||}d||f}| ||¡qf| d|¡dS)Nz.confz%s/%sz/etc/sysctl.conf)ÚSYSCTL_CONFIG_DIRSÚosÚlistdirÚOSErrorÚendswithÚsortedÚkeysÚ_apply_sysctl_config_file)r Úinstance_sysctlÚfilesÚdÚflistÚfnameÚpathrrrr.gs      z!SysctlPlugin._apply_system_sysctlc Cs¾t d|¡z`t|dƒ4}t|dƒD]\}}| ||||¡q&Wdƒn1sT0Yt d|¡WnJttfy¸}z.|jtjkr¤t  d|t |ƒf¡WYd}~n d}~00dS)Nz%Applying sysctl settings from file %sÚrrz.Finished applying sysctl settings from file %sz.Error reading sysctl settings from file %s: %s) rÚdebugÚopenÚ enumerateÚ_apply_sysctl_config_liner9ÚIOErrorÚerrnoÚENOENTr&Ústr)r rCr>ÚfÚlinenoÚlineÚerrrr=zs 0ÿ   ÿz&SysctlPlugin._apply_sysctl_config_filec Csà| ¡}t|ƒdks,|ddks,|ddkr0dS| dd¡}t|ƒdkr^t d||f¡dS|\}}| ¡}t|ƒdkrt d||f¡dS| ¡}||vrÌ|j ||¡}||krÌt d|||f¡|j||d d dS) Nrú#ú;ú=réz Syntax error in file %s, line %dz2Overriding sysctl parameter '%s' from '%s' to '%s'T)r3) ÚstriprÚsplitrr&r'r(rr+) r rCrNrOr>Útmpr/r0Zinstance_valuerrrrH‡s0$  ÿ ÿÿz&SysctlPlugin._apply_sysctl_config_linecCsd|j |dd¡S)Nz /proc/sys/%sz./z/.)r Útr)r r/rrrÚ_get_sysctl_pathžszSysctlPlugin._get_sysctl_pathcCsV| |¡}|jj|dd}|dur&dS| ¡}t| d¡ƒdkrRt d|¡dS|S)N)Zerr_retÚ rzGFailed to read sysctl parameter '%s', multi-line values are unsupported)rYr Z read_filerUrrVrr&)r r/rCZcontentrrrr%¥s zSysctlPlugin._read_sysctlFcCsL| |¡}tj |¡tvr,t d|¡dS|jj|||rBt j gndddS)Nz+Refusing to set deprecated sysctl option %sFT)Zno_errorZ ignore_same) rYr7rCÚbasenameÚDEPRECATED_SYSCTL_OPTIONSrr&r Z write_to_filerJrK)r r/r0r3rCrrrr+°s  zSysctlPlugin._write_sysctl)F)Ú__name__Ú __module__Ú __qualname__Ú__doc__rr r"r2r5r-Z ROLLBACK_SOFTrr.r=rHrYr%r+Ú __classcell__rrr rrs    r)ÚreÚrZ decoratorsZ tuned.logsZtunedÚ subprocessZtuned.utils.commandsrZ tuned.constsr-rJr7Zlogsrrr\r6ZPluginrrrrrÚs    ÿ