Index | Thread | Search

From:
Claudio Jeker <cjeker@diehard.n-r-g.com>
Subject:
bgpd: add usec counter for the adjout processing in the main event loop
To:
tech@openbsd.org
Date:
Sun, 28 Dec 2025 21:41:12 +0100

Download raw body.

Thread
We already track some times of the main event loop. This add another one
for the adj-rib-out handling via peer_process_updates().

-- 
:wq Claudio

Index: bgpctl/output.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpctl/output.c,v
diff -u -p -r1.66 output.c
--- bgpctl/output.c	27 Dec 2025 14:51:38 -0000	1.66
+++ bgpctl/output.c	28 Dec 2025 20:38:44 -0000
@@ -1127,6 +1127,7 @@ show_rib_mem(struct rde_memstats *stats)
 	    stats->rde_event_loop_usec, stats->rde_event_loop_count);
 	printf("%10lld usec spent on io\n", stats->rde_event_io_usec);
 	printf("%10lld usec spent on peers\n", stats->rde_event_peer_usec);
+	printf("%10lld usec spent on adj-out\n", stats->rde_event_adjout_usec);
 	printf("%10lld usec spent on rib dumps\n",
 	    stats->rde_event_ribdump_usec);
 	printf("%10lld usec spent on nexthops\n",
Index: bgpctl/output_json.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpctl/output_json.c,v
diff -u -p -r1.57 output_json.c
--- bgpctl/output_json.c	27 Dec 2025 14:51:38 -0000	1.57
+++ bgpctl/output_json.c	28 Dec 2025 20:38:44 -0000
@@ -953,6 +953,7 @@ json_rib_mem(struct rde_memstats *stats)
 	json_do_uint("loop_usec", stats->rde_event_loop_usec);
 	json_do_uint("io_usec", stats->rde_event_io_usec);
 	json_do_uint("peer_usec", stats->rde_event_peer_usec);
+	json_do_uint("adjout_usec", stats->rde_event_adjout_usec);
 	json_do_uint("ribdump_usec", stats->rde_event_ribdump_usec);
 	json_do_uint("nexthop_usec", stats->rde_event_nexthop_usec);
 	json_do_uint("update_usec", stats->rde_event_update_usec);
Index: bgpctl/output_ometric.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpctl/output_ometric.c,v
diff -u -p -r1.21 output_ometric.c
--- bgpctl/output_ometric.c	27 Dec 2025 14:51:38 -0000	1.21
+++ bgpctl/output_ometric.c	28 Dec 2025 20:38:44 -0000
@@ -351,6 +351,9 @@ ometric_rib_mem(struct rde_memstats *sta
 	    (double)stats->rde_event_peer_usec / (1000.0 * 1000.0) ,
 	    OKV("stage"), OKV("peer"), NULL);
 	ometric_set_float_with_labels(rde_evloop_time,
+	    (double)stats->rde_event_adjout_usec / (1000.0 * 1000.0) ,
+	    OKV("stage"), OKV("adjout"), NULL);
+	ometric_set_float_with_labels(rde_evloop_time,
 	    (double)stats->rde_event_ribdump_usec / (1000.0 * 1000.0) ,
 	    OKV("stage"), OKV("ribdumps"), NULL);
 	ometric_set_float_with_labels(rde_evloop_time,
Index: bgpd/bgpd.h
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/bgpd.h,v
diff -u -p -r1.528 bgpd.h
--- bgpd/bgpd.h	24 Dec 2025 07:59:55 -0000	1.528
+++ bgpd/bgpd.h	28 Dec 2025 20:38:44 -0000
@@ -1424,6 +1424,7 @@ struct rde_memstats {
 	long long	rde_event_loop_usec;
 	long long	rde_event_io_usec;
 	long long	rde_event_peer_usec;
+	long long	rde_event_adjout_usec;
 	long long	rde_event_ribdump_usec;
 	long long	rde_event_nexthop_usec;
 	long long	rde_event_update_usec;
Index: bgpd/rde.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/rde.c,v
diff -u -p -r1.679 rde.c
--- bgpd/rde.c	28 Dec 2025 17:52:44 -0000	1.679
+++ bgpd/rde.c	28 Dec 2025 20:38:44 -0000
@@ -164,7 +164,8 @@ rde_main(int debug, int verbose)
 	struct passwd		*pw;
 	struct pollfd		*pfd = NULL;
 	struct rde_mrt_ctx	*mctx, *xmctx;
-	monotime_t		 loop_start, io_end, peer_end, dump_end, nh_end;
+	monotime_t		 loop_start, io_end, peer_end, adjout_end,
+				 dump_end, nh_end;
 	void			*newp;
 	u_int			 pfd_elms = 0, i, j;
 	int			 timeout;
@@ -326,17 +327,22 @@ rde_main(int debug, int verbose)
 		    monotime_to_usec(monotime_sub(io_end, loop_start));
 
 		peer_foreach(rde_dispatch_imsg_peer, NULL);
-		peer_foreach(peer_process_updates, NULL);
 
 		peer_end = getmonotime();
 		rdemem.rde_event_peer_usec +=
 		    monotime_to_usec(monotime_sub(peer_end, io_end));
 
+		peer_foreach(peer_process_updates, NULL);
+
+		adjout_end = getmonotime();
+		rdemem.rde_event_adjout_usec +=
+		    monotime_to_usec(monotime_sub(adjout_end, peer_end));
+
 		rib_dump_runner();
 
 		dump_end = getmonotime();
 		rdemem.rde_event_ribdump_usec +=
-		    monotime_to_usec(monotime_sub(dump_end, peer_end));
+		    monotime_to_usec(monotime_sub(dump_end, adjout_end));
 
 		nexthop_runner();