Re: [PATCH v4 1/2] tuna: extract common cpu and nics determination code into a utils.py file

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Mar 11, 2025 at 04:30:18PM -0400, John B. Wyatt IV wrote:
> 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 dependant 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@xxxxxxxxxx>
> 
> Signed-off-by: John B. Wyatt IV <jwyatt@xxxxxxxxxx>
> Signed-off-by: John B. Wyatt IV <sageofredondo@xxxxxxxxx>
> ---
>  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 f37e286..d0323f5 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 0000000..f55432d
> --- /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:

Really a nit: as a general standard, objects should be compared to None
using the "is" operator.

> +        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:

Ditto.

> +        return nics
> +    nics = ethtool.get_active_devices()
> +    return nics
> -- 
> 2.48.1
> 





[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux