dl_bw_dump.py 1.7 KB

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