]> git.puffer.fish Git - matthieu/frr.git/commit
bgpd: Add tracepoints for bgp_dest_lock_node/bgp_dest_unlock_node
authorDonatas Abraitis <donatas.abraitis@gmail.com>
Mon, 7 Jun 2021 19:27:31 +0000 (22:27 +0300)
committerDonatas Abraitis <donatas.abraitis@gmail.com>
Mon, 7 Jun 2021 20:23:36 +0000 (23:23 +0300)
commit50a568368871a87fe5ef9a8d3479e0191d652b17
tree1bc0d03c9d24c63f7cd28deafaf9aa5f4c4c9e4b
parentd532d1092e165dc9b7164039c0366c4f2856c9f9
bgpd: Add tracepoints for bgp_dest_lock_node/bgp_dest_unlock_node

static inline functions cannot be probed, let's add USDT.

This will help catching memory leaks regarding lock/unlock in the future,
I believe.

```
global locks;

probe begin
{
ansi_clear_screen();
println("Starting...");
}

probe process("/usr/lib/frr/bgpd").mark("bgp_dest_lock")
{
prefix = @cast($arg1, "bgp_node")->p->u->val;
locks[prefix]++;
printf("---> %s %d (lock count: %d)\n", probefunc(),
prefix, @cast($arg1, "bgp_node")->lock);
}

probe process("/usr/lib/frr/bgpd").mark("bgp_dest_unlock")
{

prefix = @cast($arg1, "bgp_node")->p->u->val;
if (locks[prefix] > 0) {
locks[prefix]--;
}
printf("<--- %s %d (lock count: %d)\n", probefunc(),
prefix, @cast($arg1, "bgp_node")->lock);
}
```

Some outputs:

```
<--- adj_free 94283113939304 (lock count: 2)
<--- adj_free 94283114099240 (lock count: 3)
<--- adj_free 94283114099752 (lock count: 3)
---> bgp_clear_route_table 94283113936008 (lock count: 4)
---> bgp_clear_route_table 94283113932664 (lock count: 4)
---> bgp_clear_route_table 94283114099240 (lock count: 3)
---> bgp_clear_route_table 94283114099752 (lock count: 3)
<--- adj_free 94283113795608 (lock count: 2)
<--- adj_free 94283113797112 (lock count: 2)
<--- adj_free 94283113796456 (lock count: 2)
---> bgp_clear_route_table 94283113936008 (lock count: 5)
---> bgp_clear_route_table 94283113932664 (lock count: 5)
---> bgp_clear_route_table 94283114099240 (lock count: 4)
---> bgp_clear_route_table 94283114099752 (lock count: 4)
---> bgp_process 94283113936008 (lock count: 5)
<--- bgp_clear_node_queue_del 94283113936008 (lock count: 6)
---> bgp_process 94283113932664 (lock count: 5)
<--- bgp_clear_node_queue_del 94283113932664 (lock count: 6)
---> bgp_process 94283114099240 (lock count: 4)
<--- bgp_clear_node_queue_del 94283114099240 (lock count: 5)
---> bgp_process 94283114099752 (lock count: 4)
<--- bgp_clear_node_queue_del 94283114099752 (lock count: 5)
<--- bgp_clear_node_queue_del 94283113936008 (lock count: 5)
<--- bgp_clear_node_queue_del 94283113932664 (lock count: 5)
<--- bgp_clear_node_queue_del 94283114099240 (lock count: 4)
<--- bgp_clear_node_queue_del 94283114099752 (lock count: 4)
<--- bgp_path_info_reap 94283113936008 (lock count: 4)
<--- bgp_path_info_reap 94283113936008 (lock count: 3)
```

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
bgpd/bgp_table.h