mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
tools/sched: Add dl_bw_dump.py for printing bandwidth accounting info
dl_rq bandwidth accounting information is crucial for the correct functioning of SCHED_DEADLINE. Add a drgn script for accessing that information at runtime, so that it's easier to check and debug issues related to it. Signed-off-by: Juri Lelli <juri.lelli@redhat.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Tested-by: Marcel Ziswiler <marcel.ziswiler@codethink.co.uk> # nuc & rock5b Link: https://lore.kernel.org/r/20250627115118.438797-6-juri.lelli@redhat.com
This commit is contained in:
parent
9fdb12c88e
commit
634c24068a
57
tools/sched/dl_bw_dump.py
Normal file
57
tools/sched/dl_bw_dump.py
Normal file
@ -0,0 +1,57 @@
|
||||
#!/usr/bin/env drgn
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Copyright (C) 2025 Juri Lelli <juri.lelli@redhat.com>
|
||||
# Copyright (C) 2025 Red Hat, Inc.
|
||||
|
||||
desc = """
|
||||
This is a drgn script to show dl_rq bandwidth accounting information. For more
|
||||
info on drgn, visit https://github.com/osandov/drgn.
|
||||
|
||||
Only online CPUs are reported.
|
||||
"""
|
||||
|
||||
import os
|
||||
import argparse
|
||||
|
||||
import drgn
|
||||
from drgn import FaultError
|
||||
from drgn.helpers.common import *
|
||||
from drgn.helpers.linux import *
|
||||
|
||||
def print_dl_bws_info():
|
||||
|
||||
print("Retrieving dl_rq bandwidth accounting information:")
|
||||
|
||||
runqueues = prog['runqueues']
|
||||
|
||||
for cpu_id in for_each_possible_cpu(prog):
|
||||
try:
|
||||
rq = per_cpu(runqueues, cpu_id)
|
||||
|
||||
if rq.online == 0:
|
||||
continue
|
||||
|
||||
dl_rq = rq.dl
|
||||
|
||||
print(f" From CPU: {cpu_id}")
|
||||
|
||||
# Access and print relevant fields from struct dl_rq
|
||||
print(f" running_bw : {dl_rq.running_bw}")
|
||||
print(f" this_bw : {dl_rq.this_bw}")
|
||||
print(f" extra_bw : {dl_rq.extra_bw}")
|
||||
print(f" max_bw : {dl_rq.max_bw}")
|
||||
print(f" bw_ratio : {dl_rq.bw_ratio}")
|
||||
|
||||
except drgn.FaultError as fe:
|
||||
print(f" (CPU {cpu_id}: Fault accessing kernel memory: {fe})")
|
||||
except AttributeError as ae:
|
||||
print(f" (CPU {cpu_id}: Missing attribute for root_domain (kernel struct change?): {ae})")
|
||||
except Exception as e:
|
||||
print(f" (CPU {cpu_id}: An unexpected error occurred: {e})")
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description=desc,
|
||||
formatter_class=argparse.RawTextHelpFormatter)
|
||||
args = parser.parse_args()
|
||||
|
||||
print_dl_bws_info()
|
Loading…
Reference in New Issue
Block a user