1 #!/usr/bin/env python3 2 # SPDX-License-Identifier: GPL-2.0-only 3 # 4 # Copyright (C) 2024 Red Hat, Inc. Daniel Bristot de Oliveira <bristot@kernel.org> 5 # 6 # This is a sample code about how to use timerlat's timer by any workload 7 # so rtla can measure and provide auto-analysis for the overall latency (IOW 8 # the response time) for a task. 9 # 10 # Before running it, you need to dispatch timerlat with -U option in a terminal. 11 # Then # run this script pinned to a CPU on another terminal. For example: 12 # 13 # timerlat_load.py 1 -p 95 14 # 15 # The "Timerlat IRQ" is the IRQ latency, The thread latency is the latency 16 # for the python process to get the CPU. The Ret from user Timer Latency is 17 # the overall latency. In other words, it is the response time for that 18 # activation. 19 # 20 # This is just an example, the load is reading 20MB of data from /dev/full 21 # It is in python because it is easy to read :-) 22 23 import argparse 24 import sys 25 import os 26 27 parser = argparse.ArgumentParser(description='user-space timerlat thread in Python') 28 parser.add_argument("cpu", help='CPU to run timerlat thread') 29 parser.add_argument("-p", "--prio", help='FIFO priority') 30 31 args = parser.parse_args() 32 33 try: 34 affinity_mask = { int(args.cpu) } 35 except: 36 print("Invalid cpu: " + args.cpu) 37 exit(1) 38 39 try: 40 os.sched_setaffinity(0, affinity_mask); 41 except: 42 print("Error setting affinity") 43 exit(1) 44 45 if (args.prio): 46 try: 47 param = os.sched_param(int(args.prio)) 48 os.sched_setscheduler(0, os.SCHED_FIFO, param) 49 except: 50 print("Error setting priority") 51 exit(1) 52 53 try: 54 timerlat_path = "/sys/kernel/tracing/osnoise/per_cpu/cpu" + args.cpu + "/timerlat_fd" 55 timerlat_fd = open(timerlat_path, 'r') 56 except: 57 print("Error opening timerlat fd, did you run timerlat -U?") 58 exit(1) 59 60 try: 61 data_fd = open("/dev/full", 'r'); 62 except: 63 print("Error opening data fd") 64 65 while True: 66 try: 67 timerlat_fd.read(1) 68 data_fd.read(20*1024*1024) 69 except: 70 print("Leaving") 71 break 72 73 timerlat_fd.close() 74 data_fd.close()
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.