diff mbox series

[3/3] tools/rtla: Improve exception handling in timerlat_load.py

Message ID Q_k1s4hBtUy2px8ou0QKenjEK2_T_LoV8IxAE79aBakBogb-7uHp2fpET3oWtI1t3dy8uKjWeRzQOdKNzIzOOpyM4OjutJOriZ9TrGY6b-g=@protonmail.com (mailing list archive)
State New
Headers show
Series [1/3] tools/rtla: Improve code readability in timerlat_load.py | expand

Commit Message

furkanonder Oct. 21, 2024, 3:13 p.m. UTC
The enhancements made to timerlat_load.py are intended to improve the script's exception handling.

Summary of the changes:
  - Specific exceptions are now caught for CPU affinity and priority
    settings, with clearer error messages provided.
  - The timerlat file descriptor opening now includes handling for
    PermissionError and OSError, with informative messages.
  - In the infinite loop, generic exceptions have been replaced with
    specific types like KeyboardInterrupt and IOError, improving feedback.

 Before:
    $ sudo python timerlat_load.py 122
    Error setting affinity
 After:
    $ sudo python timerlat_load.py 122
    Error setting affinity: [Errno 22] Invalid argument

 Before:
    $ sudo python timerlat_load.py 1 -p 950
    Error setting priority
 After:
    $ sudo python timerlat_load.py 1 -p 950
    Error setting priority: [Errno 22] Invalid argument

 Before:
    $ python timerlat_load.py 1
    Error opening timerlat fd, did you run timerlat -U?
 After:
    $ python timerlat_load.py 1
    Permission denied. Please check your access rights.

Signed-off-by: Furkan Onder <furkanonder@protonmail.com>
---
 tools/tracing/rtla/sample/timerlat_load.py | 37 +++++++++++++++++++++----------------
 1 file changed, 21 insertions(+), 16 deletions(-)

--
2.46.2

Comments

Tomas Glozar Oct. 22, 2024, 8:30 a.m. UTC | #1
po 21. 10. 2024 v 17:14 odesílatel furkanonder
<furkanonder@protonmail.com> napsal:
>
> The enhancements made to timerlat_load.py are intended to improve the script's exception handling.
>
> Summary of the changes:
>   - Specific exceptions are now caught for CPU affinity and priority
>     settings, with clearer error messages provided.
>   - The timerlat file descriptor opening now includes handling for
>     PermissionError and OSError, with informative messages.
>   - In the infinite loop, generic exceptions have been replaced with
>     specific types like KeyboardInterrupt and IOError, improving feedback.
>
>  Before:
>     $ sudo python timerlat_load.py 122
>     Error setting affinity
>  After:
>     $ sudo python timerlat_load.py 122
>     Error setting affinity: [Errno 22] Invalid argument
>
>  Before:
>     $ sudo python timerlat_load.py 1 -p 950
>     Error setting priority
>  After:
>     $ sudo python timerlat_load.py 1 -p 950
>     Error setting priority: [Errno 22] Invalid argument
>
>  Before:
>     $ python timerlat_load.py 1
>     Error opening timerlat fd, did you run timerlat -U?
>  After:
>     $ python timerlat_load.py 1
>     Permission denied. Please check your access rights.
>
> Signed-off-by: Furkan Onder <furkanonder@protonmail.com>
> ---
>  tools/tracing/rtla/sample/timerlat_load.py | 37 +++++++++++++++++++++----------------
>  1 file changed, 21 insertions(+), 16 deletions(-)
>
> diff --git a/tools/tracing/rtla/sample/timerlat_load.py b/tools/tracing/rtla/sample/timerlat_load.py
> index d7341ed5127a..a819c3588073 100644
> --- a/tools/tracing/rtla/sample/timerlat_load.py
> +++ b/tools/tracing/rtla/sample/timerlat_load.py
> @@ -31,43 +31,48 @@ args = parser.parse_args()
>
>  try:
>      affinity_mask = {args.cpu}
> -except:
> -    print("Invalid cpu: " + args.cpu)
> -    exit(1)
> -
> -try:
>      os.sched_setaffinity(0, affinity_mask)
> -except:
> -    print("Error setting affinity")
> -    exit(1)
> +except Exception as e:
> +    print(f"Error setting affinity: {e}")
> +    sys.exit(1)
>
>  if args.prio:
>      try:
>          param = os.sched_param(args.prio)
>          os.sched_setscheduler(0, os.SCHED_FIFO, param)
> -    except:
> -        print("Error setting priority")
> -        exit(1)
> +    except Exception as e:
> +        print(f"Error setting priority: {e}")
> +        sys.exit(1)
>
>  try:
>      timerlat_path = f"/sys/kernel/tracing/osnoise/per_cpu/cpu{args.cpu}/timerlat_fd"
>      timerlat_fd = open(timerlat_path, 'r')
> -except:
> +except PermissionError:
> +    print("Permission denied. Please check your access rights.")
> +    sys.exit(1)
> +except OSError:
>      print("Error opening timerlat fd, did you run timerlat -U?")
> -    exit(1)
> +    sys.exit(1)
>
>  try:
>      data_fd = open("/dev/full", 'r')
> -except:
> -    print("Error opening data fd")
> +except Exception as e:
> +    print(f"Error opening data fd: {e}")
> +    sys.exit(1)
>
>  while True:
>      try:
>          timerlat_fd.read(1)
>          data_fd.read(20 * 1024 * 1024)
> -    except:
> +    except KeyboardInterrupt:
>          print("Leaving")
>          break
> +    except IOError as e:
> +        print(f"I/O error occurred: {e}")
> +        break
> +    except Exception as e:
> +        print(f"Unexpected error: {e}")
> +        break
>
>  timerlat_fd.close()
>  data_fd.close()
> --
> 2.46.2
>

Reviewed-by: Tomas Glozar <tglozar@redhat.com>
diff mbox series

Patch

diff --git a/tools/tracing/rtla/sample/timerlat_load.py b/tools/tracing/rtla/sample/timerlat_load.py
index d7341ed5127a..a819c3588073 100644
--- a/tools/tracing/rtla/sample/timerlat_load.py
+++ b/tools/tracing/rtla/sample/timerlat_load.py
@@ -31,43 +31,48 @@  args = parser.parse_args()

 try:
     affinity_mask = {args.cpu}
-except:
-    print("Invalid cpu: " + args.cpu)
-    exit(1)
-
-try:
     os.sched_setaffinity(0, affinity_mask)
-except:
-    print("Error setting affinity")
-    exit(1)
+except Exception as e:
+    print(f"Error setting affinity: {e}")
+    sys.exit(1)

 if args.prio:
     try:
         param = os.sched_param(args.prio)
         os.sched_setscheduler(0, os.SCHED_FIFO, param)
-    except:
-        print("Error setting priority")
-        exit(1)
+    except Exception as e:
+        print(f"Error setting priority: {e}")
+        sys.exit(1)

 try:
     timerlat_path = f"/sys/kernel/tracing/osnoise/per_cpu/cpu{args.cpu}/timerlat_fd"
     timerlat_fd = open(timerlat_path, 'r')
-except:
+except PermissionError:
+    print("Permission denied. Please check your access rights.")
+    sys.exit(1)
+except OSError:
     print("Error opening timerlat fd, did you run timerlat -U?")
-    exit(1)
+    sys.exit(1)

 try:
     data_fd = open("/dev/full", 'r')
-except:
-    print("Error opening data fd")
+except Exception as e:
+    print(f"Error opening data fd: {e}")
+    sys.exit(1)

 while True:
     try:
         timerlat_fd.read(1)
         data_fd.read(20 * 1024 * 1024)
-    except:
+    except KeyboardInterrupt:
         print("Leaving")
         break
+    except IOError as e:
+        print(f"I/O error occurred: {e}")
+        break
+    except Exception as e:
+        print(f"Unexpected error: {e}")
+        break

 timerlat_fd.close()
 data_fd.close()