From 01213183c4820f276cad4ad17b81543ad2c9f1f7 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Tue, 7 May 2019 08:34:41 -0400 Subject: [PATCH] import tuna-0.14-3.el8 --- .gitignore | 1 + .tuna.metadata | 1 + ...exception-args-attribute-for-python3.patch | 243 ++++++++++++++++++ ...una-fix-undefined-global-name-stderr.patch | 28 ++ ...s.py-Add-method-to-compare-class-cpu.patch | 41 +++ SPECS/tuna.spec | 189 ++++++++++++++ 6 files changed, 503 insertions(+) create mode 100644 .gitignore create mode 100644 .tuna.metadata create mode 100644 SOURCES/tuna-Use-exception-args-attribute-for-python3.patch create mode 100644 SOURCES/tuna-fix-undefined-global-name-stderr.patch create mode 100644 SOURCES/tuna-sysfs.py-Add-method-to-compare-class-cpu.patch create mode 100644 SPECS/tuna.spec diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..677b0c2 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/tuna-0.14.tar.xz diff --git a/.tuna.metadata b/.tuna.metadata new file mode 100644 index 0000000..83d1a26 --- /dev/null +++ b/.tuna.metadata @@ -0,0 +1 @@ +0957ee39985f0414dfeabd85daf6c7357c009891 SOURCES/tuna-0.14.tar.xz diff --git a/SOURCES/tuna-Use-exception-args-attribute-for-python3.patch b/SOURCES/tuna-Use-exception-args-attribute-for-python3.patch new file mode 100644 index 0000000..f8898bd --- /dev/null +++ b/SOURCES/tuna-Use-exception-args-attribute-for-python3.patch @@ -0,0 +1,243 @@ +From 0c70baee8d3af97a130bc745adda85e530bd30b0 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Tue, 4 Dec 2018 01:36:19 +0100 +Subject: [PATCH 2/2] tuna: Use exception args attribute for python3 + +In python3 exceptions are not interable, so use the args attribute + +Signed-off-by: John Kacur +--- + tuna-cmd.py | 4 ++-- + tuna/gui/util.py | 4 ++-- + tuna/tuna.py | 46 +++++++++++++++++++++++----------------------- + 3 files changed, 27 insertions(+), 27 deletions(-) + +diff --git a/tuna-cmd.py b/tuna-cmd.py +index 8068695ae6df..e4182231d80f 100755 +--- a/tuna-cmd.py ++++ b/tuna-cmd.py +@@ -182,7 +182,7 @@ def ps_show_thread(pid, affect_children, ps, + try: + affinity = format_affinity(schedutils.get_affinity(pid)) + except (SystemError, OSError) as e: # old python-schedutils incorrectly raised SystemError +- if e[0] == errno.ESRCH: ++ if e.args[0] == errno.ESRCH: + return + raise e + +@@ -264,7 +264,7 @@ def ps_show(ps, affect_children, thread_list, cpu_list, + try: + affinity = schedutils.get_affinity(pid) + except (SystemError, OSError) as e: # old python-schedutils incorrectly raised SystemError +- if e[0] == errno.ESRCH: ++ if e.args[0] == errno.ESRCH: + continue + raise e + if cpu_list and not set(cpu_list).intersection(set(affinity)): +diff --git a/tuna/gui/util.py b/tuna/gui/util.py +index 73eceae23ab7..9e30ed92bd4c 100755 +--- a/tuna/gui/util.py ++++ b/tuna/gui/util.py +@@ -86,7 +86,7 @@ def thread_set_attributes(pid_info, new_policy, new_prio, new_affinity, nr_cpus) + try: + curr_affinity = schedutils.get_affinity(pid) + except (SystemError, OSError) as e: # (3, 'No such process') old python-schedutils incorrectly raised SystemError +- if e[0] == 3: ++ if e.args[0] == 3: + return False + raise e + +@@ -109,7 +109,7 @@ def thread_set_attributes(pid_info, new_policy, new_prio, new_affinity, nr_cpus) + try: + curr_affinity = schedutils.get_affinity(pid) + except (SystemError, OSError) as e: # (3, 'No such process') old python-schedutils incorrectly raised SystemError +- if e[0] == 3: ++ if e.args[0] == 3: + return False + raise e + +diff --git a/tuna/tuna.py b/tuna/tuna.py +index 9f9267863871..4b1a77bcfa9f 100755 +--- a/tuna/tuna.py ++++ b/tuna/tuna.py +@@ -193,7 +193,7 @@ def move_threads_to_cpu(cpus, pid_list, set_affinity_warning = None, + try: + curr_affinity = schedutils.get_affinity(pid) + except (SystemError, OSError) as e: # old python-schedutils incorrectly raised SystemError +- if e[0] == errno.ESRCH: ++ if e.args[0] == errno.ESRCH: + continue + curr_affinity = None + raise e +@@ -202,7 +202,7 @@ def move_threads_to_cpu(cpus, pid_list, set_affinity_warning = None, + schedutils.set_affinity(pid, new_affinity) + curr_affinity = schedutils.get_affinity(pid) + except (SystemError, OSError) as e: # old python-schedutils incorrectly raised SystemError +- if e[0] == errno.ESRCH: ++ if e.args[0] == errno.ESRCH: + continue + curr_affinity == None + raise e +@@ -231,7 +231,7 @@ def move_threads_to_cpu(cpus, pid_list, set_affinity_warning = None, + try: + curr_affinity = schedutils.get_affinity(tid) + except (SystemError, OSError) as e: # old python-schedutils incorrectly raised SystemError +- if e[0] == errno.ESRCH: ++ if e.args[0] == errno.ESRCH: + continue + raise e + if set(curr_affinity) != set(new_affinity): +@@ -239,7 +239,7 @@ def move_threads_to_cpu(cpus, pid_list, set_affinity_warning = None, + schedutils.set_affinity(tid, new_affinity) + curr_affinity = schedutils.get_affinity(tid) + except (SystemError, OSError) as e: # old python-schedutils incorrectly raised SystemError +- if e[0] == errno.ESRCH: ++ if e.args[0] == errno.ESRCH: + continue + raise e + if set(curr_affinity) == set(new_affinity): +@@ -251,10 +251,10 @@ def move_threads_to_cpu(cpus, pid_list, set_affinity_warning = None, + (_("could not change %(pid)d affinity to %(new_affinity)s") % \ + {'pid':pid, 'new_affinity':new_affinity})) + except (SystemError, OSError) as e: # old python-schedutils incorrectly raised SystemError +- if e[0] == errno.ESRCH: ++ if e.args[0] == errno.ESRCH: + # process died + continue +- elif e[0] == errno.EINVAL: # unmovable thread) ++ elif e.args[0] == errno.EINVAL: # unmovable thread) + print("thread %(pid)d cannot be moved as requested" %{'pid':pid}, file=stderr) + continue + raise e +@@ -301,7 +301,7 @@ def move_irqs_to_cpu(cpus, irq_list, spread = False): + try: + schedutils.set_affinity(pid, new_affinity) + except (SystemError, OSError) as e: # old python-schedutils incorrectly raised SystemError +- if e[0] == errno.ESRCH: ++ if e.args[0] == errno.ESRCH: + unprocessed.append(i) + changed -= 1 + continue +@@ -336,9 +336,9 @@ def isolate_cpus(cpus, nr_cpus): + try: + affinity = schedutils.get_affinity(pid) + except (SystemError, OSError) as e: # old python-schedutils incorrectly raised SystemError +- if e[0] == errno.ESRCH: ++ if e.args[0] == errno.ESRCH: + continue +- elif e[0] == errno.EINVAL: ++ elif e.args[0] == errno.EINVAL: + print("Function:", fname, ",", e.strerror, file=sys.stderr) + sys.exit(2) + raise e +@@ -348,9 +348,9 @@ def isolate_cpus(cpus, nr_cpus): + try: + schedutils.set_affinity(pid, affinity) + except (SystemError, OSError) as e: # old python-schedutils incorrectly raised SystemError +- if e[0] == errno.ESRCH: ++ if e.args[0] == errno.ESRCH: + continue +- elif e[0] == errno.EINVAL: ++ elif e.args[0] == errno.EINVAL: + print("Function:", fname, ",", e.strerror, file=sys.stderr) + sys.exit(2) + raise e +@@ -364,9 +364,9 @@ def isolate_cpus(cpus, nr_cpus): + try: + affinity = schedutils.get_affinity(tid) + except (SystemError, OSError) as e: # old python-schedutils incorrectly raised SystemError +- if e[0] == errno.ESRCH: ++ if e.args[0] == errno.ESRCH: + continue +- elif e[0] == errno.EINVAL: ++ elif e.args[0] == errno.EINVAL: + print("Function:", fname, ",", e.strerror, file=sys.stderr) + sys.exit(2) + raise e +@@ -376,9 +376,9 @@ def isolate_cpus(cpus, nr_cpus): + try: + schedutils.set_affinity(tid, affinity) + except (SystemError, OSError) as e: # old python-schedutils incorrectly raised SystemError +- if e[0] == errno.ESRCH: ++ if e.args[0] == errno.ESRCH: + continue +- elif e[0] == errno.EINVAL: ++ elif e.args[0] == errno.EINVAL: + print("Function:", fname, ",", e.strerror, file=sys.stderr) + sys.exit(2) + raise e +@@ -416,7 +416,7 @@ def include_cpus(cpus, nr_cpus): + try: + affinity = schedutils.get_affinity(pid) + except (SystemError, OSError) as e: # old python-schedutils incorrectly raised SystemError +- if e[0] == errno.ESRCH: ++ if e.args[0] == errno.ESRCH: + continue + raise e + if set(affinity).intersection(set(cpus)) != set(cpus): +@@ -425,7 +425,7 @@ def include_cpus(cpus, nr_cpus): + try: + schedutils.set_affinity(pid, affinity) + except (SystemError, OSError) as e: # old python-schedutils incorrectly raised SystemError +- if e[0] == errno.ESRCH: ++ if e.args[0] == errno.ESRCH: + continue + raise e + +@@ -438,7 +438,7 @@ def include_cpus(cpus, nr_cpus): + try: + affinity = schedutils.get_affinity(tid) + except (SystemError, OSError) as e: # old python-schedutils incorrectly raised SystemError +- if e[0] == errno.ESRCH: ++ if e.args[0] == errno.ESRCH: + continue + raise e + if set(affinity).intersection(set(cpus)) != set(cpus): +@@ -447,7 +447,7 @@ def include_cpus(cpus, nr_cpus): + try: + schedutils.set_affinity(tid, affinity) + except (SystemError, OSError) as e: # old python-schedutils incorrectly raised SystemError +- if e[0] == errno.ESRCH: ++ if e.args[0] == errno.ESRCH: + continue + raise e + +@@ -515,7 +515,7 @@ def thread_filtered(tid, cpus_filtered, show_kthreads, show_uthreads): + try: + affinity = schedutils.get_affinity(tid) + except (SystemError, OSError) as e: # old python-schedutils incorrectly raised SystemError +- if e[0] == errno.ESRCH: ++ if e.args[0] == errno.ESRCH: + return False + raise e + +@@ -554,7 +554,7 @@ def threads_set_priority(tids, parm, affect_children = False): + try: + thread_set_priority(tid, policy, rtprio) + except (SystemError, OSError) as e: # old python-schedutils incorrectly raised SystemError +- if e[0] == errno.ESRCH: ++ if e.args[0] == errno.ESRCH: + continue + raise e + if affect_children: +@@ -563,7 +563,7 @@ def threads_set_priority(tids, parm, affect_children = False): + try: + thread_set_priority(child, policy, rtprio) + except (SystemError, OSError) as e: # old python-schedutils incorrectly raised SystemError +- if e[0] == errno.ESRCH: ++ if e.args[0] == errno.ESRCH: + continue + raise e + +@@ -594,7 +594,7 @@ def get_kthread_sched_tunings(proc = None): + policy = schedutils.get_scheduler(pid) + affinity = schedutils.get_affinity(pid) + except (SystemError, OSError) as e: # old python-schedutils incorrectly raised SystemError +- if e[0] == errno.ESRCH: ++ if e.args[0] == errno.ESRCH: + continue + raise e + percpu = iskthread(pid) and \ +-- +2.19.2 + diff --git a/SOURCES/tuna-fix-undefined-global-name-stderr.patch b/SOURCES/tuna-fix-undefined-global-name-stderr.patch new file mode 100644 index 0000000..d200a00 --- /dev/null +++ b/SOURCES/tuna-fix-undefined-global-name-stderr.patch @@ -0,0 +1,28 @@ +From 38021aa69c811478ddf6e091353b704adb80985a Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Fri, 1 Feb 2019 13:57:52 +0100 +Subject: [PATCH] tuna: fix undefined global name stderr + +Fix undefined global name stderr. Should be sys.stderr + +Signed-off-by: John Kacur +--- + tuna/tuna.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tuna/tuna.py b/tuna/tuna.py +index 4b1a77bcfa9f..d1d9bad661c7 100755 +--- a/tuna/tuna.py ++++ b/tuna/tuna.py +@@ -255,7 +255,7 @@ def move_threads_to_cpu(cpus, pid_list, set_affinity_warning = None, + # process died + continue + elif e.args[0] == errno.EINVAL: # unmovable thread) +- print("thread %(pid)d cannot be moved as requested" %{'pid':pid}, file=stderr) ++ print("thread %(pid)d cannot be moved as requested" %{'pid':pid}, file=sys.stderr) + continue + raise e + return changed +-- +2.20.1 + diff --git a/SOURCES/tuna-sysfs.py-Add-method-to-compare-class-cpu.patch b/SOURCES/tuna-sysfs.py-Add-method-to-compare-class-cpu.patch new file mode 100644 index 0000000..d6030c0 --- /dev/null +++ b/SOURCES/tuna-sysfs.py-Add-method-to-compare-class-cpu.patch @@ -0,0 +1,41 @@ +From feb9d98bb0ed49ed5b9c2977700e9144b5707aa0 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Tue, 4 Dec 2018 00:29:28 +0100 +Subject: [PATCH 1/2] tuna: sysfs.py: Add method to compare class cpu + +In python3 you have to supply a method to compare class instances + +Without this you get this kind of error + +$ python3 sysfs.py +Traceback (most recent call last): + File "sysfs.py", line 97, in + cpus = cpus() + File "sysfs.py", line 57, in __init__ + self.reload() + File "sysfs.py", line 92, in reload + self.sockets[socket].sort() +TypeError: '<' not supported between instances of 'cpu' and 'cpu' + +Signed-off-by: John Kacur +--- + tuna/sysfs.py | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/tuna/sysfs.py b/tuna/sysfs.py +index acc81d667753..8b8a988659ce 100755 +--- a/tuna/sysfs.py ++++ b/tuna/sysfs.py +@@ -9,6 +9,9 @@ class cpu: + self.dir = "%s/%s" % (basedir, name) + self.reload() + ++ def __lt__(self, other): ++ self.name < other.name ++ + def readfile(self, name): + try: + f = open("%s/%s" % (self.dir, name)) +-- +2.19.2 + diff --git a/SPECS/tuna.spec b/SPECS/tuna.spec new file mode 100644 index 0000000..e425496 --- /dev/null +++ b/SPECS/tuna.spec @@ -0,0 +1,189 @@ +Name: tuna +Version: 0.14 +Release: 3%{?dist} +License: GPLv2 +Summary: Application tuning GUI & command line utility +Group: Applications/System +Source: https://git.kernel.org/pub/scm/utils/tuna/tuna.git/%{name}/%{name}-%{version}.tar.xz +URL: https://git.kernel.org/pub/scm/utils/tuna/tuna.git +# If upstream does not provide tarballs, to generate +# git clone git://git.kernel.org/pub/scm/utils/tuna/tuna.git +# cd tuna +# git archive --format=tar --prefix=tuna-%%{version}/ v%%{version} | xz -c > tuna-%%{version}.tar.xz +BuildArch: noarch +BuildRequires: python3-devel, gettext +Requires: python3-ethtool +Requires: python3-linux-procfs >= 0.6 +Requires: python3-schedutils >= 0.6 +# This really should be a Suggests... +# Requires: python-inet_diag +BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) + +# PATCHES +Patch1: tuna-sysfs.py-Add-method-to-compare-class-cpu.patch +Patch2: tuna-Use-exception-args-attribute-for-python3.patch +Patch3: tuna-fix-undefined-global-name-stderr.patch + +%description +Provides interface for changing scheduler and IRQ tunables, at whole CPU and at +per thread/IRQ level. Allows isolating CPUs for use by a specific application +and moving threads and interrupts to a CPU by just dragging and dropping them. +Operations can be done on CPU sockets, understanding CPU topology. + +Can be used as a command line utility without requiring the GUI libraries to be +installed. + +%prep +%setup -q +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 + +%build +%{__python3} setup.py build + +%install +rm -rf %{buildroot} +%{__python3} setup.py install --skip-build --root %{buildroot} +mkdir -p %{buildroot}/%{_sysconfdir}/tuna/ +mkdir -p %{buildroot}/{%{_bindir},%{_datadir}/tuna/help/kthreads,%{_mandir}/man8} +mkdir -p %{buildroot}/%{_datadir}/polkit-1/actions/ +install -p -m644 tuna/tuna_gui.glade %{buildroot}/%{_datadir}/tuna/ +install -p -m755 tuna-cmd.py %{buildroot}/%{_bindir}/tuna +install -p -m644 help/kthreads/* %{buildroot}/%{_datadir}/tuna/help/kthreads/ +install -p -m644 docs/tuna.8 %{buildroot}/%{_mandir}/man8/ +install -p -m644 etc/tuna/example.conf %{buildroot}/%{_sysconfdir}/tuna/ +install -p -m644 etc/tuna.conf %{buildroot}/%{_sysconfdir}/ +install -p -m644 org.tuna.policy %{buildroot}/%{_datadir}/polkit-1/actions/ + +# Manually fix the shebang +pathfix.py -pni "%{__python3}" %{buildroot}%{_bindir}/tuna + +# l10n-ed message catalogues +for lng in `cat po/LINGUAS`; do + po=po/"$lng.po" + mkdir -p %{buildroot}/%{_datadir}/locale/${lng}/LC_MESSAGES + msgfmt $po -o %{buildroot}/%{_datadir}/locale/${lng}/LC_MESSAGES/%{name}.mo +done + +%find_lang %name + +%clean +rm -rf %{buildroot} + +%files -f %{name}.lang +%defattr(-,root,root,-) +%doc ChangeLog +%{python3_sitelib}/*.egg-info +%{_bindir}/tuna +%{_datadir}/tuna/ +%{python3_sitelib}/tuna/ +%{_mandir}/man8/tuna.8* +%{_sysconfdir}/tuna.conf +%{_sysconfdir}/tuna/* +%{_datadir}/polkit-1/actions/org.tuna.policy + +%changelog +* Fri Feb 01 2019 John Kacur - 0.14-3 +- fix undefined global name stderr +Resolves: rhbz#1671440 + +* Tue Dec 04 2018 John Kacur - 0.14-2 +- Add method to compare class cpu for sorting +- Use args attributes for exceptions for python3 +Resolves: rhbz#1651465 + +* Fri Aug 10 2018 John Kacur - 0.14-1 +- Sync with upstream and fix URL reference in spec +Resolves: rhbz#1596855 + +* Wed Aug 08 2018 John Kacur - 0.13.3-5 +- Remove some functions that are now available in python-linux-procfs +Resolves: rhbz#1522865 + +* Tue Jul 03 2018 Tomas Orsava - 0.13.3-4 +- Switch hardcoded python3 shebangs into the %%{__python3} macro + +* Thu May 31 2018 John Kacur - 0.13.3-3 +- Remove deprecated oscilloscope +Resolves: rhbz#1584302 + +* Fri May 25 2018 John Kacur - 0.13.3-2 +- Correct the dependencies to require python3 package versions +Resolves: rhbz#1581192 + +* Wed May 16 2018 John Kacur - 0.13.3-1 +- Changes for python3 +Resolves: rhbz#1518679 + +* Fri Feb 09 2018 Fedora Release Engineering - 0.13.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Wed Nov 29 2017 Lubomir Rintel - 0.13.1-4 +- Add a missing dependency for oscilloscope + +* Thu Jul 27 2017 Fedora Release Engineering - 0.13.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Sat Feb 11 2017 Fedora Release Engineering - 0.13.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Wed Dec 21 2016 Jiri Kastner - 0.13.1-1 +- new version + +* Mon Sep 26 2016 Dominik Mierzejewski - 0.12-5 +- rebuilt for matplotlib-2.0.0 + +* Tue Jul 19 2016 Fedora Release Engineering - 0.12-4 +- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages + +* Fri Feb 05 2016 Fedora Release Engineering - 0.12-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Fri Jun 19 2015 Fedora Release Engineering - 0.12-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Fri Oct 10 2014 Jiri Kastner - 0.12-1 +- new upstream release + +* Sun Jun 08 2014 Fedora Release Engineering - 0.11.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Mon Jul 29 2013 Jiri Kastner - 0.11.1-1 +- New upstream release + +* Tue Jun 11 2013 Jiri Kastner - 0.11-2 +- changed dependencies from python-numeric to numpy +- merged spec changes from upstream + +* Thu Jun 6 2013 Jiri Kastner - 0.11-1 +- New upstream release + +* Fri Feb 15 2013 Fedora Release Engineering - 0.9.1-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Sun Jul 22 2012 Fedora Release Engineering - 0.9.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Sat Jan 14 2012 Fedora Release Engineering - 0.9.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Wed Feb 09 2011 Fedora Release Engineering - 0.9.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Sun Aug 01 2010 Orcan Ogetbil - 0.9.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild + +* Thu Sep 03 2009 Arnaldo Carvalho de Melo - 0.9.1-1 +- New upstream release + +* Wed Aug 26 2009 Arnaldo Carvalho de Melo - 0.9-3 +- Rewrite the oscilloscope package summary +- Remove the shebang in tuna/oscilloscope.py + +* Mon Aug 17 2009 Arnaldo Carvalho de Melo - 0.9-2 +- Use install -p +- Add BuildRequires for gettext + +* Fri Jul 10 2009 Arnaldo Carvalho de Melo - 0.9-1 +- Fedora package reviewing changes: introduce ChangeLog file