From: John Kacur <jkacur@redhat.com>
To: linux-rt-users <linux-rt-users@vger.kernel.org>
Cc: Clark Williams <williams@redhat.com>,
"John B. Wyatt IV" <jwyatt@redhat.com>,
Crystal Wood <crwood@redhat.com>,
"John B. Wyatt IV" <sageofredondo@gmail.com>,
John Kacur <jkacur@redhat.com>
Subject: [PATCH 07/23] tuna: extract common cpu and nics determination code into a utils.py file
Date: Fri, 7 Nov 2025 13:57:16 -0500 [thread overview]
Message-ID: <20251107185732.23992-8-jkacur@redhat.com> (raw)
In-Reply-To: <20251107185732.23992-1-jkacur@redhat.com>
From: "John B. Wyatt IV" <jwyatt@redhat.com>
Extracting the code allows these previously local (global to the file)
variables and functions to be used in other files of tuna. Reducing
the number of globals makes the code cleaner and reduces the size of
tuna-cmd.py.
Included a suggestion by Crystal to move a function from the latter
patch into utils.py and make it dependent on get_nr_cpus() (v2).
Included a request by John Kacur to place the SPDX message at the top of
the file (v4).
Suggested-by: Crystal Wood <crwood@redhat.com>
Signed-off-by: John B. Wyatt IV <jwyatt@redhat.com>
Signed-off-by: John B. Wyatt IV <sageofredondo@gmail.com>
- minor spelling error fix
Signed-off-by: John Kacur <jkacur@redhat.com>
---
tuna-cmd.py | 34 +++++++---------------------------
tuna/utils.py | 28 ++++++++++++++++++++++++++++
2 files changed, 35 insertions(+), 27 deletions(-)
create mode 100644 tuna/utils.py
diff --git a/tuna-cmd.py b/tuna-cmd.py
index f37e286bffdb..d0323f510750 100755
--- a/tuna-cmd.py
+++ b/tuna-cmd.py
@@ -21,7 +21,7 @@ from functools import reduce
import tuna.new_eth as ethtool
import tuna.tuna_sched as tuna_sched
import procfs
-from tuna import tuna, sysfs
+from tuna import tuna, sysfs, utils
import logging
import time
import shutil
@@ -76,7 +76,6 @@ except:
# FIXME: ETOOMANYGLOBALS, we need a class!
-nr_cpus = None
ps = None
irqs = None
@@ -233,25 +232,6 @@ def gen_parser():
return parser
-def get_nr_cpus():
- """ Get all cpus including disabled cpus """
- global nr_cpus
- if nr_cpus:
- return nr_cpus
- nr_cpus = os.sysconf('SC_NPROCESSORS_CONF')
- return nr_cpus
-
-nics = None
-
-
-def get_nics():
- global nics
- if nics:
- return nics
- nics = ethtool.get_active_devices()
- return nics
-
-
def thread_help(tid):
global ps
if not ps:
@@ -277,7 +257,7 @@ def save(cpu_list, thread_list, filename):
if (cpu_list and not set(kt.affinity).intersection(set(cpu_list))) or \
(thread_list and kt.pid not in thread_list):
del kthreads[name]
- tuna.generate_rtgroups(filename, kthreads, get_nr_cpus())
+ tuna.generate_rtgroups(filename, kthreads, utils.get_nr_cpus())
def ps_show_header(has_ctxt_switch_info, cgroups=False):
@@ -328,7 +308,7 @@ def format_affinity(affinity):
if len(affinity) <= 4:
return ",".join(str(a) for a in affinity)
- return ",".join(str(hex(a)) for a in procfs.hexbitmask(affinity, get_nr_cpus()))
+ return ",".join(str(hex(a)) for a in procfs.hexbitmask(affinity, utils.get_nr_cpus()))
def ps_show_thread(pid, affect_children, ps, has_ctxt_switch_info, sock_inodes,
sock_inode_re, cgroups, columns=None, compact=True):
@@ -351,7 +331,7 @@ def ps_show_thread(pid, affect_children, ps, has_ctxt_switch_info, sock_inodes,
irqs = procfs.interrupts()
users = irqs[tuna.irq_thread_number(cmd)]["users"]
for u in users:
- if u in get_nics():
+ if u in utils.get_nics():
users[users.index(u)] = "%s(%s)" % (
u, ethtool.get_module(u))
users = ",".join(users)
@@ -486,7 +466,7 @@ def do_ps(thread_list, cpu_list, irq_list, show_uthreads, show_kthreads,
def find_drivers_by_users(users):
- nics = get_nics()
+ nics = utils.get_nics()
drivers = []
for u in users:
try:
@@ -689,10 +669,10 @@ def main():
apply_config(args.profilename)
elif args.command in ['include', 'I']:
- tuna.include_cpus(args.cpu_list, get_nr_cpus())
+ tuna.include_cpus(args.cpu_list, utils.get_nr_cpus())
elif args.command in ['isolate', 'i']:
- tuna.isolate_cpus(args.cpu_list, get_nr_cpus())
+ tuna.isolate_cpus(args.cpu_list, utils.get_nr_cpus())
elif args.command in ['run', 'r']:
diff --git a/tuna/utils.py b/tuna/utils.py
new file mode 100644
index 000000000000..f55432dbbbb0
--- /dev/null
+++ b/tuna/utils.py
@@ -0,0 +1,28 @@
+# SPDX-License-Identifier: GPL-2.0-only
+# Copyright (C) 2024 John B. Wyatt IV
+
+import os
+
+import tuna.new_eth as ethtool
+
+# Collect a few globals and functions so they can be reused in other modules
+nr_cpus = None
+nics = None
+
+def get_nr_cpus():
+ """ Get all cpus including disabled cpus """
+ global nr_cpus
+ if nr_cpus != None:
+ return nr_cpus
+ nr_cpus = os.sysconf('SC_NPROCESSORS_CONF')
+ return nr_cpus
+
+def get_all_cpu_list():
+ return list(range(get_nr_cpus()))
+
+def get_nics():
+ global nics
+ if nics != None:
+ return nics
+ nics = ethtool.get_active_devices()
+ return nics
--
2.51.1
next prev parent reply other threads:[~2025-11-07 18:58 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-07 18:57 [ANNOUNCE] tuna v0.20 John Kacur
2025-11-07 18:57 ` [PATCH 01/23] Add SPDX license identifiers John Kacur
2025-12-18 2:45 ` Kate Stewart
2025-11-07 18:57 ` [PATCH 02/23] tuna: Remove spec file from git John Kacur
2025-11-07 18:57 ` [PATCH 03/23] tuna: Don't start the gui if a display is not available John Kacur
2025-11-07 18:57 ` [PATCH 04/23] tuna: Fix string syntax warnings with raw strings John Kacur
2025-11-07 18:57 ` [PATCH 05/23] tuna: Fix help.py syntax warnings John Kacur
2025-11-07 18:57 ` [PATCH 06/23] tuna: help.py John Kacur
2025-11-07 18:57 ` John Kacur [this message]
2025-11-07 18:57 ` [PATCH 08/23] tuna: Add idle_state control functionality John Kacur
2025-11-07 18:57 ` [PATCH 09/23] tuna: utils: A few tweaks John Kacur
2025-11-07 18:57 ` [PATCH 10/23] tuna: Add Pyright helper John Kacur
2025-11-07 18:57 ` [PATCH 11/23] tuna: Update man page with cpu_power command John Kacur
2025-11-07 18:57 ` [PATCH 12/23] tuna: Fix show_threads -t and show_irqs -q John Kacur
2025-11-07 18:57 ` [PATCH 13/23] tuna: Fix run command failing to apply BATCH policy John Kacur
2025-11-07 18:57 ` [PATCH 14/23] tuna: Add -U and -K to the move command John Kacur
2025-11-07 18:57 ` [PATCH 15/23] tuna: Add -U and -K to the spread command John Kacur
2025-11-07 18:57 ` [PATCH 16/23] tuna: replace match with if statements John Kacur
2025-11-07 18:57 ` [PATCH 17/23] tuna: Proofreading fixes John Kacur
2025-11-07 18:57 ` [PATCH 18/23] tuna: Remove broken testuna John Kacur
2025-11-07 18:57 ` [PATCH 19/23] tuna: Fix setting a realtime scheduling policy John Kacur
2025-11-07 18:57 ` [PATCH 20/23] tuna: Update setup.py with co-author and metadata improvements John Kacur
2025-11-07 18:57 ` [PATCH 21/23] tuna: Add pyproject.toml for modern Python packaging John Kacur
2025-11-07 18:57 ` [PATCH 22/23] tuna: Update version to 0.20 John Kacur
2025-11-07 18:57 ` [PATCH 23/23] tuna: Fix pyproject.toml build issues John Kacur
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251107185732.23992-8-jkacur@redhat.com \
--to=jkacur@redhat.com \
--cc=crwood@redhat.com \
--cc=jwyatt@redhat.com \
--cc=linux-rt-users@vger.kernel.org \
--cc=sageofredondo@gmail.com \
--cc=williams@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox