xref: /linux/tools/sched/dl_bw_dump.py (revision bf76f23aa1c178e9115eba17f699fa726aed669b)
1*634c2406SJuri Lelli#!/usr/bin/env drgn
2*634c2406SJuri Lelli# SPDX-License-Identifier: GPL-2.0
3*634c2406SJuri Lelli# Copyright (C) 2025 Juri Lelli <juri.lelli@redhat.com>
4*634c2406SJuri Lelli# Copyright (C) 2025 Red Hat, Inc.
5*634c2406SJuri Lelli
6*634c2406SJuri Lellidesc = """
7*634c2406SJuri LelliThis is a drgn script to show dl_rq bandwidth accounting information. For more
8*634c2406SJuri Lelliinfo on drgn, visit https://github.com/osandov/drgn.
9*634c2406SJuri Lelli
10*634c2406SJuri LelliOnly online CPUs are reported.
11*634c2406SJuri Lelli"""
12*634c2406SJuri Lelli
13*634c2406SJuri Lelliimport os
14*634c2406SJuri Lelliimport argparse
15*634c2406SJuri Lelli
16*634c2406SJuri Lelliimport drgn
17*634c2406SJuri Lellifrom drgn import FaultError
18*634c2406SJuri Lellifrom drgn.helpers.common import *
19*634c2406SJuri Lellifrom drgn.helpers.linux import *
20*634c2406SJuri Lelli
21*634c2406SJuri Lellidef print_dl_bws_info():
22*634c2406SJuri Lelli
23*634c2406SJuri Lelli    print("Retrieving dl_rq bandwidth accounting information:")
24*634c2406SJuri Lelli
25*634c2406SJuri Lelli    runqueues = prog['runqueues']
26*634c2406SJuri Lelli
27*634c2406SJuri Lelli    for cpu_id in for_each_possible_cpu(prog):
28*634c2406SJuri Lelli        try:
29*634c2406SJuri Lelli            rq = per_cpu(runqueues, cpu_id)
30*634c2406SJuri Lelli
31*634c2406SJuri Lelli            if rq.online == 0:
32*634c2406SJuri Lelli                continue
33*634c2406SJuri Lelli
34*634c2406SJuri Lelli            dl_rq = rq.dl
35*634c2406SJuri Lelli
36*634c2406SJuri Lelli            print(f"  From CPU: {cpu_id}")
37*634c2406SJuri Lelli
38*634c2406SJuri Lelli            # Access and print relevant fields from struct dl_rq
39*634c2406SJuri Lelli            print(f"  running_bw : {dl_rq.running_bw}")
40*634c2406SJuri Lelli            print(f"  this_bw    : {dl_rq.this_bw}")
41*634c2406SJuri Lelli            print(f"  extra_bw   : {dl_rq.extra_bw}")
42*634c2406SJuri Lelli            print(f"  max_bw     : {dl_rq.max_bw}")
43*634c2406SJuri Lelli            print(f"  bw_ratio   : {dl_rq.bw_ratio}")
44*634c2406SJuri Lelli
45*634c2406SJuri Lelli        except drgn.FaultError as fe:
46*634c2406SJuri Lelli            print(f"  (CPU {cpu_id}: Fault accessing kernel memory: {fe})")
47*634c2406SJuri Lelli        except AttributeError as ae:
48*634c2406SJuri Lelli            print(f"  (CPU {cpu_id}: Missing attribute for root_domain (kernel struct change?): {ae})")
49*634c2406SJuri Lelli        except Exception as e:
50*634c2406SJuri Lelli            print(f"  (CPU {cpu_id}: An unexpected error occurred: {e})")
51*634c2406SJuri Lelli
52*634c2406SJuri Lelliif __name__ == "__main__":
53*634c2406SJuri Lelli    parser = argparse.ArgumentParser(description=desc,
54*634c2406SJuri Lelli                                     formatter_class=argparse.RawTextHelpFormatter)
55*634c2406SJuri Lelli    args = parser.parse_args()
56*634c2406SJuri Lelli
57*634c2406SJuri Lelli    print_dl_bws_info()
58