3
À<×es ã @ sj d dl mZ d dlT ddlZddlmZ ddlZddlZej j
ƒ Zeƒ ZdZ
dZd ZG dd„ dejƒZdS ) é )Úhotplug)Ú*é N)Úcommandsz//sys/devices/system/cpu/intel_uncore_frequency/c @ s˜ e Zd ZdZdd„ Zdd„ Zdd„ Zdd „ Zd
d„ Ze dd
„ ƒZ
dd„ Zeddd�dd„ ƒZ
edƒddd„ƒZeddd�dd„ ƒZedƒddd„ƒZdS ) ÚUncorePlugina|
`uncore`::
`max_freq_khz, min_freq_khz`:::
Limit the maximum and minumum uncore frequency.
Those options are Intel specific and correspond directly to `sysfs` files
exposed by Intel uncore frequency driver.
====
----
[uncore]
max_freq_khz=4000000
----
Using this options *TuneD* will limit maximum frequency of all uncore units
on the Intel system to 4 GHz.
====
c C s’ d| _ tƒ | _tƒ | _d| _ytjtƒ}W n tk
r> d S X t j
|dƒ}t|ƒdkrbd| _|}x|D ]}| jj|ƒ qhW t
jdt| jƒƒ d S )NTFzuncore*r zdevices: %s)Z_devices_supportedÚsetZ_assigned_devicesZ
_free_devicesZ_is_tpmiÚosÚlistdirÚ SYSFS_DIRÚOSErrorÚfnmatchÚfilterÚlenÚaddÚlogÚdebugÚstr)ÚselfZdevicesZtpmi_devicesÚd© r ú#/usr/lib/python3.6/plugin_uncore.pyÚ
_init_devices$ s
zUncorePlugin._init_devicesc C s d|_ d|_d S )NTF)Z_has_static_tuningZ_has_dynamic_tuning)r Úinstancer r r Ú_instance_init: s zUncorePlugin._instance_initc C s d S )Nr )r r r r r Ú_instance_cleanup> s zUncorePlugin._instance_cleanupc C s2 t | d | }tj|ƒ}t|ƒdkr.t|ƒS d S )Nú/r )r
ÚcmdZ read_filer Úint)r Údev_dirÚfileÚ
sysfs_fileÚvaluer r r Ú_getA s
zUncorePlugin._getc C s( t | d | }tj|d| ƒr$|S d S )Nr z%u)r
r Z
write_to_file)r r r r! r r r r Ú_setH s zUncorePlugin._setc C s
d d dœS )N)Úmax_freq_khzÚmin_freq_khzr )Úclsr r r Ú_get_config_optionsN s z UncorePlugin._get_config_optionsc C s* yt |ƒ}W n" tk
r. tjd| ƒ d S X y4| j|dƒ}| j|dƒ}| j|dƒ}| j|dƒ}W n" ttfk
r† tjdƒ d S X |tkrÒ||k r°tjd|||f ƒ d S ||krÐtjd|||f ƒ |}nT|t k�r"||k� rþtjd |||f ƒ d S ||k �r&tjd
|||f ƒ |}nd S |S )Nzvalue '%s' is not integerÚinitial_max_freq_khzÚinitial_min_freq_khzr$ r% z+fail to read inital uncore frequency valuesz/%s: max_freq_khz %d value below min_freq_khz %dzC%s: max_freq_khz %d value above initial_max_freq_khz - capped to %dz/%s: min_freq_khz %d value above max_freq_khz %dzC%s: min_freq_khz %d value below initial_max_freq_khz - capped to %d)
r Ú
ValueErrorr Úerrorr" r ÚIOErrorÚIS_MAXÚinfoÚIS_MIN) r ÚdeviceZ
min_or_maxr! Zfreq_khzr( r) r$ r% r r r Ú_validate_valueU s:
zUncorePlugin._validate_valuer$ T)Z
per_devicec C sB | j |t|ƒ}|d krd S |r"|S tjd||f ƒ | j|d|ƒS )Nz%s: set max_freq_khz %dr$ )r1 r- r r r# )r r! r0 ÚsimÚremover$ r r r Ú_set_max_freq_khz| s zUncorePlugin._set_max_freq_khzFc C s` |rt jjtƒ rd S y| j|dƒ}W n" ttfk
rH tjdƒ d S X tj d||f ƒ |S )Nr$ z$fail to read uncore frequency valuesz%s: get max_freq_khz %d)
r ÚpathÚisdirr
r" r r, r r+ r )r r0 Úignore_missingr$ r r r Ú_get_max_freq_khzˆ s
zUncorePlugin._get_max_freq_khzr% c C sB | j |t|ƒ}|d krd S |r"|S tjd||f ƒ | j|d|ƒS )Nz%s: set min_freq_khz %dr% )r1 r/ r r r# )r r! r0 r2 r3 r% r r r Ú_set_min_freq_khz– s zUncorePlugin._set_min_freq_khzc C s` |rt jjtƒ rd S y| j|dƒ}W n" ttfk
rH tjdƒ d S X tj d||f ƒ |S )Nr% z$fail to read uncore frequency valuesz%s: get min_freq_khz %d)
r r5 r6 r
r" r r, r r+ r )r r0 r7 r% r r r Ú_get_min_freq_khz¢ s
zUncorePlugin._get_min_freq_khzN)F)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r r r r" r# Úclassmethodr' r1 Zcommand_setr4 Zcommand_getr8 r9 r: r r r r r s '
r )Ú r Z
decoratorsZ
tuned.logsZtunedZtuned.utils.commandsr r r ZlogsÚgetr r r
r/ r- ZPluginr r r r r Ú