brintos

brintos / linux-shallow public Read only

0
0
Text · 2.0 KiB · 8cc5eb2 Raw
75 lines · python
1#!/usr/bin/env python32# SPDX-License-Identifier: GPL-2.0-only3#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 workload7# so rtla can measure and provide auto-analysis for the overall latency (IOW8# 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 9514#15# The "Timerlat IRQ" is the IRQ latency, The thread latency is the latency16# for the python process to get the CPU. The Ret from user Timer Latency is17# the overall latency. In other words, it is the response time for that18# activation.19#20# This is just an example, the load is reading 20MB of data from /dev/full21# It is in python because it is easy to read :-)22 23import argparse24import sys25import os26 27parser = argparse.ArgumentParser(description='user-space timerlat thread in Python')28parser.add_argument("cpu", help='CPU to run timerlat thread')29parser.add_argument("-p", "--prio", help='FIFO priority')30 31args = parser.parse_args()32 33try:34    affinity_mask = { int(args.cpu) }35except:36    print("Invalid cpu: " + args.cpu)37    exit(1)38 39try:40    os.sched_setaffinity(0, affinity_mask);41except:42    print("Error setting affinity")43    exit(1)44 45if (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 53try:54    timerlat_path = "/sys/kernel/tracing/osnoise/per_cpu/cpu" + args.cpu + "/timerlat_fd"55    timerlat_fd = open(timerlat_path, 'r')56except:57    print("Error opening timerlat fd, did you run timerlat -U?")58    exit(1)59 60try:61    data_fd = open("/dev/full", 'r');62except:63    print("Error opening data fd")64 65while True:66    try:67        timerlat_fd.read(1)68        data_fd.read(20*1024*1024)69    except:70        print("Leaving")71        break72 73timerlat_fd.close()74data_fd.close()75