Download raw body.
bgpd: add usec counter for the adjout processing in the main event loop
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();
bgpd: add usec counter for the adjout processing in the main event loop