From f89bbbe300dad7bc479db535e7822199f98aca30 Mon Sep 17 00:00:00 2001 From: Benoît Ganne Date: Thu, 4 Mar 2021 14:31:03 +0100 Subject: vlib: refactor trajectory trace debug feature MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit trajectory trace has been broken for a while because we used to save the buffer trajectory in a vector pointed to in opaque2. This does not work well when opaque2 is copied (eg. because of a clone) as 2 buffers end up sharing the same vector. This dedicates a full cacheline in the buffer metadata instead when trajectory is compiled in. No dynamic allocation, no sharing, no tears. Type: refactor Change-Id: I6a028ca1b48d38f393a36979e5e452c2dd48ad3f Signed-off-by: Benoît Ganne --- src/vnet/util/trajectory.c | 99 ---------------------------------------------- 1 file changed, 99 deletions(-) delete mode 100644 src/vnet/util/trajectory.c (limited to 'src/vnet/util') diff --git a/src/vnet/util/trajectory.c b/src/vnet/util/trajectory.c deleted file mode 100644 index 2538c7ee64a..00000000000 --- a/src/vnet/util/trajectory.c +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (c) 2017 Cisco and/or its affiliates. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** \file - * Buffer trace trajectory utilities - */ - -#include - -/** - * Dump a trajectory trace, reasonably easy to call from gdb - */ -void -vnet_dump_trajectory_trace (vlib_main_t * vm, u32 bi) -{ -#if VLIB_BUFFER_TRACE_TRAJECTORY > 0 - vlib_node_main_t *vnm = &vm->node_main; - vlib_buffer_t *b; - u16 *trace; - u8 i; - - b = vlib_get_buffer (vm, bi); - - trace = vnet_buffer2 (b)->trajectory_trace; - - fformat (stderr, "Context trace for bi %d b 0x%llx, visited %d\n", - bi, b, vec_len (trace)); - - for (i = 0; i < vec_len (trace); i++) - { - u32 node_index; - - node_index = trace[i]; - - if (node_index >= vec_len (vnm->nodes)) - { - fformat (stderr, "Skip bogus node index %d\n", node_index); - continue; - } - - fformat (stderr, "%v (%d)\n", vnm->nodes[node_index]->name, node_index); - } -#else - fformat (stderr, "in vlib/buffers.h, " - "#define VLIB_BUFFER_TRACE_TRAJECTORY 1\n"); - -#endif -} - -#if VLIB_BUFFER_TRACE_TRAJECTORY > 0 - -void -init_trajectory_trace (vlib_buffer_t * b) -{ - if (!clib_mem_is_vec (vnet_buffer2 (b)->trajectory_trace)) - { - vnet_buffer2 (b)->trajectory_trace = 0; - vec_validate (vnet_buffer2 (b)->trajectory_trace, 7); - } - _vec_len (vnet_buffer2 (b)->trajectory_trace) = 0; -} - -void -add_trajectory_trace (vlib_buffer_t * b, u32 node_index) -{ - vec_add1 (vnet_buffer2 (b)->trajectory_trace, (u16) node_index); -} - -static clib_error_t * -trajectory_trace_init (vlib_main_t * vm) -{ - vlib_buffer_trace_trajectory_cb = add_trajectory_trace; - vlib_buffer_trace_trajectory_init_cb = init_trajectory_trace; - return 0; -} - -VLIB_INIT_FUNCTION (trajectory_trace_init); - -#endif - -/* - * fd.io coding-style-patch-verification: ON - * - * Local Variables: - * eval: (c-set-style "gnu") - * End: - */ -- cgit 1.2.3-korg