From abf96a87f3f2f9527885ee78930787ecb4068530 Mon Sep 17 00:00:00 2001 From: Quentin Young Date: Mon, 14 Sep 2020 18:04:33 -0400 Subject: lib: add tracepoints for hash ops, thread events Define some initial tracepoints for hash table operations, thread schedules, and thread cancels Signed-off-by: Quentin Young --- lib/hash.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'lib/hash.c') diff --git a/lib/hash.c b/lib/hash.c index 85982774ac..99a9e2e3ab 100644 --- a/lib/hash.c +++ b/lib/hash.c @@ -29,6 +29,7 @@ #include "command.h" #include "libfrr.h" #include "frr_pthread.h" +#include "trace.h" DEFINE_MTYPE_STATIC(LIB, HASH, "Hash") DEFINE_MTYPE_STATIC(LIB, HASH_BACKET, "Hash Bucket") @@ -138,6 +139,8 @@ static void hash_expand(struct hash *hash) void *hash_get(struct hash *hash, void *data, void *(*alloc_func)(void *)) { + tracepoint(frr_libfrr, hash_get, hash, data); + unsigned int key; unsigned int index; void *newdata; @@ -206,7 +209,7 @@ unsigned int string_hash_make(const char *str) void *hash_release(struct hash *hash, void *data) { - void *ret; + void *ret = NULL; unsigned int key; unsigned int index; struct hash_bucket *bucket; @@ -236,11 +239,14 @@ void *hash_release(struct hash *hash, void *data) ret = bucket->data; XFREE(MTYPE_HASH_BACKET, bucket); hash->count--; - return ret; + break; } pp = bucket; } - return NULL; + + tracepoint(frr_libfrr, hash_release, hash, data, ret); + + return ret; } void hash_iterate(struct hash *hash, void (*func)(struct hash_bucket *, void *), -- cgit v1.2.3 From 67a485d18f4074dbdd8378279b400137283c3aa5 Mon Sep 17 00:00:00 2001 From: Quentin Young Date: Wed, 16 Sep 2020 19:29:32 -0400 Subject: lib: add tracepoint for hash insertion hash_get is used for both lookup and insert; add a tracepoint for when we insert something into the hash Signed-off-by: Quentin Young --- lib/hash.c | 2 ++ lib/trace.h | 15 +++++++++++++++ 2 files changed, 17 insertions(+) (limited to 'lib/hash.c') diff --git a/lib/hash.c b/lib/hash.c index 99a9e2e3ab..d0dc639229 100644 --- a/lib/hash.c +++ b/lib/hash.c @@ -175,6 +175,8 @@ void *hash_get(struct hash *hash, void *data, void *(*alloc_func)(void *)) hash->index[index] = bucket; hash->count++; + tracepoint(frr_libfrr, hash_insert, hash, data, key); + int oldlen = bucket->next ? bucket->next->len : 0; int newlen = oldlen + 1; diff --git a/lib/trace.h b/lib/trace.h index e6d0f115e4..753a25f4a5 100644 --- a/lib/trace.h +++ b/lib/trace.h @@ -54,6 +54,21 @@ TRACEPOINT_EVENT( TRACEPOINT_LOGLEVEL(frr_libfrr, hash_get, TRACE_INFO) +TRACEPOINT_EVENT( + frr_libfrr, + hash_insert, + TP_ARGS(struct hash *, hash, void *, data, unsigned int, key), + TP_FIELDS( + ctf_string(name, hash->name ? hash->name : "(unnamed)") + ctf_integer(unsigned int, key, hash->size) + ctf_integer(unsigned int, index_size, hash->size) + ctf_integer(unsigned long, item_count, hash->count) + ctf_integer_hex(intptr_t, data_ptr, data) + ) +) + +TRACEPOINT_LOGLEVEL(frr_libfrr, hash_insert, TRACE_INFO) + TRACEPOINT_EVENT( frr_libfrr, hash_release, -- cgit v1.2.3 From 912d45a1610dc7ec14017a2d8618ad357e89370e Mon Sep 17 00:00:00 2001 From: Quentin Young Date: Mon, 28 Sep 2020 15:49:22 -0400 Subject: lib: move trace.h -> libfrr_trace.h Signed-off-by: Quentin Young --- lib/frr_pthread.c | 2 +- lib/hash.c | 2 +- lib/libfrr_trace.c | 4 + lib/libfrr_trace.h | 249 +++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/linklist.c | 2 +- lib/memory.c | 2 +- lib/subdir.am | 6 +- lib/table.c | 2 +- lib/thread.c | 2 +- lib/trace.c | 4 - lib/trace.h | 249 ----------------------------------------------------- lib/zlog.c | 2 +- 12 files changed, 263 insertions(+), 263 deletions(-) create mode 100644 lib/libfrr_trace.c create mode 100644 lib/libfrr_trace.h delete mode 100644 lib/trace.c delete mode 100644 lib/trace.h (limited to 'lib/hash.c') diff --git a/lib/frr_pthread.c b/lib/frr_pthread.c index 82d0c8c49f..689284eb69 100644 --- a/lib/frr_pthread.c +++ b/lib/frr_pthread.c @@ -28,7 +28,7 @@ #include "memory.h" #include "linklist.h" #include "zlog.h" -#include "trace.h" +#include "libfrr_trace.h" DEFINE_MTYPE_STATIC(LIB, FRR_PTHREAD, "FRR POSIX Thread") DEFINE_MTYPE_STATIC(LIB, PTHREAD_PRIM, "POSIX sync primitives") diff --git a/lib/hash.c b/lib/hash.c index d0dc639229..f34a2aae0b 100644 --- a/lib/hash.c +++ b/lib/hash.c @@ -29,7 +29,7 @@ #include "command.h" #include "libfrr.h" #include "frr_pthread.h" -#include "trace.h" +#include "libfrr_trace.h" DEFINE_MTYPE_STATIC(LIB, HASH, "Hash") DEFINE_MTYPE_STATIC(LIB, HASH_BACKET, "Hash Bucket") diff --git a/lib/libfrr_trace.c b/lib/libfrr_trace.c new file mode 100644 index 0000000000..2f300e6ee1 --- /dev/null +++ b/lib/libfrr_trace.c @@ -0,0 +1,4 @@ +#define TRACEPOINT_CREATE_PROBES +#define TRACEPOINT_DEFINE + +#include "libfrr_trace.h" diff --git a/lib/libfrr_trace.h b/lib/libfrr_trace.h new file mode 100644 index 0000000000..337360852c --- /dev/null +++ b/lib/libfrr_trace.h @@ -0,0 +1,249 @@ +/* Tracing + * + * Copyright (C) 2020 NVIDIA Corporation + * Quentin Young + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; see the file COPYING; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#if !defined(_LIBFRR_TRACE_H_) || defined(TRACEPOINT_HEADER_MULTI_READ) +#define _LIBFRR_TRACE_H_ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif /* HAVE_CONFIG_H */ + +#ifdef HAVE_LTTNG + +#undef TRACEPOINT_PROVIDER +#define TRACEPOINT_PROVIDER frr_libfrr + +#undef TRACEPOINT_INCLUDE +#define TRACEPOINT_INCLUDE "./libfrr_trace.h" + +#include + +#include "hash.h" +#include "thread.h" +#include "memory.h" +#include "linklist.h" +#include "table.h" + +/* clang-format off */ + +TRACEPOINT_EVENT( + frr_libfrr, + hash_get, + TP_ARGS(struct hash *, hash, void *, data), + TP_FIELDS( + ctf_string(name, hash->name ? hash->name : "(unnamed)") + ctf_integer(unsigned int, index_size, hash->size) + ctf_integer(unsigned long, item_count, hash->count) + ctf_integer_hex(intptr_t, data_ptr, data) + ) +) + +TRACEPOINT_LOGLEVEL(frr_libfrr, hash_get, TRACE_INFO) + +TRACEPOINT_EVENT( + frr_libfrr, + hash_insert, + TP_ARGS(struct hash *, hash, void *, data, unsigned int, key), + TP_FIELDS( + ctf_string(name, hash->name ? hash->name : "(unnamed)") + ctf_integer(unsigned int, key, hash->size) + ctf_integer(unsigned int, index_size, hash->size) + ctf_integer(unsigned long, item_count, hash->count) + ctf_integer_hex(intptr_t, data_ptr, data) + ) +) + +TRACEPOINT_LOGLEVEL(frr_libfrr, hash_insert, TRACE_INFO) + +TRACEPOINT_EVENT( + frr_libfrr, + hash_release, + TP_ARGS(struct hash *, hash, void *, data, void *, released_item), + TP_FIELDS( + ctf_string(name, hash->name ? hash->name : "(unnamed)") + ctf_integer(unsigned int, index_size, hash->size) + ctf_integer(unsigned long, item_count, hash->count) + ctf_integer_hex(intptr_t, data_ptr, data) + ctf_integer_hex(intptr_t, released_item, data) + ) +) + +TRACEPOINT_LOGLEVEL(frr_libfrr, hash_release, TRACE_INFO) + +#define THREAD_SCHEDULE_ARGS \ + TP_ARGS(struct thread_master *, master, const char *, funcname, \ + const char *, schedfrom, int, fromln, struct thread **, \ + thread_ptr, int, fd, int, val, void *, arg, long, time) + +TRACEPOINT_EVENT_CLASS( + frr_libfrr, + thread_operation, + THREAD_SCHEDULE_ARGS, + TP_FIELDS( + ctf_string(threadmaster_name, master->name) + ctf_string(function_name, funcname ? funcname : "(unknown function)") + ctf_string(scheduled_from, schedfrom ? schedfrom : "(unknown file)") + ctf_integer(int, scheduled_on_line, fromln) + ctf_integer_hex(intptr_t, thread_addr, thread_ptr ? *thread_ptr : NULL) + ctf_integer(int, file_descriptor, fd) + ctf_integer(int, event_value, val) + ctf_integer_hex(intptr_t, argument_ptr, arg) + ctf_integer(long, timer, time) + ) +) + +#define THREAD_OPERATION_TRACEPOINT_INSTANCE(name) \ + TRACEPOINT_EVENT_INSTANCE(frr_libfrr, thread_operation, name, \ + THREAD_SCHEDULE_ARGS) \ + TRACEPOINT_LOGLEVEL(frr_libfrr, name, TRACE_INFO) + +THREAD_OPERATION_TRACEPOINT_INSTANCE(schedule_timer) +THREAD_OPERATION_TRACEPOINT_INSTANCE(schedule_event) +THREAD_OPERATION_TRACEPOINT_INSTANCE(schedule_read) +THREAD_OPERATION_TRACEPOINT_INSTANCE(schedule_write) +THREAD_OPERATION_TRACEPOINT_INSTANCE(thread_cancel) +THREAD_OPERATION_TRACEPOINT_INSTANCE(thread_cancel_async) +THREAD_OPERATION_TRACEPOINT_INSTANCE(thread_call) + +TRACEPOINT_EVENT( + frr_libfrr, + frr_pthread_run, + TP_ARGS( + char *, name + ), + TP_FIELDS( + ctf_string(frr_pthread_name, name) + ) +) + +TRACEPOINT_EVENT( + frr_libfrr, + frr_pthread_stop, + TP_ARGS( + char *, name + ), + TP_FIELDS( + ctf_string(frr_pthread_name, name) + ) +) + +TRACEPOINT_EVENT( + frr_libfrr, + memalloc, + TP_ARGS( + struct memtype *, mt, void *, ptr, size_t, size + ), + TP_FIELDS( + ctf_string(memtype, mt->name) + ctf_integer(size_t, size, size) + ctf_integer_hex(intptr_t, ptr, ptr) + ) +) + +TRACEPOINT_EVENT( + frr_libfrr, + memfree, + TP_ARGS( + struct memtype *, mt, void *, ptr + ), + TP_FIELDS( + ctf_string(memtype, mt->name) + ctf_integer_hex(intptr_t, ptr, ptr) + ) +) + +TRACEPOINT_EVENT( + frr_libfrr, + list_add, + TP_ARGS( + struct list *, list, const void *, ptr + ), + TP_FIELDS( + ctf_integer_hex(intptr_t, list, list) + ctf_integer(unsigned int, count, list->count) + ctf_integer_hex(intptr_t, ptr, ptr) + ) +) + +TRACEPOINT_EVENT( + frr_libfrr, + list_remove, + TP_ARGS( + struct list *, list, const void *, ptr + ), + TP_FIELDS( + ctf_integer_hex(intptr_t, list, list) + ctf_integer(unsigned int, count, list->count) + ctf_integer_hex(intptr_t, ptr, ptr) + ) +) + +TRACEPOINT_EVENT( + frr_libfrr, + list_delete_node, + TP_ARGS( + struct list *, list, const void *, node + ), + TP_FIELDS( + ctf_integer_hex(intptr_t, list, list) + ctf_integer(unsigned int, count, list->count) + ctf_integer_hex(intptr_t, node, node) + ) +) + +TRACEPOINT_EVENT( + frr_libfrr, + list_sort, + TP_ARGS( + struct list *, list + ), + TP_FIELDS( + ctf_integer_hex(intptr_t, list, list) + ctf_integer(unsigned int, count, list->count) + ) +) + +TRACEPOINT_EVENT( + frr_libfrr, + route_node_get, + TP_ARGS( + struct route_table *, table, char *, prefix + ), + TP_FIELDS( + ctf_integer_hex(intptr_t, table, table) + ctf_string(prefix, prefix) + ) +) + +/* clang-format on */ + +#include +#include + +#else /* HAVE_LTTNG */ + +#define tracepoint(...) +#define tracef(...) +#define tracelog(...) +#define tracepoint_enabled(...) true + +#endif /* HAVE_LTTNG */ + +#endif /* _TRACE_H */ diff --git a/lib/linklist.c b/lib/linklist.c index 19a8514cd6..ea206d89e7 100644 --- a/lib/linklist.c +++ b/lib/linklist.c @@ -23,7 +23,7 @@ #include "linklist.h" #include "memory.h" -#include "trace.h" +#include "libfrr_trace.h" DEFINE_MTYPE_STATIC(LIB, LINK_LIST, "Link List") DEFINE_MTYPE_STATIC(LIB, LINK_NODE, "Link Node") diff --git a/lib/memory.c b/lib/memory.c index 219ddcb638..6bc46b2f30 100644 --- a/lib/memory.c +++ b/lib/memory.c @@ -29,7 +29,7 @@ #include "memory.h" #include "log.h" -#include "trace.h" +#include "libfrr_trace.h" static struct memgroup *mg_first = NULL; struct memgroup **mg_insert = &mg_first; diff --git a/lib/subdir.am b/lib/subdir.am index 54fdf429fc..5c371f2cc9 100644 --- a/lib/subdir.am +++ b/lib/subdir.am @@ -46,6 +46,7 @@ lib_libfrr_la_SOURCES = \ lib/lib_errors.c \ lib/lib_vty.c \ lib/libfrr.c \ + lib/libfrr_trace.c \ lib/linklist.c \ lib/log.c \ lib/log_filter.c \ @@ -93,7 +94,6 @@ lib_libfrr_la_SOURCES = \ lib/table.c \ lib/termtable.c \ lib/thread.c \ - lib/trace.c \ lib/typerb.c \ lib/typesafe.c \ lib/vector.c \ @@ -205,6 +205,7 @@ pkginclude_HEADERS += \ lib/lib_errors.h \ lib/lib_vty.h \ lib/libfrr.h \ + lib/libfrr_trace.h \ lib/libospf.h \ lib/linklist.h \ lib/log.h \ @@ -252,7 +253,6 @@ pkginclude_HEADERS += \ lib/table.h \ lib/termtable.h \ lib/thread.h \ - lib/trace.h \ lib/typerb.h \ lib/typesafe.h \ lib/vector.h \ @@ -413,9 +413,9 @@ lib_clippy_SOURCES = \ lib/command_py.c \ lib/defun_lex.l \ lib/graph.c \ + lib/libfrr_trace.c \ lib/memory.c \ lib/vector.c \ - lib/trace.c \ # end # (global) clippy rules for all directories diff --git a/lib/table.c b/lib/table.c index 0d1be2beff..26bcca4b2b 100644 --- a/lib/table.c +++ b/lib/table.c @@ -27,7 +27,7 @@ #include "table.h" #include "memory.h" #include "sockunion.h" -#include "trace.h" +#include "libfrr_trace.h" DEFINE_MTYPE_STATIC(LIB, ROUTE_TABLE, "Route table") DEFINE_MTYPE(LIB, ROUTE_NODE, "Route node") diff --git a/lib/thread.c b/lib/thread.c index 8679454367..a15bd541dd 100644 --- a/lib/thread.c +++ b/lib/thread.c @@ -35,7 +35,7 @@ #include "frratomic.h" #include "frr_pthread.h" #include "lib_errors.h" -#include "trace.h" +#include "libfrr_trace.h" DEFINE_MTYPE_STATIC(LIB, THREAD, "Thread") DEFINE_MTYPE_STATIC(LIB, THREAD_MASTER, "Thread master") diff --git a/lib/trace.c b/lib/trace.c deleted file mode 100644 index 7b6c09b387..0000000000 --- a/lib/trace.c +++ /dev/null @@ -1,4 +0,0 @@ -#define TRACEPOINT_CREATE_PROBES -#define TRACEPOINT_DEFINE - -#include "trace.h" diff --git a/lib/trace.h b/lib/trace.h deleted file mode 100644 index 5e0b13a655..0000000000 --- a/lib/trace.h +++ /dev/null @@ -1,249 +0,0 @@ -/* Tracing - * - * Copyright (C) 2020 NVIDIA Corporation - * Quentin Young - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; see the file COPYING; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#if !defined(_TRACE_H) || defined(TRACEPOINT_HEADER_MULTI_READ) -#define _TRACE_H - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif /* HAVE_CONFIG_H */ - -#ifdef HAVE_LTTNG - -#undef TRACEPOINT_PROVIDER -#define TRACEPOINT_PROVIDER frr_libfrr - -#undef TRACEPOINT_INCLUDE -#define TRACEPOINT_INCLUDE "./trace.h" - -#include - -#include "hash.h" -#include "thread.h" -#include "memory.h" -#include "linklist.h" -#include "table.h" - -/* clang-format off */ - -TRACEPOINT_EVENT( - frr_libfrr, - hash_get, - TP_ARGS(struct hash *, hash, void *, data), - TP_FIELDS( - ctf_string(name, hash->name ? hash->name : "(unnamed)") - ctf_integer(unsigned int, index_size, hash->size) - ctf_integer(unsigned long, item_count, hash->count) - ctf_integer_hex(intptr_t, data_ptr, data) - ) -) - -TRACEPOINT_LOGLEVEL(frr_libfrr, hash_get, TRACE_INFO) - -TRACEPOINT_EVENT( - frr_libfrr, - hash_insert, - TP_ARGS(struct hash *, hash, void *, data, unsigned int, key), - TP_FIELDS( - ctf_string(name, hash->name ? hash->name : "(unnamed)") - ctf_integer(unsigned int, key, hash->size) - ctf_integer(unsigned int, index_size, hash->size) - ctf_integer(unsigned long, item_count, hash->count) - ctf_integer_hex(intptr_t, data_ptr, data) - ) -) - -TRACEPOINT_LOGLEVEL(frr_libfrr, hash_insert, TRACE_INFO) - -TRACEPOINT_EVENT( - frr_libfrr, - hash_release, - TP_ARGS(struct hash *, hash, void *, data, void *, released_item), - TP_FIELDS( - ctf_string(name, hash->name ? hash->name : "(unnamed)") - ctf_integer(unsigned int, index_size, hash->size) - ctf_integer(unsigned long, item_count, hash->count) - ctf_integer_hex(intptr_t, data_ptr, data) - ctf_integer_hex(intptr_t, released_item, data) - ) -) - -TRACEPOINT_LOGLEVEL(frr_libfrr, hash_release, TRACE_INFO) - -#define THREAD_SCHEDULE_ARGS \ - TP_ARGS(struct thread_master *, master, const char *, funcname, \ - const char *, schedfrom, int, fromln, struct thread **, \ - thread_ptr, int, fd, int, val, void *, arg, long, time) - -TRACEPOINT_EVENT_CLASS( - frr_libfrr, - thread_operation, - THREAD_SCHEDULE_ARGS, - TP_FIELDS( - ctf_string(threadmaster_name, master->name) - ctf_string(function_name, funcname ? funcname : "(unknown function)") - ctf_string(scheduled_from, schedfrom ? schedfrom : "(unknown file)") - ctf_integer(int, scheduled_on_line, fromln) - ctf_integer_hex(intptr_t, thread_addr, thread_ptr ? *thread_ptr : NULL) - ctf_integer(int, file_descriptor, fd) - ctf_integer(int, event_value, val) - ctf_integer_hex(intptr_t, argument_ptr, arg) - ctf_integer(long, timer, time) - ) -) - -#define THREAD_OPERATION_TRACEPOINT_INSTANCE(name) \ - TRACEPOINT_EVENT_INSTANCE(frr_libfrr, thread_operation, name, \ - THREAD_SCHEDULE_ARGS) \ - TRACEPOINT_LOGLEVEL(frr_libfrr, name, TRACE_INFO) - -THREAD_OPERATION_TRACEPOINT_INSTANCE(schedule_timer) -THREAD_OPERATION_TRACEPOINT_INSTANCE(schedule_event) -THREAD_OPERATION_TRACEPOINT_INSTANCE(schedule_read) -THREAD_OPERATION_TRACEPOINT_INSTANCE(schedule_write) -THREAD_OPERATION_TRACEPOINT_INSTANCE(thread_cancel) -THREAD_OPERATION_TRACEPOINT_INSTANCE(thread_cancel_async) -THREAD_OPERATION_TRACEPOINT_INSTANCE(thread_call) - -TRACEPOINT_EVENT( - frr_libfrr, - frr_pthread_run, - TP_ARGS( - char *, name - ), - TP_FIELDS( - ctf_string(frr_pthread_name, name) - ) -) - -TRACEPOINT_EVENT( - frr_libfrr, - frr_pthread_stop, - TP_ARGS( - char *, name - ), - TP_FIELDS( - ctf_string(frr_pthread_name, name) - ) -) - -TRACEPOINT_EVENT( - frr_libfrr, - memalloc, - TP_ARGS( - struct memtype *, mt, void *, ptr, size_t, size - ), - TP_FIELDS( - ctf_string(memtype, mt->name) - ctf_integer(size_t, size, size) - ctf_integer_hex(intptr_t, ptr, ptr) - ) -) - -TRACEPOINT_EVENT( - frr_libfrr, - memfree, - TP_ARGS( - struct memtype *, mt, void *, ptr - ), - TP_FIELDS( - ctf_string(memtype, mt->name) - ctf_integer_hex(intptr_t, ptr, ptr) - ) -) - -TRACEPOINT_EVENT( - frr_libfrr, - list_add, - TP_ARGS( - struct list *, list, const void *, ptr - ), - TP_FIELDS( - ctf_integer_hex(intptr_t, list, list) - ctf_integer(unsigned int, count, list->count) - ctf_integer_hex(intptr_t, ptr, ptr) - ) -) - -TRACEPOINT_EVENT( - frr_libfrr, - list_remove, - TP_ARGS( - struct list *, list, const void *, ptr - ), - TP_FIELDS( - ctf_integer_hex(intptr_t, list, list) - ctf_integer(unsigned int, count, list->count) - ctf_integer_hex(intptr_t, ptr, ptr) - ) -) - -TRACEPOINT_EVENT( - frr_libfrr, - list_delete_node, - TP_ARGS( - struct list *, list, const void *, node - ), - TP_FIELDS( - ctf_integer_hex(intptr_t, list, list) - ctf_integer(unsigned int, count, list->count) - ctf_integer_hex(intptr_t, node, node) - ) -) - -TRACEPOINT_EVENT( - frr_libfrr, - list_sort, - TP_ARGS( - struct list *, list - ), - TP_FIELDS( - ctf_integer_hex(intptr_t, list, list) - ctf_integer(unsigned int, count, list->count) - ) -) - -TRACEPOINT_EVENT( - frr_libfrr, - route_node_get, - TP_ARGS( - struct route_table *, table, char *, prefix - ), - TP_FIELDS( - ctf_integer_hex(intptr_t, table, table) - ctf_string(prefix, prefix) - ) -) - -/* clang-format on */ - -#include -#include - -#else /* HAVE_LTTNG */ - -#define tracepoint(...) -#define tracef(...) -#define tracelog(...) -#define tracepoint_enabled(...) true - -#endif /* HAVE_LTTNG */ - -#endif /* _TRACE_H */ diff --git a/lib/zlog.c b/lib/zlog.c index f28ff08617..aec8744b9c 100644 --- a/lib/zlog.c +++ b/lib/zlog.c @@ -52,7 +52,7 @@ #include "printfrr.h" #include "frrcu.h" #include "zlog.h" -#include "trace.h" +#include "libfrr_trace.h" DEFINE_MTYPE_STATIC(LIB, LOG_MESSAGE, "log message") DEFINE_MTYPE_STATIC(LIB, LOG_TLSBUF, "log thread-local buffer") -- cgit v1.2.3 From c7bb4f006b22592d3c57bd7d84d521485c278567 Mon Sep 17 00:00:00 2001 From: Quentin Young Date: Mon, 28 Sep 2020 18:13:27 -0400 Subject: lib, bgpd: convert lttng tracepoints to frrtrace() - tracepoint() -> frrtrace() - tracelog() -> frrtracelog() - tracepoint_enabled() -> frrtrace_enabled() Also removes copypasta'd #ifdefs for those LTTng macros, those are handled in lib/trace.h Signed-off-by: Quentin Young --- bgpd/bgp_io.c | 4 ++-- bgpd/bgp_packet.c | 12 ++++++------ bgpd/bgp_route.c | 18 +++++++++--------- bgpd/bgp_trace.h | 11 +---------- lib/frr_pthread.c | 4 ++-- lib/hash.c | 6 +++--- lib/libfrr_trace.h | 13 ++----------- lib/linklist.c | 8 ++++---- lib/memory.c | 4 ++-- lib/table.c | 4 ++-- lib/thread.c | 44 +++++++++++++++++++++----------------------- lib/zlog.c | 10 +++++----- 12 files changed, 59 insertions(+), 79 deletions(-) (limited to 'lib/hash.c') diff --git a/bgpd/bgp_io.c b/bgpd/bgp_io.c index 65b388e61a..0997fdba97 100644 --- a/bgpd/bgp_io.c +++ b/bgpd/bgp_io.c @@ -39,7 +39,7 @@ #include "bgpd/bgp_errors.h" // for expanded error reference information #include "bgpd/bgp_fsm.h" // for BGP_EVENT_ADD, bgp_event #include "bgpd/bgp_packet.h" // for bgp_notify_send_with_data, bgp_notify... -#include "bgpd/bgp_trace.h" // for tracepoints +#include "bgpd/bgp_trace.h" // for frrtraces #include "bgpd/bgpd.h" // for peer, BGP_MARKER_SIZE, bgp_master, bm /* clang-format on */ @@ -236,7 +236,7 @@ static int bgp_process_reads(struct thread *thread) stream_set_endp(pkt, pktsize); frr_with_mutex(&peer->io_mtx) { - tracepoint(frr_bgp, packet_read, peer, pkt); + frrtrace(2, frr_bgp, packet_read, peer, pkt); stream_fifo_push(peer->ibuf, pkt); } diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c index f498dc69db..2ebac56670 100644 --- a/bgpd/bgp_packet.c +++ b/bgpd/bgp_packet.c @@ -2367,7 +2367,7 @@ int bgp_process_packet(struct thread *thread) */ switch (type) { case BGP_MSG_OPEN: - tracepoint(frr_bgp, open_process, peer, size); + frrtrace(2, frr_bgp, open_process, peer, size); atomic_fetch_add_explicit(&peer->open_in, 1, memory_order_relaxed); mprc = bgp_open_receive(peer, size); @@ -2378,7 +2378,7 @@ int bgp_process_packet(struct thread *thread) __func__, peer->host); break; case BGP_MSG_UPDATE: - tracepoint(frr_bgp, update_process, peer, size); + frrtrace(2, frr_bgp, update_process, peer, size); atomic_fetch_add_explicit(&peer->update_in, 1, memory_order_relaxed); peer->readtime = monotime(NULL); @@ -2390,7 +2390,7 @@ int bgp_process_packet(struct thread *thread) __func__, peer->host); break; case BGP_MSG_NOTIFY: - tracepoint(frr_bgp, notification_process, peer, size); + frrtrace(2, frr_bgp, notification_process, peer, size); atomic_fetch_add_explicit(&peer->notify_in, 1, memory_order_relaxed); mprc = bgp_notify_receive(peer, size); @@ -2401,7 +2401,7 @@ int bgp_process_packet(struct thread *thread) __func__, peer->host); break; case BGP_MSG_KEEPALIVE: - tracepoint(frr_bgp, keepalive_process, peer, size); + frrtrace(2, frr_bgp, keepalive_process, peer, size); peer->readtime = monotime(NULL); atomic_fetch_add_explicit(&peer->keepalive_in, 1, memory_order_relaxed); @@ -2414,7 +2414,7 @@ int bgp_process_packet(struct thread *thread) break; case BGP_MSG_ROUTE_REFRESH_NEW: case BGP_MSG_ROUTE_REFRESH_OLD: - tracepoint(frr_bgp, refresh_process, peer, size); + frrtrace(2, frr_bgp, refresh_process, peer, size); atomic_fetch_add_explicit(&peer->refresh_in, 1, memory_order_relaxed); mprc = bgp_route_refresh_receive(peer, size); @@ -2425,7 +2425,7 @@ int bgp_process_packet(struct thread *thread) __func__, peer->host); break; case BGP_MSG_CAPABILITY: - tracepoint(frr_bgp, capability_process, peer, size); + frrtrace(2, frr_bgp, capability_process, peer, size); atomic_fetch_add_explicit(&peer->dynamic_cap_in, 1, memory_order_relaxed); mprc = bgp_capability_receive(peer, size); diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index e3c6c463a5..4713452d5e 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -1329,12 +1329,12 @@ static enum filter_type bgp_input_filter(struct peer *peer, } done: - if (tracepoint_enabled(frr_bgp, input_filter)) { + if (frrtrace_enabled(frr_bgp, input_filter)) { char pfxprint[PREFIX2STR_BUFFER]; prefix2str(p, pfxprint, sizeof(pfxprint)); - tracepoint(frr_bgp, input_filter, peer, pfxprint, afi, safi, - ret == FILTER_PERMIT ? "permit" : "deny"); + frrtrace(5, frr_bgp, input_filter, peer, pfxprint, afi, safi, + ret == FILTER_PERMIT ? "permit" : "deny"); } return ret; @@ -1386,12 +1386,12 @@ static enum filter_type bgp_output_filter(struct peer *peer, } } - if (tracepoint_enabled(frr_bgp, output_filter)) { + if (frrtrace_enabled(frr_bgp, output_filter)) { char pfxprint[PREFIX2STR_BUFFER]; prefix2str(p, pfxprint, sizeof(pfxprint)); - tracepoint(frr_bgp, output_filter, peer, pfxprint, afi, safi, - ret == FILTER_PERMIT ? "permit" : "deny"); + frrtrace(5, frr_bgp, output_filter, peer, pfxprint, afi, safi, + ret == FILTER_PERMIT ? "permit" : "deny"); } done: @@ -3463,12 +3463,12 @@ int bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id, uint8_t pi_type = 0; uint8_t pi_sub_type = 0; - if (tracepoint_enabled(frr_bgp, process_update)) { + if (frrtrace_enabled(frr_bgp, process_update)) { char pfxprint[PREFIX2STR_BUFFER]; prefix2str(p, pfxprint, sizeof(pfxprint)); - tracepoint(frr_bgp, process_update, peer, pfxprint, addpath_id, - afi, safi, attr); + frrtrace(6, frr_bgp, process_update, peer, pfxprint, addpath_id, + afi, safi, attr); } #ifdef ENABLE_BGP_VNC diff --git a/bgpd/bgp_trace.h b/bgpd/bgp_trace.h index 4b79155efb..bd26c8de8a 100644 --- a/bgpd/bgp_trace.h +++ b/bgpd/bgp_trace.h @@ -21,9 +21,7 @@ #if !defined(_BGP_TRACE_H) || defined(TRACEPOINT_HEADER_MULTI_READ) #define _BGP_TRACE_H -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif +#include "lib/trace.h" #ifdef HAVE_LTTNG @@ -122,13 +120,6 @@ TRACEPOINT_LOGLEVEL(frr_bgp, output_filter, TRACE_INFO) #include -#else /* HAVE_LTTNG */ - -#define tracepoint(...) -#define tracef(...) -#define tracelog(...) -#define tracepoint_enabled(...) true - #endif /* HAVE_LTTNG */ #endif /* _BGP_TRACE_H */ diff --git a/lib/frr_pthread.c b/lib/frr_pthread.c index 689284eb69..3f0179fbc1 100644 --- a/lib/frr_pthread.c +++ b/lib/frr_pthread.c @@ -168,7 +168,7 @@ int frr_pthread_run(struct frr_pthread *fpt, const pthread_attr_t *attr) sigfillset(&blocksigs); pthread_sigmask(SIG_BLOCK, &blocksigs, &oldsigs); - tracepoint(frr_libfrr, frr_pthread_run, fpt->name); + frrtrace(1, frr_libfrr, frr_pthread_run, fpt->name); fpt->rcu_thread = rcu_thread_prepare(); ret = pthread_create(&fpt->thread, attr, frr_pthread_inner, fpt); @@ -207,7 +207,7 @@ void frr_pthread_notify_running(struct frr_pthread *fpt) int frr_pthread_stop(struct frr_pthread *fpt, void **result) { - tracepoint(frr_libfrr, frr_pthread_stop, fpt->name); + frrtrace(1, frr_libfrr, frr_pthread_stop, fpt->name); int ret = (*fpt->attr.stop)(fpt, result); memset(&fpt->thread, 0x00, sizeof(fpt->thread)); diff --git a/lib/hash.c b/lib/hash.c index f34a2aae0b..ed429b77d0 100644 --- a/lib/hash.c +++ b/lib/hash.c @@ -139,7 +139,7 @@ static void hash_expand(struct hash *hash) void *hash_get(struct hash *hash, void *data, void *(*alloc_func)(void *)) { - tracepoint(frr_libfrr, hash_get, hash, data); + frrtrace(2, frr_libfrr, hash_get, hash, data); unsigned int key; unsigned int index; @@ -175,7 +175,7 @@ void *hash_get(struct hash *hash, void *data, void *(*alloc_func)(void *)) hash->index[index] = bucket; hash->count++; - tracepoint(frr_libfrr, hash_insert, hash, data, key); + frrtrace(3, frr_libfrr, hash_insert, hash, data, key); int oldlen = bucket->next ? bucket->next->len : 0; int newlen = oldlen + 1; @@ -246,7 +246,7 @@ void *hash_release(struct hash *hash, void *data) pp = bucket; } - tracepoint(frr_libfrr, hash_release, hash, data, ret); + frrtrace(3, frr_libfrr, hash_release, hash, data, ret); return ret; } diff --git a/lib/libfrr_trace.h b/lib/libfrr_trace.h index 337360852c..7215007ffb 100644 --- a/lib/libfrr_trace.h +++ b/lib/libfrr_trace.h @@ -21,9 +21,7 @@ #if !defined(_LIBFRR_TRACE_H_) || defined(TRACEPOINT_HEADER_MULTI_READ) #define _LIBFRR_TRACE_H_ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif /* HAVE_CONFIG_H */ +#include "trace.h" #ifdef HAVE_LTTNG @@ -237,13 +235,6 @@ TRACEPOINT_EVENT( #include #include -#else /* HAVE_LTTNG */ - -#define tracepoint(...) -#define tracef(...) -#define tracelog(...) -#define tracepoint_enabled(...) true - #endif /* HAVE_LTTNG */ -#endif /* _TRACE_H */ +#endif /* _LIBFRR_TRACE_H_ */ diff --git a/lib/linklist.c b/lib/linklist.c index ea206d89e7..43c2002231 100644 --- a/lib/linklist.c +++ b/lib/linklist.c @@ -67,7 +67,7 @@ static void listnode_free(struct list *list, struct listnode *node) struct listnode *listnode_add(struct list *list, void *val) { - tracepoint(frr_libfrr, list_add, list, val); + frrtrace(2, frr_libfrr, list_add, list, val); struct listnode *node; @@ -284,7 +284,7 @@ void listnode_move_to_tail(struct list *l, struct listnode *n) void listnode_delete(struct list *list, const void *val) { - tracepoint(frr_libfrr, list_remove, list, val); + frrtrace(2, frr_libfrr, list_remove, list, val); struct listnode *node = listnode_lookup(list, val); @@ -365,7 +365,7 @@ struct listnode *listnode_lookup_nocheck(struct list *list, void *data) void list_delete_node(struct list *list, struct listnode *node) { - tracepoint(frr_libfrr, list_delete_node, list, node); + frrtrace(2, frr_libfrr, list_delete_node, list, node); if (node->prev) node->prev->next = node->next; @@ -381,7 +381,7 @@ void list_delete_node(struct list *list, struct listnode *node) void list_sort(struct list *list, int (*cmp)(const void **, const void **)) { - tracepoint(frr_libfrr, list_sort, list); + frrtrace(1, frr_libfrr, list_sort, list); struct listnode *ln, *nn; int i = -1; diff --git a/lib/memory.c b/lib/memory.c index 6bc46b2f30..f715044ea3 100644 --- a/lib/memory.c +++ b/lib/memory.c @@ -78,7 +78,7 @@ static inline void mt_count_alloc(struct memtype *mt, size_t size, void *ptr) static inline void mt_count_free(struct memtype *mt, void *ptr) { - tracepoint(frr_libfrr, memfree, mt, ptr); + frrtrace(2, frr_libfrr, memfree, mt, ptr); assert(mt->n_alloc); atomic_fetch_sub_explicit(&mt->n_alloc, 1, memory_order_relaxed); @@ -92,7 +92,7 @@ static inline void mt_count_free(struct memtype *mt, void *ptr) static inline void *mt_checkalloc(struct memtype *mt, void *ptr, size_t size) { - tracepoint(frr_libfrr, memalloc, mt, ptr, size); + frrtrace(3, frr_libfrr, memalloc, mt, ptr, size); if (__builtin_expect(ptr == NULL, 0)) { if (size) { diff --git a/lib/table.c b/lib/table.c index 26bcca4b2b..89e32182b5 100644 --- a/lib/table.c +++ b/lib/table.c @@ -277,10 +277,10 @@ struct route_node *route_node_lookup_maynull(struct route_table *table, struct route_node *route_node_get(struct route_table *table, union prefixconstptr pu) { - if (tracepoint_enabled(frr_libfrr, route_node_get)) { + if (frrtrace_enabled(frr_libfrr, route_node_get)) { char buf[PREFIX2STR_BUFFER]; prefix2str(pu, buf, sizeof(buf)); - tracepoint(frr_libfrr, route_node_get, table, buf); + frrtrace(2, frr_libfrr, route_node_get, table, buf); } struct route_node search; diff --git a/lib/thread.c b/lib/thread.c index a15bd541dd..9a5453b185 100644 --- a/lib/thread.c +++ b/lib/thread.c @@ -789,11 +789,11 @@ struct thread *funcname_thread_add_read_write(int dir, struct thread_master *m, struct thread **thread_array; if (dir == THREAD_READ) - tracepoint(frr_libfrr, schedule_read, m, funcname, schedfrom, - fromln, t_ptr, fd, 0, arg, 0); + frrtrace(9, frr_libfrr, schedule_read, m, funcname, schedfrom, + fromln, t_ptr, fd, 0, arg, 0); else - tracepoint(frr_libfrr, schedule_write, m, funcname, schedfrom, - fromln, t_ptr, fd, 0, arg, 0); + frrtrace(9, frr_libfrr, schedule_write, m, funcname, schedfrom, + fromln, t_ptr, fd, 0, arg, 0); assert(fd >= 0 && fd < m->fd_limit); frr_with_mutex(&m->mtx) { @@ -869,8 +869,8 @@ funcname_thread_add_timer_timeval(struct thread_master *m, assert(type == THREAD_TIMER); assert(time_relative); - tracepoint(frr_libfrr, schedule_timer, m, funcname, schedfrom, fromln, - t_ptr, 0, 0, arg, (long)time_relative->tv_sec); + frrtrace(9, frr_libfrr, schedule_timer, m, funcname, schedfrom, fromln, + t_ptr, 0, 0, arg, (long)time_relative->tv_sec); frr_with_mutex(&m->mtx) { if (t_ptr && *t_ptr) @@ -950,8 +950,8 @@ struct thread *funcname_thread_add_event(struct thread_master *m, { struct thread *thread = NULL; - tracepoint(frr_libfrr, schedule_event, m, funcname, schedfrom, fromln, - t_ptr, 0, val, arg, 0); + frrtrace(9, frr_libfrr, schedule_event, m, funcname, schedfrom, fromln, + t_ptr, 0, val, arg, 0); assert(m != NULL); @@ -1181,10 +1181,9 @@ void thread_cancel(struct thread *thread) { struct thread_master *master = thread->master; - tracepoint(frr_libfrr, thread_cancel, master, thread->funcname, - thread->schedfrom, thread->schedfrom_line, NULL, - thread->u.fd, thread->u.val, thread->arg, - thread->u.sands.tv_sec); + frrtrace(9, frr_libfrr, thread_cancel, master, thread->funcname, + thread->schedfrom, thread->schedfrom_line, NULL, thread->u.fd, + thread->u.val, thread->arg, thread->u.sands.tv_sec); assert(master->owner == pthread_self()); @@ -1227,14 +1226,14 @@ void thread_cancel_async(struct thread_master *master, struct thread **thread, assert(!(thread && eventobj) && (thread || eventobj)); if (thread && *thread) - tracepoint(frr_libfrr, thread_cancel_async, master, - (*thread)->funcname, (*thread)->schedfrom, - (*thread)->schedfrom_line, NULL, (*thread)->u.fd, - (*thread)->u.val, (*thread)->arg, - (*thread)->u.sands.tv_sec); + frrtrace(9, frr_libfrr, thread_cancel_async, master, + (*thread)->funcname, (*thread)->schedfrom, + (*thread)->schedfrom_line, NULL, (*thread)->u.fd, + (*thread)->u.val, (*thread)->arg, + (*thread)->u.sands.tv_sec); else - tracepoint(frr_libfrr, thread_cancel_async, master, NULL, NULL, - 0, NULL, 0, 0, eventobj, 0); + frrtrace(9, frr_libfrr, thread_cancel_async, master, NULL, NULL, + 0, NULL, 0, 0, eventobj, 0); assert(master->owner != pthread_self()); @@ -1611,10 +1610,9 @@ void thread_call(struct thread *thread) GETRUSAGE(&before); thread->real = before.real; - tracepoint(frr_libfrr, thread_call, thread->master, thread->funcname, - thread->schedfrom, thread->schedfrom_line, NULL, - thread->u.fd, thread->u.val, thread->arg, - thread->u.sands.tv_sec); + frrtrace(9, frr_libfrr, thread_call, thread->master, thread->funcname, + thread->schedfrom, thread->schedfrom_line, NULL, thread->u.fd, + thread->u.val, thread->arg, thread->u.sands.tv_sec); pthread_setspecific(thread_current, thread); (*thread->func)(thread); diff --git a/lib/zlog.c b/lib/zlog.c index aec8744b9c..e77feec5f2 100644 --- a/lib/zlog.c +++ b/lib/zlog.c @@ -458,20 +458,20 @@ void vzlog(int prio, const char *fmt, va_list ap) switch (prio) { case LOG_ERR: - tracelog(TRACE_ERR, msg); + frrtracelog(TRACE_ERR, msg); break; case LOG_WARNING: - tracelog(TRACE_WARNING, msg); + frrtracelog(TRACE_WARNING, msg); break; case LOG_DEBUG: - tracelog(TRACE_DEBUG, msg); + frrtracelog(TRACE_DEBUG, msg); break; case LOG_NOTICE: - tracelog(TRACE_DEBUG, msg); + frrtracelog(TRACE_DEBUG, msg); break; case LOG_INFO: default: - tracelog(TRACE_INFO, msg); + frrtracelog(TRACE_INFO, msg); break; } -- cgit v1.2.3