Dreport: Add D-Bus Statistics Collection
Add functionality to collect statistical information about
D-Bus usage as part of the debug data collection process.
Including this information in debug reports will enhance
troubleshooting capabilities for D-Bus related issues in
OpenBMC-based systems. It provides a snapshot of D-Bus
activity and performance at the time of report generation.
This addition will help identify potential communication
bottlenecks, unexpected service behaviors, and performance
issues related to inter-process communication, system
management interfaces, and sensor data retrieval.
Tested on qemuarm.
'''
Dump size: 76k
Untar Dump Size: 916K
Added File Size: 79K
Time for the Dump Completion: 15 sec
Time for the command to run: 0.260s
[1] root@qemuarm:~# time dbus-send --system --dest=org.freedesktop.DBus --type=method_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.Debug.Stats.GetStats
real 0m0.260s
user 0m0.049s
sys 0m0.204s
High OutgoingBytes:
While all connections show 0 in the given data, a connection
with consistently high OutgoingBytes might suggest a blocked
receiver or network issues.
Rapidly Increasing NameObjects:
If a connection's NameObjects count grows quickly over time,
it may indicate a resource leak.
Mismatched IncomingBytes and OutgoingBytes:
Large discrepancies between these values across multiple
connections could suggest communication issues.
High Number of Connections:
An unusually high number of active connections
(the log shows 33) might indicate connection leaks
or denial-of-service attempts.
[2] 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
...
[3] Mar 26 11:14:45 qemuarm phosphor-dump-manager[223]: Initiating new BMC dump with type: user path:
...
[4] Mar 26 11:15:00 qemuarm phosphor-dump-manager[305]: Wed Mar 26 11:15:00 UTC 2025 Successfully completed
[5] Mar 26 11:15:00 qemuarm phosphor-dump-manager[223]: User initiated dump completed, resetting flag
ls -lrth obmcdump_1_1742987685
total 916K
...
-rw-r--r-- 1 dkamat domain-users 79K Mar 26 16:44 dbusstats.log
...
ls -lrth obmcdump_1_1742987685/dbusstats.log
domain-users 79K Mar 26 16:44 obmcdump_1_1742987685/dbusstats.log
cat obmcdump_1_1742987685/dbusstats.log | -n 10
...
array [
dict entry(
string "NameObjects"
uint32 0
)
dict entry(
string "MatchBytes"
uint32 6150
)
dict entry(
string "Matches"
uint32 8
)
dict entry(
string "ReplyObjects"
uint32 0
)
dict entry(
string "IncomingBytes"
uint32 16
)
dict entry(
string "IncomingFds"
uint32 0
)
dict entry(
string "OutgoingBytes"
uint32 0
)
dict entry(
string "OutgoingFds"
uint32 0
)
dict entry(
string "ActivationRequestBytes"
uint32
)
dict entry(
string "ActivationRequestFds"
uint32 0
)
]
}
'''
Change-Id: I37d93f1a6a55c306cd3a05e7319c99413353aa98
Signed-off-by: Deepak Kamat <dkamat@nvidia.com>
diff --git a/tools/dreport.d/plugins.d/dbusstats b/tools/dreport.d/plugins.d/dbusstats
new file mode 100644
index 0000000..49a046a
--- /dev/null
+++ b/tools/dreport.d/plugins.d/dbusstats
@@ -0,0 +1,18 @@
+#!/bin/bash
+#
+# config: 2 50
+# @brief: Get the internal dbus information.
+#
+
+# shellcheck source=/dev/null
+. "$DREPORT_INCLUDE"/functions
+
+desc="dbus internal stats"
+
+command="dbus-send --system --dest=org.freedesktop.DBus \
+ --type=method_call --print-reply \
+ /org/freedesktop/DBus org.freedesktop.DBus.Debug.Stats.GetStats"
+
+file_name="dbusstats.log"
+
+add_cmd_output "$command" "$file_name" "$desc"