Dreport: Add SoftIRQ Information Collection

Add functionality to collect softIRQ statistics as part of the debug
data collection process. The new file will contain:

- softIRQs: Software interrupt statistics including counts and
  processing details

Including this information in debug reports will enhance
troubleshooting capabilities for system performance and resource
utilization in OpenBMC based systems. It provides a snapshot of
software interrupt processing activity at the time of report generation.

This addition will help identify potential bottlenecks and excessive
softIRQ activity that may impact system performance or stability,
particularly for network stack processing, timers, and tasklet
execution analysis.

Tested on the qemuarm platform.

'''
Dump size: 82k
Untar Dump Size: 936K
Added File Size: 282 bytes
Time for the Dump Completion: 15sec
Time for the command to run: 0.038s

Data can be used like
Network Analysis (NET_RX/NET_TX)
NET_RX: 170 suggests:
170 packets received via network interfaces during collection
Potential issues if:
Counts increase without traffic
Asymmetry between NET_RX and actual received packets (ifconfig/ethtool)

root@qemuarm:~# busctl call xyz.openbmc_project.Dump.Manager /xyz/openbmc_project/dump/bmc xyz.openbmc_project.Dump.Create CreateDump a{sv} 1 "i" i 1234

root@qemuarm:~# journalctl -f -u xyz.openbmc_project.Dump.Manager
...
Mar 26 04:09:34 qemuarm phosphor-dump-manager[220]: OriginatorId is not provided
Mar 26 04:09:34 qemuarm phosphor-dump-manager[220]: OriginatorType is not provided. Replacing the string with the default value
Mar 26 04:09:34 qemuarm phosphor-dump-manager[220]: Initiating new BMC dump with type: user path:
...
Mar 26 04:09:49 qemuarm phosphor-dump-manager[304]: Wed Mar 26 04:09:49 UTC 2025 Report is available in /var/lib/phosphor-debug-collector/dumps/1
Mar 26 04:09:49 qemuarm phosphor-dump-manager[304]: Wed Mar 26 04:09:49 UTC 2025 Successfully completed
Mar 26 04:09:49 qemuarm phosphor-dump-manager[220]: User initiated dump completed, resetting flag

root@qemuarm:~# time cat /proc/softirqs
...
real    0m0.038s
user    0m0.021s
sys     0m0.002s
root@qemuarm:~#

ls -lrth obmcdump_1_1742962174.tar.xz
-rw-r--r-- 1 dkamat domain-users 82K Mar 26 10:16 obmcdump_1_1742962174.tar.xz

ls -lrth obmcdump_1_1742962174/
total 936K
-rw-r--r-- 1 dkamat domain-users  223 Mar 26 09:39 summary.log
...
-rw-r--r-- 1 dkamat domain-users  282 Mar 26 09:39 softIRQs.log

cat obmcdump_1_1742962174/softIRQs.log | head
                    CPU0
          HI:          0
       TIMER:       4457
      NET_TX:          3
      NET_RX:        170
       BLOCK:          0
    IRQ_POLL:          0
     TASKLET:          1
       SCHED:          0
     HRTIMER:          0
'''

Change-Id: I154e9a4ddfad4099ea57d31fb689ac9eefdda8e7
Signed-off-by: Deepak Kamat <dkamat@nvidia.com>
1 file changed
tree: 146007d169203a989af4fca05e873363179a3723
  1. dump-extensions/
  2. host-transport-extensions/
  3. subprojects/
  4. test/
  5. tools/
  6. .clang-format
  7. .clang-tidy
  8. .gitignore
  9. .shellcheck-ignore
  10. bmc_dump_entry.cpp
  11. bmc_dump_entry.hpp
  12. core_manager.cpp
  13. core_manager.hpp
  14. core_manager_main.cpp
  15. dump-extensions.hpp
  16. dump_entry.cpp
  17. dump_entry.hpp
  18. dump_manager.cpp
  19. dump_manager.hpp
  20. dump_manager_bmc.cpp
  21. dump_manager_bmc.hpp
  22. dump_manager_faultlog.cpp
  23. dump_manager_faultlog.hpp
  24. dump_manager_main.cpp
  25. dump_offload.cpp
  26. dump_offload.hpp
  27. dump_serialize.cpp
  28. dump_serialize.hpp
  29. dump_types.cpp.mako
  30. dump_types.hpp.mako
  31. dump_utils.cpp
  32. dump_utils.hpp
  33. elog_watch.cpp
  34. elog_watch.hpp
  35. example_dump_types.yaml
  36. example_errors_watch.yaml
  37. faultlog_dump_entry.cpp
  38. faultlog_dump_entry.hpp
  39. ffdc
  40. host_transport_exts.hpp
  41. LICENSE
  42. map_gen.py
  43. meson.build
  44. meson.options
  45. OWNERS
  46. ramoops_manager.cpp
  47. ramoops_manager.hpp
  48. ramoops_manager_main.cpp
  49. README.md
  50. watch.cpp
  51. watch.hpp
README.md

phosphor-debug-collector

Phosphor Debug Collector provides mechanisms to collect various log files and system parameters. Used to troubleshoot problems in OpenBMC based systems.

One such mechanism is dreport, a script that collects debug data and packages it into an archive file.

To Build

To build this package with meson, do the following steps:

    1. meson builddir
    2. ninja -C builddir

To clean the built files run ninja -C builddir clean.

To run unit tests

Tests can be run in the CI docker container, refer local-ci-build

or with an OpenBMC x86 sdk(see below for x86 steps).

meson -Dtests=enabled build
ninja -C build test