From 0c46155b2e1f1ded646d7060cfa5ae6ddb28b58d Mon Sep 17 00:00:00 2001 From: Adrian Szyndela Date: Wed, 26 Jan 2022 11:36:05 +0100 Subject: [PATCH] dbus-latency: rework command line options Remove '--histogram', it is now default. Make 'count' option work. Add '--no-gio' and '--no-libdbus' for flexibility. Change-Id: If1cdc3e9b9d0f99fc636517894b25ae7bea6fa64 --- tools/dbus-latency.py | 49 ++++++++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/tools/dbus-latency.py b/tools/dbus-latency.py index 15e83fd9..2e997a61 100755 --- a/tools/dbus-latency.py +++ b/tools/dbus-latency.py @@ -3,31 +3,43 @@ from bcc import BPF from time import sleep from ctypes import c_ushort, c_int, c_ulonglong -from sys import argv - -def usage(): - print("USAGE: %s [--process|histogram]" % argv[0]) - exit() - -count = 100 -interval = 2 +import argparse + +parser = argparse.ArgumentParser( + description="Measure time interval needed for transporting D-Bus messages", + formatter_class=argparse.RawDescriptionHelpFormatter) +parser.add_argument("--process", action="store_true", + help="change output format to top-like") +parser.add_argument("--no-libdbus", action="store_true", + help="exclude messages sent with libdbus") +parser.add_argument("--no-gio", action="store_true", + help="exclude messages sent with gio") +parser.add_argument("interval", nargs="?", default=2, + help="output interval, in seconds") +parser.add_argument("count", nargs="?", default=-1, + help="number of outputs") + +args = parser.parse_args() +interval = int(args.interval) loop = 0 +count = int(args.count) -mode = "histogram" -if len(argv) != 2: - usage() -if argv[1] == "--histogram": - mode = "histogram" -elif argv[1] == "--process": +if args.process: mode = "process" else: - usage() + mode = "histogram" b = BPF(src_file="dbus-latency.c") -b.attach_uprobe(name="dbus-1", sym="_dbus_message_get_network_data", fn_name="get_msg_addr") +# catch sending +if not args.no_libdbus: + b.attach_uprobe(name="dbus-1", sym="_dbus_message_get_network_data", fn_name="get_msg_addr") +if not args.no_gio: + b.attach_uprobe(name="gio-2.0", sym="on_worker_message_about_to_be_sent", fn_name="g_get_msg_addr") + +# catch receiving - don't disable libdbus or libgio, we still want to know that a gio-based +# program received a message sent by a libdbus-based program b.attach_uprobe(name="dbus-1", sym="_dbus_connection_queue_received_message_link", fn_name="get_msg_latency") -b.attach_uprobe(name="gio-2.0", sym="on_worker_message_about_to_be_sent", fn_name="g_get_msg_addr") b.attach_uprobe(name="gio-2.0", sym="on_worker_message_received", fn_name="g_get_msg_latency") print("Hit Ctrl-C to end.") @@ -46,3 +58,6 @@ while (1): print(" messages being transferred: %d" % len(b["msg_sent_addr"].items())) + if count == loop: + print 'Finished' + break -- 2.34.1