]> git.puffer.fish Git - matthieu/frr.git/commitdiff
lib, zebra: Add a bit of code to look at fifo
authorDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 22 Jun 2018 14:38:53 +0000 (10:38 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 28 Jun 2018 00:01:22 +0000 (20:01 -0400)
When in a dev build add a bit of code to track max
depth of a fifo and to allow zebra to report on it.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
lib/stream.c
lib/stream.h
zebra/zserv.c

index aba4c20166175e27049d126def18c4315e95e25e..a172eedc995256ee378e77fa23849259dbf4a53d 100644 (file)
@@ -1109,6 +1109,10 @@ struct stream_fifo *stream_fifo_new(void)
 /* Add new stream to fifo. */
 void stream_fifo_push(struct stream_fifo *fifo, struct stream *s)
 {
+#if defined DEV_BUILD
+       size_t max, curmax;
+#endif
+
        if (fifo->tail)
                fifo->tail->next = s;
        else
@@ -1116,8 +1120,15 @@ void stream_fifo_push(struct stream_fifo *fifo, struct stream *s)
 
        fifo->tail = s;
        fifo->tail->next = NULL;
-
+#if !defined DEV_BUILD
        atomic_fetch_add_explicit(&fifo->count, 1, memory_order_release);
+#else
+       max = atomic_fetch_add_explicit(&fifo->count, 1, memory_order_release);
+       curmax = atomic_load_explicit(&fifo->max_count, memory_order_relaxed);
+       if (max > curmax)
+               atomic_store_explicit(&fifo->max_count, max,
+                                     memory_order_relaxed);
+#endif
 }
 
 void stream_fifo_push_safe(struct stream_fifo *fifo, struct stream *s)
index e5d325e43ed4940dd65f421d6152e60d892a9d81..11af85c663d086438a270f4879742f2c547eaef3 100644 (file)
@@ -115,6 +115,9 @@ struct stream_fifo {
 
        /* number of streams in this fifo */
        _Atomic size_t count;
+#if defined DEV_BUILD
+       _Atomic size_t max_count;
+#endif
 
        struct stream *head;
        struct stream *tail;
index 14e0db40bfb50c62d864f14a30716af10b375e7d..4fcffacbf495f4cebd9734ed82cb6848342aba23 100644 (file)
@@ -939,6 +939,11 @@ static void zebra_show_client_detail(struct vty *vty, struct zserv *client)
        vty_out(vty, "MAC-IP add notifications: %d\n", client->macipadd_cnt);
        vty_out(vty, "MAC-IP delete notifications: %d\n", client->macipdel_cnt);
 
+#if defined DEV_BUILD
+       vty_out(vty, "Input Fifo: %zu:%zu Output Fifo: %zu:%zu\n",
+               client->ibuf_fifo->count, client->ibuf_fifo->max_count,
+               client->obuf_fifo->count, client->obuf_fifo->max_count);
+#endif
        vty_out(vty, "\n");
        return;
 }