a Á]›i" ã @ sn d dl mZ d dlT ddlZddlZddlZddlZddlZddl m Z ej ¡ Z e ƒ ZG dd„ dejƒZdS )é )Úbase)Ú*é N)Úcommandsc @ s e Zd ZdZedd„ ƒZedd„ ƒZedd„ ƒZdd „ Z d d„ Z edd „ ƒZedƒdd„ ƒZ edƒdd„ ƒZedƒdd„ ƒZedƒdd„ ƒZedƒdd„ ƒZedƒdd„ ƒZdd„ Zdd „ Zd!d"„ Zed#ƒd$d%„ ƒZed&ƒd'd(„ ƒZed)ƒd*d+„ ƒZed,ƒd-d.„ ƒZd/d0„ Zd1S )2ÚVMPluginaš Tunes selected sysctl options in `/proc/sys/vm`, currently [option]`dirty_ratio`, [option]`dirty_background_ratio`, [option]`dirty_bytes`, and [option]`dirty_background_bytes`. See https://docs.kernel.org/admin-guide/sysctl/vm.html for detailed documentation of these options. Additionaly enables or disables transparent huge pages depending on the value of the [option]`transparent_hugepages` option. The option can have one of three possible values: `always`, `madvise` and `never`. .Disable transparent hugepages ==== ---- [vm] transparent_hugepages=never ---- ==== The [option]`transparent_hugepage.defrag` option specifies the defragmentation policy. Possible values for this option are `always`, `defer`, `defer+madvise`, `madvise` and `never`. For a detailed explanation of these values refer to link:https://www.kernel.org/doc/Documentation/vm/transhuge.txt[Transparent Hugepage Support]. c C s d d d d d d d dœS )N)Útransparent_hugepagesÚtransparent_hugepageútransparent_hugepage.defragÚdirty_bytesÚdirty_ratioÚdirty_background_bytesÚdirty_background_ratio© )Úselfr r ú;/usr/lib/python3.9/site-packages/tuned/plugins/plugin_vm.pyÚ_get_config_options) s ùzVMPlugin._get_config_optionsc C s2 | j | d ur.| j | d ur.t d||f ¡ d S )NzEConflicting options '%s' and '%s', this may cause undefined behavior.)ÚoptionsÚlogÚwarning)ÚinstanceÚfirstÚsecondr r r Ú _check_conflicting_dirty_options5 s z)VMPlugin._check_conflicting_dirty_optionsc C s t j d| ¡S )Nz/proc/sys/vm)ÚosÚpathÚjoin)Úoptionr r r Ú_proc_sys_vm_option_path: s z!VMPlugin._proc_sys_vm_option_pathc C s, d|_ d|_| |dd¡ | |dd¡ d S )NTFr r r r )Z_has_static_tuningZ_has_dynamic_tuningr ©r r r r r Ú_instance_init> s zVMPlugin._instance_initc C s d S ©Nr r r r r Ú_instance_cleanupD s zVMPlugin._instance_cleanupc C s d}t j |¡sd}|S )Nz#/sys/kernel/mm/transparent_hugepagez*/sys/kernel/mm/redhat_transparent_hugepage)r r Úexists)r r r r r Ú _thp_pathG s zVMPlugin._thp_pathr c C s¨ |dvr"|st dt|ƒ ¡ d S tjddd}| d¡dkrP|sLt d¡ d S tj | ¡ d ¡}tj |¡r’|sŽtj|||r†t jgnd d |S |s t d¡ d S d S )N)ÚalwaysÚneverZmadvisez-Incorrect 'transparent_hugepages' value '%s'.z /proc/cmdlineT©Zno_errorztransparent_hugepage=r zWtransparent_hugepage is already set in kernel boot cmdline, ignoring value from profileÚenabledFzDOption 'transparent_hugepages' is not supported on current hardware.)r r ÚstrÚcmdÚ read_fileÚfindÚinfor r r r# r" Ú write_to_fileÚerrnoÚENOENT)r Úvaluer ÚsimÚremoveZcmdlineÚsys_filer r r Ú_set_transparent_hugepagesO s&