RIFF¤ WEBPVP8 ˜ ðÑ *ôô>‘HŸK¥¤"§£±¨àð �PNG ��� IHDR���0���0����`n���� cHRM��z&��������������u0���`��:���p��Q<���bKGD�������������tIME� 6���� AIDATX��]pU����{��{�G�n$$@ -�-jВAک��P��1O���j��:cU|hg�}�C�ʋU�:�A A�����|$$$������}�^}8i *�د�?w�9gݵ��:{��F"��&��4� �@��@q_����Ow��9<<|�ԩ�;w���"�#GV�^}Ճ7�|s˖-{��|��G�-[��R�Q�aőTR)� �2!�e�63��X�U������{��Z�m۶�^}�5����}����v�R��J�J,�$� B�$Ф")�i��D�9+䜆B.�qf�үÇoذaժU�i>��so����a^���۷����3�<�ꫯnݺ��"���\���gn0�h��B�i� hR��,W*�e�65��LS�ر�0ēO>���755���ι@O?��ҥK������:::����1��X�9S�%�'�I���$��Sg�ڥ3'zF/� ��Z�8ES6WZ#�.�\��P�R�2����-[�,_�|�`�j�Xl6M���b�Z�* �jҟ0��҉B""� y22r�ܹ�CG�;���{7nn��ma���������2S���� <��x�⡡�|p.Pw��x��y�C�=��O� ��CB}�ӵ����?�wq`8�e����{+Չɱ�\{&�LL������vww��]��?q��Y�������P(���vuu9���S?w���ݻ�v<���mш ��D�DR&�j�X�����y�>���dyg�7��b��s�p��E���BDR� t����������=w�\�[;:[&._�Dlڸv�]��u�驚�/Y�a�����d�%��*)1� �V\G���[F]����X���i����J:z�N�9�?xϭ+X�V|���U�n� �g���hҜ�b�aҢ^��j�f�ZV�K��w.�ؾp�}{� �/e��{O�o�����R�8���i� !jB`�3n;Mw.=7�S�'��F�yW��x�}LXNfz�����b�p�b�bq~�����s�4�H�2��q^�r��n���\aFf4�����n�c��Q�n�X�,����ӑҤd5DDDd9'd��,�l��.���)?��������#}C�k����ܖq����m�a��y��8D���,K)�I�$I�8NE�aH)�|�VCDƘ��DF0D@M�"3�+�����Kcú��+n}��-�k:W�K������3ƄRʌ��m۞��q�9WJ���d�0�,�8��ٶ�⦈B�h���䩡�eDCj&$ �1�Y��\�>{~`�M����ͷt�#?VZ'@D²l"�,+�ɤc0�r��R*��X��n�_kMD�1"""ι�:%X��� $�b:i�b4�X<�/"r�����[Vo��T��0V�i���sΓ$IG���4M�c�R�eq��QS�+5{�{�,��a"��D�2�CҐ(I`CS�s�ʥ�R&�p�����۴(�N���e�sq�Ғ|%�����k�=�0S3@�`�i9�K��Պ�0T�Y��ؼD*��DE��2�gO�bŷrY����z�T��R�҉҆SX�Tϑ����/�Zi�eL��X��jdx䏿�eَ���7��П"?�����0y����<��R�N8�\X9ӥx ��^�L�l�ކ��u����/���Q�B�^p�f��\3��]�INƑ�L�"--�r�!8?���Rp~����v��|�M��$����_M�����GgF�/U�^�^p�Dk�ٲ�vM� ����L$�eGʓ01*���Two��f��#���ޱ��7��!5rdy"D��V���\ט��[y�f���@���Um����2w\�fg_z�y���v|`$_ow402�|���c��Zt��J��Yw���b8+L����R�t߉O�xS���'�L��`/lY�� ���Z;f�nX���f��$�<���Ϩ�J��z"�y��%�qzz��(B��Y�@D�)�uS���<�\.[�����*T(�8v�̗����rrr2I�� N5w����^k=�}�:�S�yӌ��ً+�����NY碧f����0)��h. �R����4�Ա�>�X,:����c�0�0�Rn6���mii�MW*�j��i�I�0�,ˊ���È�8���j�$I�hkk�`||�B!b��l6�8Ncc��U��<���1f�&"FQdYV�B�b���j3�>�!��j>���g���g��RD����8���r�08�u�7��]3������~�,b�P���%tEXtdate:create�2025-02-07T10:02:54+00:00� t����%tEXtdate:modify�2025-02-07T10:02:54+00:00�P�6���(tEXtdate:timestamp�2025-02-07T10:02:54+00:00�E������IEND�B`�
| Server IP : 128.227.220.250 / Your IP : 216.73.216.35 Web Server : Apache/2.4.64 (Unix) OpenSSL/1.0.2k-fips PHP/7.4.33 System : Linux dumont.ece.ufl.edu 3.10.0-1160.95.1.el7.x86_64 #1 SMP Mon Jul 24 13:59:37 UTC 2023 x86_64 User : daemon ( 2) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /lib/python2.7/site-packages/tuned/plugins/ |
Upload File : |
from . import base
from .decorators import *
import tuned.logs
from . import exceptions
from tuned.utils.commands import commands
import tuned.consts as consts
import os
import re
log = tuned.logs.get()
class SystemdPlugin(base.Plugin):
"""
Plugin for tuning systemd options.
These tunings are unloaded only on profile change followed by reboot.
"""
def __init__(self, *args, **kwargs):
if not os.path.isfile(consts.SYSTEMD_SYSTEM_CONF_FILE):
raise exceptions.NotSupportedPluginException("Required systemd '%s' configuration file not found, disabling plugin." % consts.SYSTEMD_SYSTEM_CONF_FILE)
super(SystemdPlugin, self).__init__(*args, **kwargs)
self._cmd = commands()
def _instance_init(self, instance):
instance._has_dynamic_tuning = False
instance._has_static_tuning = True
def _instance_cleanup(self, instance):
pass
@classmethod
def _get_config_options(cls):
return {
"cpu_affinity": None,
}
def _get_keyval(self, conf, key):
if conf is not None:
mo = re.search(r"^\s*" + key + r"\s*=\s*(.*)$", conf, flags = re.MULTILINE)
if mo is not None and mo.lastindex == 1:
return mo.group(1)
return None
# add/replace key with the value
def _add_keyval(self, conf, key, val):
(conf_new, nsubs) = re.subn(r"^(\s*" + key + r"\s*=).*$", r"\g<1>" + str(val), conf, flags = re.MULTILINE)
if nsubs < 1:
try:
if conf[-1] != "\n":
conf += "\n"
except IndexError:
pass
conf += key + "=" + str(val) + "\n"
return conf
return conf_new
def _del_key(self, conf, key):
return re.sub(r"^\s*" + key + r"\s*=.*\n", "", conf, flags = re.MULTILINE)
def _read_systemd_system_conf(self):
systemd_system_conf = self._cmd.read_file(consts.SYSTEMD_SYSTEM_CONF_FILE, err_ret = None)
if systemd_system_conf is None:
log.error("error reading systemd configuration file")
return None
return systemd_system_conf
def _write_systemd_system_conf(self, conf):
tmpfile = consts.SYSTEMD_SYSTEM_CONF_FILE + consts.TMP_FILE_SUFFIX
if not self._cmd.write_to_file(tmpfile, conf):
log.error("error writing systemd configuration file")
self._cmd.unlink(tmpfile, no_error = True)
return False
# Atomic replace, this doesn't work on Windows (AFAIK there is no way on Windows how to do this
# atomically), but it's unlikely this code will run there
if not self._cmd.rename(tmpfile, consts.SYSTEMD_SYSTEM_CONF_FILE):
log.error("error replacing systemd configuration file '%s'" % consts.SYSTEMD_SYSTEM_CONF_FILE)
self._cmd.unlink(tmpfile, no_error = True)
return False
return True
def _get_storage_filename(self):
return os.path.join(consts.PERSISTENT_STORAGE_DIR, self.name)
def _remove_systemd_tuning(self):
conf = self._read_systemd_system_conf()
if (conf is not None):
fname = self._get_storage_filename()
cpu_affinity_saved = self._cmd.read_file(fname, err_ret = None, no_error = True)
self._cmd.unlink(fname)
if cpu_affinity_saved is None:
conf = self._del_key(conf, consts.SYSTEMD_CPUAFFINITY_VAR)
else:
conf = self._add_keyval(conf, consts.SYSTEMD_CPUAFFINITY_VAR, cpu_affinity_saved)
self._write_systemd_system_conf(conf)
def _instance_unapply_static(self, instance, full_rollback = False):
if full_rollback:
log.info("removing '%s' systemd tuning previously added by Tuned" % consts.SYSTEMD_CPUAFFINITY_VAR)
self._remove_systemd_tuning()
log.console("you may need to manualy run 'dracut -f' to update the systemd configuration in initrd image")
# convert cpulist from systemd syntax to Tuned syntax and unpack it
def _cpulist_convert_unpack(self, cpulist):
if cpulist is None:
return ""
return " ".join(str(v) for v in self._cmd.cpulist_unpack(re.sub(r"\s+", r",", re.sub(r",\s+", r",", cpulist))))
@command_custom("cpu_affinity", per_device = False)
def _cmdline(self, enabling, value, verify, ignore_missing):
conf_affinity = None
conf_affinity_unpacked = None
v = self._cmd.unescape(self._variables.expand(self._cmd.unquote(value)))
v_unpacked = " ".join(str(v) for v in self._cmd.cpulist_unpack(v))
conf = self._read_systemd_system_conf()
if conf is not None:
conf_affinity = self._get_keyval(conf, consts.SYSTEMD_CPUAFFINITY_VAR)
conf_affinity_unpacked = self._cpulist_convert_unpack(conf_affinity)
if verify:
return self._verify_value("cpu_affinity", v_unpacked, conf_affinity_unpacked, ignore_missing)
if enabling:
fname = self._get_storage_filename()
cpu_affinity_saved = self._cmd.read_file(fname, err_ret = None, no_error = True)
if conf_affinity is not None and cpu_affinity_saved is None and v_unpacked != conf_affinity_unpacked:
self._cmd.write_to_file(fname, conf_affinity, makedir = True)
log.info("setting '%s' to '%s' in the '%s'" % (consts.SYSTEMD_CPUAFFINITY_VAR, v_unpacked, consts.SYSTEMD_SYSTEM_CONF_FILE))
self._write_systemd_system_conf(self._add_keyval(conf, consts.SYSTEMD_CPUAFFINITY_VAR, v_unpacked))