diff --git a/0001-support-nvme-subsystem-to-be-tuned.patch b/0001-support-nvme-subsystem-to-be-tuned.patch deleted file mode 100644 index cf1a85ffec9f539ba3d3b649afa4af93bab4b649..0000000000000000000000000000000000000000 --- a/0001-support-nvme-subsystem-to-be-tuned.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 52bc058e7acea20e8c7aa1d7a03cfb3a4e4439e3 Mon Sep 17 00:00:00 2001 -From: hongrongxuan -Date: Fri, 4 Aug 2023 11:22:51 +0800 -Subject: [PATCH] support nvme subsystem to be tuned - ---- - tuned/plugins/plugin_disk.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/tuned/plugins/plugin_disk.py b/tuned/plugins/plugin_disk.py -index b651374..30766ec 100644 ---- a/tuned/plugins/plugin_disk.py -+++ b/tuned/plugins/plugin_disk.py -@@ -41,7 +41,7 @@ class DiskPlugin(hotplug.Plugin): - return device.device_type == "disk" and \ - device.attributes.get("removable", None) == b"0" and \ - (device.parent is None or \ -- device.parent.subsystem in ["scsi", "virtio", "xen"]) -+ device.parent.subsystem in ["scsi", "virtio", "xen", "nvme"]) - - def _hardware_events_init(self): - self._hardware_inventory.subscribe(self, "block", self._hardware_events_callback) --- -2.27.0 - diff --git a/0001-tuned-adm-Fix-a-traceback-when-run-without-action-sp.patch b/0001-tuned-adm-Fix-a-traceback-when-run-without-action-sp.patch deleted file mode 100644 index 208e24f897ce5f0df9b09b445b0219c04cbd9412..0000000000000000000000000000000000000000 --- a/0001-tuned-adm-Fix-a-traceback-when-run-without-action-sp.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 6678c472abbd5f645dbb99ab2946c0e35ded7499 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Ond=C5=99ej=20Lyson=C4=9Bk?= -Date: Tue, 10 Jul 2018 00:24:00 +0200 -Subject: [PATCH] tuned-adm: Fix a traceback when run without action specified -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Running tuned-adm without an action specified using Python 3 results -in a traceback. This is because in this case parse_args does not -exit with a usage message in Python 3 and the 'action' option -is then undefined. - -Signed-off-by: Ondřej Lysoněk ---- - tuned-adm.py | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/tuned-adm.py b/tuned-adm.py -index 1b9623d..1df8cc3 100755 ---- a/tuned-adm.py -+++ b/tuned-adm.py -@@ -100,7 +100,11 @@ if __name__ == "__main__": - debug = options.pop("debug") - asynco = options.pop("async") - timeout = options.pop("timeout") -- action_name = options.pop("action") -+ try: -+ action_name = options.pop("action") -+ except KeyError: -+ parser.print_usage(file = sys.stderr) -+ sys.exit(1) - log_level = options.pop("loglevel") - result = False - --- -2.14.4 - diff --git a/0001-tuned-gui-Sort-plugins-based-on-their-name.patch b/0001-tuned-gui-Sort-plugins-based-on-their-name.patch deleted file mode 100644 index c2d146d2789df5f3083aac7677de9633c100b7bc..0000000000000000000000000000000000000000 --- a/0001-tuned-gui-Sort-plugins-based-on-their-name.patch +++ /dev/null @@ -1,35 +0,0 @@ -From d46834808c3226b3a6e48649df65befc399c21cd Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Ond=C5=99ej=20Lyson=C4=9Bk?= -Date: Wed, 11 Jul 2018 00:41:45 +0200 -Subject: [PATCH] tuned-gui: Sort plugins based on their name -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Previously the sorting was done by comparing the objects themselves, -which is not what we want and it doesn't work in Python 3 - TypeError -is raised, e.g: -TypeError: '<' not supported between instances of 'BootloaderPlugin' and 'MountsPlugin' - -Signed-off-by: Ondřej Lysoněk ---- - tuned-gui.py | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/tuned-gui.py b/tuned-gui.py -index 8f72fd5..e486687 100755 ---- a/tuned-gui.py -+++ b/tuned-gui.py -@@ -278,7 +278,8 @@ class Base(object): - self.treestore_profiles = Gtk.ListStore(GObject.TYPE_STRING, - GObject.TYPE_STRING) - self.treestore_plugins = Gtk.ListStore(GObject.TYPE_STRING) -- for plugin in sorted(self.plugin_loader.plugins): -+ for plugin in sorted(self.plugin_loader.plugins, -+ key = lambda plugin: plugin.name): - self.treestore_plugins.append([plugin.name]) - self.combobox_plugins = \ - self.builder.get_object('comboboxPlugins') --- -2.14.4 - diff --git a/0005-realtime-virtual-host-pin-only-the-vcpu-thread-to-is.patch b/0005-realtime-virtual-host-pin-only-the-vcpu-thread-to-is.patch deleted file mode 100644 index eac3acc059fb522ea927a1c298615ef99ba85a4b..0000000000000000000000000000000000000000 --- a/0005-realtime-virtual-host-pin-only-the-vcpu-thread-to-is.patch +++ /dev/null @@ -1,73 +0,0 @@ -From 4790e570ce0e41bde4e1866ed6e3cba723b5f4d8 Mon Sep 17 00:00:00 2001 -From: Marcelo Tosatti -Date: Wed, 4 Jul 2018 17:30:37 -0300 -Subject: [PATCH 005/124] realtime-virtual-host: pin only the vcpu thread to - isolated pCPU (v2) - -As noted in the bugzilla ticket - -https://bugzilla.redhat.com/show_bug.cgi?id=1554851 - -The QEMU I/O thread can interrupt the time measurement -of the timer. To avoid this problem, only -pin the vCPU thread. - -Signed-off-by: Marcelo Tosatti -Reviewed-and-Tested-by: Luiz Capitulino - -v2: - - Use unix sockets (Luiz) - - Proper numeric output (Luiz) ---- - profiles/realtime-virtual-host/script.sh | 31 +++++++++++++++++++++---------- - 1 file changed, 21 insertions(+), 10 deletions(-) - -diff --git a/profiles/realtime-virtual-host/script.sh b/profiles/realtime-virtual-host/script.sh -index 515d254..32e962d 100755 ---- a/profiles/realtime-virtual-host/script.sh -+++ b/profiles/realtime-virtual-host/script.sh -@@ -17,20 +17,31 @@ run_tsc_deadline_latency() - - for i in `seq 1000 500 7000`; do - echo $i > $KVM_LAPIC_FILE -- chrt -f 1 taskset -c $1 $QEMU -enable-kvm -device pc-testdev \ -+ -+ unixpath=`mktemp` -+ -+ chrt -f 1 $QEMU -S -enable-kvm -device pc-testdev \ - -device isa-debug-exit,iobase=0xf4,iosize=0x4 \ - -display none -serial stdio -device pci-testdev \ - -kernel "$TSCDEADLINE_LATENCY" \ -- -cpu host | grep latency | cut -f 2 -d ":" > $dir/out -- -- if [ ! -f $dir/out ]; then -- die running $TSCDEADLINE_LATENCY failed -- fi -+ -cpu host \ -+ -mon chardev=char0,mode=readline \ -+ -chardev socket,id=char0,nowait,path=$unixpath,server | grep latency | cut -f 2 -d ":" > $dir/out & -+ -+ sleep 1s -+ pidofvcpu=`echo "info cpus" | nc -U $unixpath | grep thread_id | cut -f 3 -d "=" | tr -d "\r"` -+ taskset -p -c $1 $pidofvcpu >/dev/null -+ echo "cont" | nc -U $unixpath >/dev/null -+ wait -+ -+ if [ ! -f $dir/out ]; then -+ die running $TSCDEADLINE_LATENCY failed -+ fi - -- tmp=$(wc -l $dir/out | awk '{ print $1 }') -- if [ $tmp -eq 0 ]; then -- die running $TSCDEADLINE_LATENCY failed -- fi -+ tmp=$(wc -l $dir/out | awk '{ print $1 }') -+ if [ $tmp -eq 0 ]; then -+ die running $TSCDEADLINE_LATENCY failed -+ fi - - A=0 - while read l; do --- -1.8.3.1 - diff --git a/0029-Fix-TypeError.patch b/0029-Fix-TypeError.patch deleted file mode 100644 index f1aa2983a19fc98ea4ab4e0030c50c412b4a2e36..0000000000000000000000000000000000000000 --- a/0029-Fix-TypeError.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 5c61305860a9520e01b1b66a0bd2fa2b21d70b34 Mon Sep 17 00:00:00 2001 -From: Tomas Korbar -Date: Mon, 23 Jul 2018 14:25:38 +0200 -Subject: [PATCH 029/124] Fix TypeError - ---- - tuned/admin/admin.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/tuned/admin/admin.py b/tuned/admin/admin.py -index 3f84413..22ffcde 100644 ---- a/tuned/admin/admin.py -+++ b/tuned/admin/admin.py -@@ -73,7 +73,7 @@ class Admin(object): - action = getattr(self, "_action_" + action_name) - except AttributeError as e: - if not self._dbus: -- self._error(e + ", action '%s' is not implemented" % action_name) -+ self._error(str(e) + ", action '%s' is not implemented" % action_name) - return False - if self._dbus: - try: --- -1.8.3.1 - diff --git a/0040-Fix-pickle-provider.patch b/0040-Fix-pickle-provider.patch deleted file mode 100644 index d2bfab33d7b94243c79e9574ba490deb646bab03..0000000000000000000000000000000000000000 --- a/0040-Fix-pickle-provider.patch +++ /dev/null @@ -1,36 +0,0 @@ -From c4f83e29567204eed4eef38bd47393dde88f6134 Mon Sep 17 00:00:00 2001 -From: Tomas Korbar -Date: Tue, 21 Aug 2018 14:38:13 +0200 -Subject: [PATCH 040/124] Fix pickle provider - -- pickle.load and pickle.dump methods take as a argument -a bytes-like object not a str, python 2.7 is overlooking this but -python 3 is not ---- - tuned/storage/pickle_provider.py | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/tuned/storage/pickle_provider.py b/tuned/storage/pickle_provider.py -index 832a9f8..771704d 100644 ---- a/tuned/storage/pickle_provider.py -+++ b/tuned/storage/pickle_provider.py -@@ -31,14 +31,14 @@ class PickleProvider(interfaces.Provider): - def save(self): - try: - log.debug("Saving %s" % str(self._data)) -- with open(self._path, "w") as f: -+ with open(self._path, "wb") as f: - pickle.dump(self._data, f) - except (OSError, IOError) as e: - log.error("Error saving storage file '%s': %s" % (self._path, e)) - - def load(self): - try: -- with open(self._path, "r") as f: -+ with open(self._path, "rb") as f: - self._data = pickle.load(f) - except (OSError, IOError) as e: - log.debug("Error loading storage file '%s': %s" % (self._path, e)) --- -1.8.3.1 - diff --git a/0070-plugin_disk-Fix-checking-the-removable-attribute-on-.patch b/0070-plugin_disk-Fix-checking-the-removable-attribute-on-.patch deleted file mode 100644 index c8423f013af1d35a97ad498258d7600ec3e2b8d2..0000000000000000000000000000000000000000 --- a/0070-plugin_disk-Fix-checking-the-removable-attribute-on-.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 2cc3d747986837d7e7957f5a4baede2dd691348a Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Ond=C5=99ej=20Lyson=C4=9Bk?= -Date: Thu, 24 Jan 2019 16:28:24 +0100 -Subject: [PATCH 070/124] plugin_disk: Fix checking the 'removable' attribute - on python3 -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -The 'removable' attribute is a bytestring, so it will never be equal to -"0" in python3. Check equality with b"0" instead. - -The patch was originally written by Tomáš Korbař. - -Signed-off-by: Ondřej Lysoněk ---- - tuned/plugins/plugin_disk.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/tuned/plugins/plugin_disk.py b/tuned/plugins/plugin_disk.py -index 1de1257..65504d8 100644 ---- a/tuned/plugins/plugin_disk.py -+++ b/tuned/plugins/plugin_disk.py -@@ -39,7 +39,7 @@ class DiskPlugin(hotplug.Plugin): - @classmethod - def _device_is_supported(cls, device): - return device.device_type == "disk" and \ -- device.attributes.get("removable", None) == "0" and \ -+ device.attributes.get("removable", None) == b"0" and \ - (device.parent is None or \ - device.parent.subsystem in ["scsi", "virtio", "xen"]) - --- -1.8.3.1 - diff --git a/0074-fix-disk-plugin-plugout-problem.patch b/0074-fix-disk-plugin-plugout-problem.patch deleted file mode 100644 index 5bea7439694463cecf1f16c0d181d6c4c1a65a2f..0000000000000000000000000000000000000000 --- a/0074-fix-disk-plugin-plugout-problem.patch +++ /dev/null @@ -1,29 +0,0 @@ -From a2219675f29fae94540868bf63f36f62c61b92c7 Mon Sep 17 00:00:00 2001 -From: Tomas Korbar -Date: Wed, 12 Dec 2018 14:48:09 +0100 -Subject: [PATCH 074/124] fix disk plugin/plugout problem - -when udev sends remove event it does not send any device -attributes with it so _device_is_supported check must be omitted - -Resolves: rhbz#1595156 ---- - tuned/plugins/plugin_disk.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/tuned/plugins/plugin_disk.py b/tuned/plugins/plugin_disk.py -index 1de1257..56e56f4 100644 ---- a/tuned/plugins/plugin_disk.py -+++ b/tuned/plugins/plugin_disk.py -@@ -50,7 +50,7 @@ class DiskPlugin(hotplug.Plugin): - self._hardware_inventory.unsubscribe(self) - - def _hardware_events_callback(self, event, device): -- if self._device_is_supported(device): -+ if self._device_is_supported(device) or event == "remove": - super(DiskPlugin, self)._hardware_events_callback(event, device) - - def _added_device_apply_tuning(self, instance, device_name): --- -1.8.3.1 - diff --git a/0099-Fix-checking-for-None-values.patch b/0099-Fix-checking-for-None-values.patch deleted file mode 100644 index 5df6bff3c5d14e087106a3d76d97de5449869243..0000000000000000000000000000000000000000 --- a/0099-Fix-checking-for-None-values.patch +++ /dev/null @@ -1,60 +0,0 @@ -From 9e6913231d307590fd6a9bc024be549aaa2d8c5e Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Ond=C5=99ej=20Lyson=C4=9Bk?= -Date: Tue, 5 Mar 2019 10:31:42 +0100 -Subject: [PATCH 099/124] Fix checking for None values -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -In python, 'is None' should be used instead of '== None' to check if -something is None. - -Signed-off-by: Ondřej Lysoněk ---- - experiments/kwin-stop/xlib-example.py | 2 +- - tuned/plugins/plugin_systemd.py | 2 +- - tuned/profiles/merger.py | 2 +- - 3 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/experiments/kwin-stop/xlib-example.py b/experiments/kwin-stop/xlib-example.py -index b8477a5..a0d6206 100644 ---- a/experiments/kwin-stop/xlib-example.py -+++ b/experiments/kwin-stop/xlib-example.py -@@ -32,7 +32,7 @@ def loop(): - root = dpy.screen(num).root - for win in root.get_full_property(dpy.get_atom('_NET_CLIENT_LIST'), 0).value.tolist(): - window = dpy.create_resource_object('window', win) -- if window.get_full_property(dpy.get_atom('_NET_WM_STATE'), Xatom.WINDOW) == None: -+ if window.get_full_property(dpy.get_atom('_NET_WM_STATE'), Xatom.WINDOW) is None: - continue - if dpy.get_atom("_NET_WM_STATE_HIDDEN") in window.get_full_property(dpy.get_atom('_NET_WM_STATE'), 0).value.tolist(): - if not win in hidden: -diff --git a/tuned/plugins/plugin_systemd.py b/tuned/plugins/plugin_systemd.py -index f6857c5..8f6bbc8 100644 ---- a/tuned/plugins/plugin_systemd.py -+++ b/tuned/plugins/plugin_systemd.py -@@ -61,7 +61,7 @@ class SystemdPlugin(base.Plugin): - - 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 == None: -+ if systemd_system_conf is None: - log.error("error reading systemd configuration file") - return None - return systemd_system_conf -diff --git a/tuned/profiles/merger.py b/tuned/profiles/merger.py -index 7a3e05c..2364543 100644 ---- a/tuned/profiles/merger.py -+++ b/tuned/profiles/merger.py -@@ -33,7 +33,7 @@ class Merger(object): - profile_a.units[unit_name].type = unit.type - profile_a.units[unit_name].enabled = unit.enabled - profile_a.units[unit_name].devices = unit.devices -- if unit.devices_udev_regex != None: -+ if unit.devices_udev_regex is not None: - profile_a.units[unit_name].devices_udev_regex = unit.devices_udev_regex - if unit.script_pre is not None: - profile_a.units[unit_name].script_pre = unit.script_pre --- -1.8.3.1 - diff --git a/bugfix-check_positive-has-some-contradictions.patch b/bugfix-check_positive-has-some-contradictions.patch new file mode 100644 index 0000000000000000000000000000000000000000..e19ad470eeb093304261513a71f35ed913a2d815 --- /dev/null +++ b/bugfix-check_positive-has-some-contradictions.patch @@ -0,0 +1,25 @@ +From d55d5c280758b6fed2c8c598a380c3c6cdc11b18 Mon Sep 17 00:00:00 2001 +From: dufuhang +Date: Thu, 19 Sep 2024 14:15:53 +0800 +Subject: [PATCH] check_positive has some contradictions + +--- + tuned-adm.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tuned-adm.py b/tuned-adm.py +index fcf19e2..6e5ac85 100755 +--- a/tuned-adm.py ++++ b/tuned-adm.py +@@ -34,7 +34,7 @@ def check_positive(value): + except ValueError: + val = -1 + if val <= 0: +- raise argparse.ArgumentTypeError("%s has to be >= 0" % value) ++ raise argparse.ArgumentTypeError("%s has to be > 0" % value) + return val + + def check_log_level(value): +-- +2.43.0 + diff --git a/bugfix-expand-variables-in-Plugin.patch b/bugfix-expand-variables-in-Plugin.patch new file mode 100644 index 0000000000000000000000000000000000000000..74d6766b616bb888acdcf4a8d45f32e8d7f589bd --- /dev/null +++ b/bugfix-expand-variables-in-Plugin.patch @@ -0,0 +1,25 @@ +From 48a01d08ea325354c37b8f68c02c28fa424ddff6 Mon Sep 17 00:00:00 2001 +From: Adriaan Schmidt +Date: Fri, 20 Sep 2024 09:01:54 +0800 +Subject: [PATCH] fix:expand variables in Plugin._verify_all_device_commands + +--- + tuned/plugins/base.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tuned/plugins/base.py b/tuned/plugins/base.py +index 784d44d..c43cbb6 100644 +--- a/tuned/plugins/base.py ++++ b/tuned/plugins/base.py +@@ -452,7 +452,7 @@ class Plugin(object): + def _verify_all_device_commands(self, instance, devices, ignore_missing): + ret = True + for command in [command for command in list(self._commands.values()) if command["per_device"]]: +- new_value = instance.options.get(command["name"], None) ++ new_value = self._variables.expand(instance.options.get(command["name"], None)) + if new_value is None: + continue + for device in devices: +-- +2.43.0 + diff --git a/change-the-default-percentage-when-dirty-data-starts.patch b/change-the-default-percentage-when-dirty-data-starts.patch new file mode 100644 index 0000000000000000000000000000000000000000..297edcc84d2007b6d8e7f5d2132822b01dfb6d7c --- /dev/null +++ b/change-the-default-percentage-when-dirty-data-starts.patch @@ -0,0 +1,26 @@ +From 9045cc4a583ea644fa1ef8454e4c3d2c63a9d248 Mon Sep 17 00:00:00 2001 +From: hongrongxuan +Date: Mon, 26 Dec 2022 09:29:48 +0800 +Subject: [PATCH] change the default percentage when dirty data starts + writeback + +--- + profiles/throughput-performance/tuned.conf | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/profiles/throughput-performance/tuned.conf b/profiles/throughput-performance/tuned.conf +index 98c6b26..84ca25a 100644 +--- a/profiles/throughput-performance/tuned.conf ++++ b/profiles/throughput-performance/tuned.conf +@@ -35,7 +35,7 @@ readahead=>4096 + # + # The generator of dirty data starts writeback at this percentage (system default + # is 20%) +-vm.dirty_ratio = 40 ++vm.dirty_ratio = 60 + + # Start background writeback (via writeback threads) at this percentage (system + # default is 10%) +-- +2.27.0 + diff --git a/fix-cpu-Update-checking-if-EPB-is-supported.patch b/fix-cpu-Update-checking-if-EPB-is-supported.patch deleted file mode 100644 index c42ce360fc8fda00c5329c20e0b39f1c2488efd6..0000000000000000000000000000000000000000 --- a/fix-cpu-Update-checking-if-EPB-is-supported.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 43375e6bbe389606fbd24d0a84535285a1a8040c Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Ond=C5=99ej=20Lyson=C4=9Bk?= -Date: Thu, 17 Sep 2020 18:57:24 +0800 -Subject: [PATCH] cpu: Update checking if EPB is supported - -Update checking if EPB is supported so that it works with recent -versions of the x86_energy_perf_policy tool. Newer versions of -x86_energy_perf_policy, unlike older versions, exit with a zero exit -code even if the CPU doesn't support EPB. Newer versions of the tool -give no ouput on stdout if EPB is not supported, so check for that. - -In the future, we might like to determine if EPB is supported by -searching /proc/cpuinfo for specific CPU flags. However the solution -described in the previous paragraph should work just fine for now. - -Resolves: rhbz#1690929 - -Signed-off-by: Ondřej Lysoněk - -https://github.com/redhat-performance/tuned/pull/217/commits/43375e6bbe389606fbd24d0a84535285a1a8040c ---- - tuned/plugins/plugin_cpu.py | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -diff --git a/tuned/plugins/plugin_cpu.py b/tuned/plugins/plugin_cpu.py -index 8f0babd..4934022 100644 ---- a/tuned/plugins/plugin_cpu.py -+++ b/tuned/plugins/plugin_cpu.py -@@ -61,8 +61,11 @@ class CPULatencyPlugin(base.Plugin): - def _check_energy_perf_bias(self): - self._has_energy_perf_bias = False - retcode_unsupported = 1 -- retcode = self._cmd.execute(["x86_energy_perf_policy", "-r"], no_errors = [errno.ENOENT, retcode_unsupported])[0] -- if retcode == 0: -+ retcode, out = self._cmd.execute(["x86_energy_perf_policy", "-r"], no_errors = [errno.ENOENT, retcode_unsupported]) -+ # With recent versions of the tool, a zero exit code is -+ # returned even if EPB is not supported. The output is empty -+ # in that case, however. -+ if retcode == 0 and out != "": - self._has_energy_perf_bias = True - elif retcode < 0: - log.warning("unable to run x86_energy_perf_policy tool, ignoring CPU energy performance bias, is the tool installed?") --- -2.23.0 - diff --git a/profiles-drop-sched_-tuning-where-appropriate.patch b/profiles-drop-sched_-tuning-where-appropriate.patch new file mode 100644 index 0000000000000000000000000000000000000000..90798666e84226f40edee84c225ccd3399c7d0d7 --- /dev/null +++ b/profiles-drop-sched_-tuning-where-appropriate.patch @@ -0,0 +1,113 @@ +From c6d6fdcc4c944df9998e0ebe75f31cc8aed452c1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jaroslav=20=C5=A0karvada?= +Date: Wed, 30 Jun 2021 22:00:19 +0200 +Subject: [PATCH] profiles: drop sched_ tuning where appropriate +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +According to the performance team measurements the sched_ tuning +should be dropped in several profiles. + +Resolves: rhbz#1957829 + +Signed-off-by: Jaroslav Škarvada + +--- + profiles/latency-performance/tuned.conf | 13 ------------- + profiles/sap-hana/tuned.conf | 4 ---- + profiles/throughput-performance/tuned.conf | 22 ---------------------- + profiles/virtual-host/tuned.conf | 6 ------ + 4 files changed, 45 deletions(-) + +diff --git a/profiles/latency-performance/tuned.conf b/profiles/latency-performance/tuned.conf +index 585c836..c780602 100644 +--- a/profiles/latency-performance/tuned.conf ++++ b/profiles/latency-performance/tuned.conf +@@ -36,18 +36,5 @@ vm.dirty_background_ratio=3 + # and move them to swap cache + vm.swappiness=10 + +-[scheduler] +-# ktune sysctl settings for rhel6 servers, maximizing i/o throughput +-# +-# Minimal preemption granularity for CPU-bound tasks: +-# (default: 1 msec# (1 + ilog(ncpus)), units: nanoseconds) +-sched_min_granularity_ns = 3000000 +-sched_wakeup_granularity_ns = 4000000 +- +-# The total time the scheduler will consider a migrated process +-# "cache hot" and thus less likely to be re-migrated +-# (system default is 500000, i.e. 0.5 ms) +-sched_migration_cost_ns = 5000000 +- + [video] + panel_power_savings=0 +diff --git a/profiles/sap-hana/tuned.conf b/profiles/sap-hana/tuned.conf +index 8dcee57..aeecf53 100644 +--- a/profiles/sap-hana/tuned.conf ++++ b/profiles/sap-hana/tuned.conf +@@ -20,7 +20,3 @@ kernel.numa_balancing = 0 + vm.dirty_ratio = 40 + vm.dirty_background_ratio = 10 + vm.swappiness = 10 +- +-[scheduler] +-sched_min_granularity_ns = 3000000 +-sched_wakeup_granularity_ns = 4000000 +diff --git a/profiles/throughput-performance/tuned.conf b/profiles/throughput-performance/tuned.conf +index 738a8a0..734fedc 100644 +--- a/profiles/throughput-performance/tuned.conf ++++ b/profiles/throughput-performance/tuned.conf +@@ -66,21 +66,6 @@ vm.swappiness=10 + # on older kernels + net.core.somaxconn=>2048 + +-[scheduler] +-# ktune sysctl settings for rhel6 servers, maximizing i/o throughput +-# +-# Minimal preemption granularity for CPU-bound tasks: +-# (default: 1 msec# (1 + ilog(ncpus)), units: nanoseconds) +-sched_min_granularity_ns = 10000000 +- +-# SCHED_OTHER wake-up granularity. +-# (default: 1 msec# (1 + ilog(ncpus)), units: nanoseconds) +-# +-# This option delays the preemption effects of decoupled workloads +-# and reduces their over-scheduling. Synchronous workloads will still +-# have immediate wakeup/sleep latencies. +-sched_wakeup_granularity_ns = 15000000 +- + # Marvell ThunderX + [sysctl.thunderx] + type=sysctl +@@ -88,12 +73,5 @@ uname_regex=aarch64 + cpuinfo_regex=${thunderx_cpuinfo_regex} + kernel.numa_balancing=0 + +-# AMD +-[scheduler.amd] +-type=scheduler +-uname_regex=x86_64 +-cpuinfo_regex=${amd_cpuinfo_regex} +-sched_migration_cost_ns=5000000 +- + [video] + panel_power_savings=0 +diff --git a/profiles/virtual-host/tuned.conf b/profiles/virtual-host/tuned.conf +index 74a5fb0..5301d9f 100644 +--- a/profiles/virtual-host/tuned.conf ++++ b/profiles/virtual-host/tuned.conf +@@ -14,9 +14,3 @@ vm.dirty_background_ratio = 5 + [cpu] + # Setting C3 state sleep mode/power savings + force_latency=cstate.id_no_zero:3|70 +- +-[scheduler] +-# The total time the scheduler will consider a migrated process +-# "cache hot" and thus less likely to be re-migrated +-# (system default is 500000, i.e. 0.5 ms) +-sched_migration_cost_ns = 5000000 +-- +2.43.0 + diff --git a/tuned-2.10.0-makefile-full-python-path.patch b/tuned-2.10.0-makefile-full-python-path.patch deleted file mode 100644 index 39b3f4b6a458b275b7c7e6b8b38bc4a59401290e..0000000000000000000000000000000000000000 --- a/tuned-2.10.0-makefile-full-python-path.patch +++ /dev/null @@ -1,18 +0,0 @@ ---- a/Makefile -+++ b/Makefile -@@ -30,12 +30,12 @@ VERSIONED_NAME = $(NAME)-$(VERSION)$(GIT_PSUFFIX) - SYSCONFDIR = /etc - DATADIR = /usr/share - DOCDIR = $(DATADIR)/doc/$(NAME) --PYTHON = python3 -+PYTHON = /usr/bin/python3 - PYLINT = pylint-3 - ifeq ($(PYTHON),python2) - PYLINT = pylint-2 - endif --SHEBANG_REWRITE_REGEX= '1s/^(\#!\/usr\/bin\/)\/\1$(PYTHON)/' -+SHEBANG_REWRITE_REGEX= '1s|^\#!/usr/bin/\|\#!$(PYTHON)|' - PYTHON_SITELIB = $(shell $(PYTHON) -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib());') - ifeq ($(PYTHON_SITELIB),) - $(error Failed to determine python library directory) - diff --git a/tuned-2.10.0-python-3.7-fix.patch b/tuned-2.10.0-python-3.7-fix.patch deleted file mode 100644 index 9c90c678c130d47daf1210ffefeb5a0fec6af57d..0000000000000000000000000000000000000000 --- a/tuned-2.10.0-python-3.7-fix.patch +++ /dev/null @@ -1,60 +0,0 @@ -From f19b7c5713acb76a200811f6531acf2791505cac Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Jaroslav=20=C5=A0karvada?= -Date: Wed, 4 Jul 2018 23:27:38 +0200 -Subject: [PATCH] Fixed compatibility with python-3.7 -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -In python-3.7 async is a keyword, so it cannot be redefined. - -Signed-off-by: Jaroslav Škarvada ---- - tuned-adm.py | 4 ++-- - tuned/admin/admin.py | 4 ++-- - 2 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/tuned-adm.py b/tuned-adm.py -index ea85c54..1b9623d 100755 ---- a/tuned-adm.py -+++ b/tuned-adm.py -@@ -98,7 +98,7 @@ if __name__ == "__main__": - - options = vars(args) - debug = options.pop("debug") -- async = options.pop("async") -+ asynco = options.pop("async") - timeout = options.pop("timeout") - action_name = options.pop("action") - log_level = options.pop("loglevel") -@@ -107,7 +107,7 @@ if __name__ == "__main__": - dbus = config.get_bool(consts.CFG_DAEMON, consts.CFG_DEF_DAEMON) - - try: -- admin = tuned.admin.Admin(dbus, debug, async, timeout, log_level) -+ admin = tuned.admin.Admin(dbus, debug, asynco, timeout, log_level) - - result = admin.action(action_name, **options) - except: -diff --git a/tuned/admin/admin.py b/tuned/admin/admin.py -index 728af32..3f84413 100644 ---- a/tuned/admin/admin.py -+++ b/tuned/admin/admin.py -@@ -14,12 +14,12 @@ import threading - import logging - - class Admin(object): -- def __init__(self, dbus = True, debug = False, async = False, -+ def __init__(self, dbus = True, debug = False, asynco = False, - timeout = consts.ADMIN_TIMEOUT, - log_level = logging.ERROR): - self._dbus = dbus - self._debug = debug -- self._async = async -+ self._async = asynco - self._timeout = timeout - self._cmd = commands(debug) - self._profiles_locator = profiles_locator(consts.LOAD_DIRECTORIES) --- -2.14.4 - diff --git a/tuned-2.10.0.tar.gz b/tuned-2.10.0.tar.gz deleted file mode 100644 index 41914c2e7da2de86f8b91b00a6221d4b988cefa1..0000000000000000000000000000000000000000 Binary files a/tuned-2.10.0.tar.gz and /dev/null differ diff --git a/tuned-2.18.0-rhel-8-profiles.patch b/tuned-2.18.0-rhel-8-profiles.patch new file mode 100644 index 0000000000000000000000000000000000000000..58776b6a8a07ed0ed8c41afa019b88dbface77bb --- /dev/null +++ b/tuned-2.18.0-rhel-8-profiles.patch @@ -0,0 +1,91 @@ +diff --git a/profiles/latency-performance/tuned.conf b/profiles/latency-performance/tuned.conf +index c780602..585c836 100644 +--- a/profiles/latency-performance/tuned.conf ++++ b/profiles/latency-performance/tuned.conf +@@ -36,5 +36,18 @@ vm.dirty_background_ratio=3 + # and move them to swap cache + vm.swappiness=10 + ++[scheduler] ++# ktune sysctl settings for rhel6 servers, maximizing i/o throughput ++# ++# Minimal preemption granularity for CPU-bound tasks: ++# (default: 1 msec# (1 + ilog(ncpus)), units: nanoseconds) ++sched_min_granularity_ns = 3000000 ++sched_wakeup_granularity_ns = 4000000 ++ ++# The total time the scheduler will consider a migrated process ++# "cache hot" and thus less likely to be re-migrated ++# (system default is 500000, i.e. 0.5 ms) ++sched_migration_cost_ns = 5000000 ++ + [video] + panel_power_savings=0 +diff --git a/profiles/sap-hana/tuned.conf b/profiles/sap-hana/tuned.conf +index aeecf53..8dcee57 100644 +--- a/profiles/sap-hana/tuned.conf ++++ b/profiles/sap-hana/tuned.conf +@@ -20,3 +20,7 @@ kernel.numa_balancing = 0 + vm.dirty_ratio = 40 + vm.dirty_background_ratio = 10 + vm.swappiness = 10 ++ ++[scheduler] ++sched_min_granularity_ns = 3000000 ++sched_wakeup_granularity_ns = 4000000 +diff --git a/profiles/throughput-performance/tuned.conf b/profiles/throughput-performance/tuned.conf +index b5e266d..8fb7c04 100644 +--- a/profiles/throughput-performance/tuned.conf ++++ b/profiles/throughput-performance/tuned.conf +@@ -66,6 +66,21 @@ vm.swappiness=10 + # on older kernels + net.core.somaxconn=>2048 + ++[scheduler] ++# ktune sysctl settings for rhel6 servers, maximizing i/o throughput ++# ++# Minimal preemption granularity for CPU-bound tasks: ++# (default: 1 msec# (1 + ilog(ncpus)), units: nanoseconds) ++sched_min_granularity_ns = 10000000 ++ ++# SCHED_OTHER wake-up granularity. ++# (default: 1 msec# (1 + ilog(ncpus)), units: nanoseconds) ++# ++# This option delays the preemption effects of decoupled workloads ++# and reduces their over-scheduling. Synchronous workloads will still ++# have immediate wakeup/sleep latencies. ++sched_wakeup_granularity_ns = 15000000 ++ + # Marvell ThunderX + [sysctl.thunderx] + type=sysctl +@@ -73,5 +88,12 @@ uname_regex=aarch64 + cpuinfo_regex=${thunderx_cpuinfo_regex} + kernel.numa_balancing=0 + ++# AMD ++[scheduler.amd] ++type=scheduler ++uname_regex=x86_64 ++cpuinfo_regex=${amd_cpuinfo_regex} ++sched_migration_cost_ns=5000000 ++ + [video] + panel_power_savings=0 +diff --git a/profiles/virtual-host/tuned.conf b/profiles/virtual-host/tuned.conf +index 5301d9f..74a5fb0 100644 +--- a/profiles/virtual-host/tuned.conf ++++ b/profiles/virtual-host/tuned.conf +@@ -14,3 +14,9 @@ vm.dirty_background_ratio = 5 + [cpu] + # Setting C3 state sleep mode/power savings + force_latency=cstate.id_no_zero:3|70 ++ ++[scheduler] ++# The total time the scheduler will consider a migrated process ++# "cache hot" and thus less likely to be re-migrated ++# (system default is 500000, i.e. 0.5 ms) ++sched_migration_cost_ns = 5000000 +-- +2.43.0 + diff --git a/tuned-2.18.0-sd-load-balance.patch b/tuned-2.18.0-sd-load-balance.patch new file mode 100644 index 0000000000000000000000000000000000000000..099afed0e4be95ea0885312c92915741e7a6f19b --- /dev/null +++ b/tuned-2.18.0-sd-load-balance.patch @@ -0,0 +1,82 @@ +diff --git a/profiles/cpu-partitioning/script.sh b/profiles/cpu-partitioning/script.sh +index ec422ca..6e004a3 100755 +--- a/profiles/cpu-partitioning/script.sh ++++ b/profiles/cpu-partitioning/script.sh +@@ -2,6 +2,38 @@ + + . /usr/lib/tuned/functions + ++no_balance_cpus_file=$STORAGE/no-balance-cpus.txt ++ ++change_sd_balance_bit() ++{ ++ local set_bit=$1 ++ local flags_cur= ++ local file= ++ local cpu= ++ ++ for cpu in $(cat $no_balance_cpus_file); do ++ for file in $(find /proc/sys/kernel/sched_domain/cpu$cpu -name flags -print); do ++ flags_cur=$(cat $file) ++ if [ $set_bit -eq 1 ]; then ++ flags_cur=$((flags_cur | 0x1)) ++ else ++ flags_cur=$((flags_cur & 0xfffe)) ++ fi ++ echo $flags_cur > $file ++ done ++ done ++} ++ ++disable_balance_domains() ++{ ++ change_sd_balance_bit 0 ++} ++ ++enable_balance_domains() ++{ ++ change_sd_balance_bit 1 ++} ++ + start() { + mkdir -p "${TUNED_tmpdir}/etc/systemd" + mkdir -p "${TUNED_tmpdir}/usr/lib/dracut/hooks/pre-udev" +@@ -9,6 +41,8 @@ start() { + cp 00-tuned-pre-udev.sh "${TUNED_tmpdir}/usr/lib/dracut/hooks/pre-udev/" + setup_kvm_mod_low_latency + disable_ksm ++ echo "$TUNED_no_balance_cores_expanded" | sed 's/,/ /g' > $no_balance_cpus_file ++ disable_balance_domains + return "$?" + } + +@@ -18,6 +52,7 @@ stop() { + teardown_kvm_mod_low_latency + enable_ksm + fi ++ enable_balance_domains + return "$?" + } + +diff --git a/profiles/cpu-partitioning/tuned.conf b/profiles/cpu-partitioning/tuned.conf +index 11f03cf..a682c9c 100644 +--- a/profiles/cpu-partitioning/tuned.conf ++++ b/profiles/cpu-partitioning/tuned.conf +@@ -35,8 +35,6 @@ no_balance_cores_expanded=${f:cpulist_unpack:${no_balance_cores}} + # Fail if isolated_cores contains CPUs which are not online + assert2=${f:assertion:isolated_cores contains online CPU(s):${isolated_cores_expanded}:${isolated_cores_online_expanded}} + +-cmd_isolcpus=${f:regex_search_ternary:${no_balance_cores}:\s*[0-9]: isolcpus=${no_balance_cores}:} +- + [sysfs] + /sys/bus/workqueue/devices/writeback/cpumask = ${not_isolated_cpumask} + /sys/devices/virtual/workqueue/cpumask = ${not_isolated_cpumask} +@@ -62,4 +60,4 @@ priority=10 + initrd_remove_dir=True + initrd_dst_img=tuned-initrd.img + initrd_add_dir=${tmpdir} +-cmdline_cpu_part=+nohz=on${cmd_isolcpus} nohz_full=${isolated_cores} rcu_nocbs=${isolated_cores} tuned.non_isolcpus=${not_isolated_cpumask} intel_pstate=disable nosoftlockup ++cmdline_cpu_part=+nohz=on nohz_full=${isolated_cores} rcu_nocbs=${isolated_cores} tuned.non_isolcpus=${not_isolated_cpumask} intel_pstate=disable nosoftlockup +-- +2.43.0 + diff --git a/tuned-2.24.1.tar.gz b/tuned-2.24.1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..3acda32f20741185fcbf4041ceabbefde33a05aa Binary files /dev/null and b/tuned-2.24.1.tar.gz differ diff --git a/tuned-add-app-sensor-profile.patch b/tuned-add-app-sensor-profile.patch new file mode 100644 index 0000000000000000000000000000000000000000..90113c9eb9ebea8b7696193d92332aad459d6893 --- /dev/null +++ b/tuned-add-app-sensor-profile.patch @@ -0,0 +1,232 @@ +From e8fb537645141bc87425b481e48f8484f05725b8 Mon Sep 17 00:00:00 2001 +From: hubin +Date: Sat, 15 Jul 2023 12:17:36 +0800 +Subject: [PATCH] tuned: add app-sensor profile + +add application plugin and process monitor support for app-sensor profile. + +if switch to app-sensor, apps given in app-sensor conf file will be +monitored, and actions given repectively in app-sensor conf file will +be executed when the monitored app starts or quits. + +Signed-off-by: hubin +--- + profiles/app-sensor/tuned.conf | 23 ++++++++ + tuned/monitors/monitor_process.py | 83 ++++++++++++++++++++++++++++ + tuned/plugins/plugin_application.py | 84 +++++++++++++++++++++++++++++ + 3 files changed, 190 insertions(+) + create mode 100644 profiles/app-sensor/tuned.conf + create mode 100644 tuned/monitors/monitor_process.py + create mode 100644 tuned/plugins/plugin_application.py + +diff --git a/profiles/app-sensor/tuned.conf b/profiles/app-sensor/tuned.conf +new file mode 100644 +index 0000000..771e6ae +--- /dev/null ++++ b/profiles/app-sensor/tuned.conf +@@ -0,0 +1,23 @@ ++[main] ++summary=dynamic tuning for configured apps ++ ++[application] ++# Define list of monitored apps, separated by comma. ++# Only apps declared in name will be monitored and execute defined action when app starts and quits. ++# Definition syntax: ++# name={app1},{app2},... ++# for example: ++# name=redis,mysql ++name= ++ ++# Define action or rollback action for each monitored app. ++# No definition or blank action means no action. ++# Definition syntax: ++# {app}_action={command} ++# {app}_rollback_action={command} ++# for example: ++# redis_action="sysctl -w kernel.sched_min_granularity_ns=10000000" ++# redis_rollback_action="sysctl -w kernel.sched_min_granularity_ns=3000000" ++# mysql_action= ++# mysql_rollback_action= ++ +diff --git a/tuned/monitors/monitor_process.py b/tuned/monitors/monitor_process.py +new file mode 100644 +index 0000000..524b27a +--- /dev/null ++++ b/tuned/monitors/monitor_process.py +@@ -0,0 +1,83 @@ ++import psutil ++import tuned.monitors ++import tuned.logs ++ ++log = tuned.logs.get() ++ ++ ++class ProcessMonitor(tuned.monitors.Monitor): ++ app_program_dict = { ++ "mysql": ["mysqld"], ++ "redis": ["redis-server"], ++ "nginx": ["nginx"], ++ "unixbench": ["Run"], ++ "unixbench-arithoh": ["arithoh"], ++ "unixbench-context1": ["context1"], ++ "unixbench-dhry2": ["dhry2"], ++ "unixbench-dhry2reg": ["dhry2reg"], ++ "unixbench-double": ["double"], ++ "unixbench-execl": ["execl"], ++ "unixbench-float": ["float"], ++ "unixbench-fstime": ["fstime"], ++ "unixbench-gfx-x11": ["gfx-x11"], ++ "unixbench-hanoi": ["hanoi"], ++ "unixbench-int": ["int"], ++ "unixbench-long": ["long"], ++ "unixbench-looper": ["looper"], ++ "unixbench-pipe": ["pipe"], ++ "unixbench-register": ["register"], ++ "unixbench-short": ["short"], ++ "unixbench-spawn": ["spawn"], ++ "unixbench-syscall": ["syscall"], ++ "unixbench-whetstone-double": ["whetstone-double"], ++ "fio": ["fio"], ++ "iozone": ["iozone"], ++ "lmbench": ["lmbench"], ++ "netperf": ["netperf"] ++ } ++ ++ pid_set = set() ++ pid_app_dict = {} ++ ++ @classmethod ++ def _init_available_devices(cls): ++ cls._available_devices = set(["application"]) ++ cls._load["application"] = set() ++ ++ @classmethod ++ def update(cls): ++ cur_pids = set(psutil.pids()) ++ prev_pids = cls.pid_set ++ ++ # collect new pid and gone pid ++ new_pids = cur_pids - prev_pids ++ gone_pids = prev_pids - cur_pids ++ ++ # deal with gone pids ++ if len(gone_pids) > 0: ++ log.debug(f"find {len(gone_pids)} processes gone") ++ for pid in gone_pids: ++ cls.pid_set.remove(pid) ++ if pid in cls.pid_app_dict: ++ log.debug(f"app process gone: {cls.pid_app_dict[pid]} (pid {pid})") ++ cls.pid_app_dict.pop(pid) ++ ++ # deal with new pids ++ if len(new_pids) > 0: ++ log.debug(f"find {len(new_pids)} processes created") ++ for pid in new_pids: ++ try: ++ process = psutil.Process(pid) ++ process_name = process.name() ++ except psutil.NoSuchProcess: ++ continue ++ cls.pid_set.add(pid) ++ # match process name with known applications ++ for app in cls.app_program_dict: ++ if process_name in cls.app_program_dict[app]: ++ cls.pid_app_dict[pid] = app ++ log.debug(f"app process created: {cls.pid_app_dict[pid]} (pid {pid})") ++ break ++ ++ # output current running applications ++ cls._load["application"] = set(cls.pid_app_dict.values()) +diff --git a/tuned/plugins/plugin_application.py b/tuned/plugins/plugin_application.py +new file mode 100644 +index 0000000..946d284 +--- /dev/null ++++ b/tuned/plugins/plugin_application.py +@@ -0,0 +1,84 @@ ++import subprocess ++from . import base ++from . import exceptions ++import tuned.logs ++from tuned.utils.commands import commands ++ ++log = tuned.logs.get() ++ ++ACTION_TIMEOUT = 180 ++ ++class ApplicationPlugin(base.Plugin): ++ """ ++ `application`: ++ ++ Dynamically executes the optimization action according to the application ++ running situation. ++ """ ++ last_apps_running = set() ++ ++ def __init__(self, *args, **kwargs): ++ super(ApplicationPlugin, self).__init__(*args, **kwargs) ++ self._has_dynamic_options = True ++ ++ def _instance_init(self, instance): ++ instance._has_static_tuning = False ++ instance._has_dynamic_tuning = True ++ # save all options ++ instance.option_dict = {} ++ for option, value in list(instance.options.items()): ++ instance.option_dict[option] = value ++ log.debug(f"{option}: {value}") ++ instance._load_monitor = self._monitors_repository.create("process", None) ++ ++ def _instance_cleanup(self, instance): ++ if instance._load_monitor is not None: ++ self._monitors_repository.delete(instance._load_monitor) ++ instance._load_monitor = None ++ instance.option_dict.clear() ++ ++ def _instance_update_dynamic(self, instance, device): ++ if "name" not in instance.option_dict: ++ return ++ applications_monitored = set([app.strip() for app in instance.option_dict["name"].split(',')]) ++ if not applications_monitored: ++ return ++ apps_running = applications_monitored.intersection(instance._load_monitor.get_load()["application"]) ++ log.debug("running: " + str(apps_running)) ++ new_apps = apps_running - self.last_apps_running ++ gone_apps = self.last_apps_running - apps_running ++ if len(new_apps) > 0: ++ log.info("new apps: " + str(new_apps)) ++ if len(gone_apps) > 0: ++ log.info("gone apps: " + str(gone_apps)) ++ for app in gone_apps: ++ self._execute_action(instance, app, rollback=True) ++ for app in new_apps: ++ self._execute_action(instance, app, rollback=False) ++ self.last_apps_running = apps_running ++ ++ def _instance_unapply_dynamic(self, instance, device): ++ # restore previous value ++ pass ++ ++ def _execute_action(self, instance, app, rollback=False): ++ # find action ++ if rollback: ++ option = f"{app}_rollback_action" ++ else: ++ option = f"{app}_action" ++ if option not in instance.option_dict: ++ return ++ action = str(instance.option_dict[option]) ++ # remove wrapping " or ' in action ++ if len(action) >= 2 and (action[0] == '"' or action[0] == "'") and action[0] == action[-1]: ++ action = action[1:-1] ++ # execute action for app ++ if len(action): ++ log.info(f"{option}: {action}") ++ try: ++ p = subprocess.Popen(action, shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) ++ retval = p.wait(ACTION_TIMEOUT) ++ log.info(f"{option}: return {retval}") ++ except Exception as e: ++ log.info(f"{option}: {str(e)}") +-- +2.33.0 + diff --git a/tuned.spec b/tuned.spec index 7c5f50f0b422357015fb82261ef9ce5ba4ea0336..a855f63ff56c390fd8e3f957e291edc2c9567220 100644 --- a/tuned.spec +++ b/tuned.spec @@ -1,9 +1,9 @@ Summary: A system tuning service for Linux Name: tuned -Version: 2.10.0 -Release: 11 +Version: 2.24.1 +Release: 1 License: GPLv2+ -Source0: https://github.com/redhat-performance/%{name}/archive/v%{version}%{?prerel2}.tar.gz#/%{name}-%{version}%{?prerel2}.tar.gz +Source0: https://github.com/redhat-performance/%{name}/archive/refs/tags/v%{version}.tar.gz#/%{name}-%{version}.tar.gz URL: http://www.tuned-project.org/ BuildArch: noarch @@ -16,7 +16,7 @@ Requires(post): systemd, virt-what Requires(preun): systemd Requires(postun): systemd BuildRequires: %{_py}, %{_py}-devel -BuildRequires: git, systemd, desktop-file-utils +BuildRequires: systemd, desktop-file-utils Requires: python3-dbus, util-linux, systemtap Requires: virt-what, gawk, dbus, ethtool @@ -26,23 +26,18 @@ Requires: %{_py}-configobj, %{_py}-pyudev, %{_py}-linux-procfs Requires: %{_py}-schedutils, %{_py}-decorator, %{_py}-perf Recommends:kernel-tools Recommends:tuned-profiles-nfv-host-bin -Recommends:%{name}-help = %{version}-%{release} - -Patch0: tuned-2.10.0-python-3.7-fix.patch -Patch1: 0001-tuned-adm-Fix-a-traceback-when-run-without-action-sp.patch -Patch2: tuned-2.10.0-makefile-full-python-path.patch -Patch3: 0001-tuned-gui-Sort-plugins-based-on-their-name.patch -Patch4: fix-cpu-Update-checking-if-EPB-is-supported.patch - -Patch9000: bugfix-tuned-2.8.0-restart-after-kill-dbus.patch -Patch9001: 0005-realtime-virtual-host-pin-only-the-vcpu-thread-to-is.patch -Patch9002: 0029-Fix-TypeError.patch -Patch9003: 0040-Fix-pickle-provider.patch -Patch9004: 0070-plugin_disk-Fix-checking-the-removable-attribute-on-.patch -Patch9005: 0074-fix-disk-plugin-plugout-problem.patch -Patch9006: 0099-Fix-checking-for-None-values.patch -Patch9007: 0001-support-nvme-subsystem-to-be-tuned.patch +Patch0: bugfix-tuned-2.8.0-restart-after-kill-dbus.patch +#the below two patches is from +#http://ftp.iij.ad.jp/pub/linux/centos-vault/centos/8-stream/BaseOS/Source/SPackages/tuned-2.19.0-1.el8.src.rpm +#this is used to compatible with old tuned version like 2.10 +Patch1: tuned-2.18.0-rhel-8-profiles.patch +Patch2: tuned-2.18.0-sd-load-balance.patch +Patch3: change-the-default-percentage-when-dirty-data-starts.patch +Patch4: tuned-add-app-sensor-profile.patch +Patch5: profiles-drop-sched_-tuning-where-appropriate.patch +Patch6: bugfix-check_positive-has-some-contradictions.patch +Patch7: bugfix-expand-variables-in-Plugin.patch Provides: tuned-gtk = %{version}-%{release} Provides: tuned-utils = %{version}-%{release} @@ -137,13 +132,13 @@ Requires: tuna Recommends: tuned-profiles-nfv-host-bin -Provides: tuned-profiles-realtime -Provides: tuned-profiles-nfv-guest -Provides: tuned-profiles-nfv-host +Provides: tuned-profiles-realtime = %{version}-%{release} +Provides: tuned-profiles-nfv-guest = %{version}-%{release} +Provides: tuned-profiles-nfv-host = %{version}-%{release} -Obsoletes: tuned-profiles-realtime -Obsoletes: tuned-profiles-nfv-guest -Obsoletes: tuned-profiles-nfv-host +Obsoletes: tuned-profiles-realtime < %{version}-%{release} +Obsoletes: tuned-profiles-nfv-guest < %{version}-%{release} +Obsoletes: tuned-profiles-nfv-host < %{version}-%{release} %description profiles-devel Man pages and other related documents for %{name} @@ -157,7 +152,7 @@ Man pages and other related documents for %{name} %prep -%autosetup -n %{name}-%{version} -p1 -Sgit +%autosetup -n %{name}-%{version} -p1 %build @@ -227,10 +222,6 @@ fi %files %doc %{docdir} -%doc %{docdir}/README.NFV -%doc doc/README.utils -%doc doc/README.scomes -%doc COPYING %dir %{_datadir}/%{name} %dir %{_sysconfdir}/%{name} %dir %{_sysconfdir}/%{name}/recommend.d @@ -242,7 +233,6 @@ fi %{_datadir}/%{name}/grub2 %{_datadir}/polkit-1/actions/com.redhat.%{name}.policy %{_datadir}/%{name}/ui -%{_datadir}/polkit-1/actions/com.redhat.%{name}.gui.policy %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/applications/%{name}-gui.desktop %{_sbindir}/%{name} @@ -253,13 +243,13 @@ fi %{_sbindir}/diskdevstat %{_sbindir}/scomes -%exclude %{_prefix}/lib/%{name}/realtime -%exclude %{_prefix}/lib/%{name}/realtime-virtual-guest -%exclude %{_prefix}/lib/%{name}/realtime-virtual-host +%exclude %{_prefix}/lib/%{name}/profiles/realtime +%exclude %{_prefix}/lib/%{name}/profiles/realtime-virtual-guest +%exclude %{_prefix}/lib/%{name}/profiles/realtime-virtual-host %{_prefix}/lib/%{name} %config(noreplace) %{_sysconfdir}/%{name}/cpu-partitioning-variables.conf -%config(noreplace) %{_sysconfdir}/%{name}/sap-hana-vmware-variables.conf +%config(noreplace) %{_sysconfdir}/%{name}/cpu-partitioning-powersave-variables.conf %config(noreplace) %{_sysconfdir}/%{name}/%{name}-main.conf %config(noreplace) %verify(not size mtime md5) %{_sysconfdir}/%{name}/active_profile %config(noreplace) %verify(not size mtime md5) %{_sysconfdir}/%{name}/profile_mode @@ -268,9 +258,8 @@ fi %{_bindir}/powertop2%{name} %{_libexecdir}/%{name}/defirqaffinity* %{_libexecdir}/%{name}/pmqos-static* -%{python3_sitelib}/%{name}/gtk %{python3_sitelib}/%{name} -%{_sysconfdir}/dbus-1/system.d/com.redhat.%{name}.conf +%{_datadir}/dbus-1/system.d/com.redhat.%{name}.conf %verify(not size mtime md5) %{_sysconfdir}/modprobe.d/%{name}.conf %{_tmpfilesdir}/%{name}.conf %{_unitdir}/%{name}.service @@ -293,16 +282,26 @@ fi %files profiles-devel %config(noreplace) %{_sysconfdir}/%{name}/realtime-variables.conf -%{_prefix}/lib/%{name}/realtime +%{_prefix}/lib/%{name}/profiles/realtime %config(noreplace) %{_sysconfdir}/%{name}/realtime-virtual-guest-variables.conf -%{_prefix}/lib/%{name}/realtime-virtual-guest +%{_prefix}/lib/%{name}/profiles/realtime-virtual-guest %config(noreplace) %{_sysconfdir}/%{name}/realtime-virtual-host-variables.conf -%{_prefix}/lib/%{name}/realtime-virtual-host +%{_prefix}/lib/%{name}/profiles/realtime-virtual-host %{_mandir}/man7/%{name}-profiles-realtime.7* %{_mandir}/man7/%{name}-profiles-nfv-guest.7* %{_mandir}/man7/%{name}-profiles-nfv-host.7* +%config(noreplace) %verify(not size mtime md5) %{_sysconfdir}/tuned/post_loaded_profile +%{_prefix}/lib/kernel/install.d/92-tuned.install +%{_mandir}/man7/tuned-profiles-openshift.7* +%{_mandir}/man7/tuned-profiles-postgresql.7* +%{_mandir}/man7/tuned-profiles-spectrumscale-ece.7* %changelog +* Mon Dec 2 2024 Liu Chao - 2.24.1-1 +- Upgrade to 2.24.1: + - fixed privileged execution of arbitrary scripts by active local user. (CVE-2024-52336) + - added sanity checks for API methods parameters. (CVE-2024-52337) + * Fri Aug 4 2023 hongrongxuan - 2.10.0-11 - Type:other - ID:NA