sr: SRv6 Path Tracing midpoint processing performance improvement

Moved the kernel call for the timestamp outside of the inner loop to improve the batch proccessing, and minimizing the kernel calls.

Type: improvement

Change-Id: I0245c223fc8a178724bb8c5df2b98083be046c26
Signed-off-by: Julian Klaiber <julian@klaiber.me>
This commit is contained in:
Julian Klaiber
2023-08-14 11:39:13 +00:00
committed by Dave Wallace
parent a3808ee5b2
commit e3ce81e56a

View File

@ -108,6 +108,10 @@ VLIB_NODE_FN (sr_pt_node)
u32 n_left_to_next;
vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next);
// Getting the timestamp (one for each batch of packets)
timestamp_64_t t64 = {};
unix_time_now_nsec_fraction (&t64.sec, &t64.nsec);
// Single loop for potentially the last three packets
while (n_left_from > 0 && n_left_to_next > 0)
{
@ -123,7 +127,6 @@ VLIB_NODE_FN (sr_pt_node)
to_next += 1;
n_left_from -= 1;
n_left_to_next -= 1;
timestamp_64_t t64 = {};
b0 = vlib_get_buffer (vm, bi0);
iface = vnet_buffer (b0)->sw_if_index[VLIB_TX];
@ -132,7 +135,6 @@ VLIB_NODE_FN (sr_pt_node)
{
en0 = vlib_buffer_get_current (b0);
ip0 = (void *) (en0 + 1);
unix_time_now_nsec_fraction (&t64.sec, &t64.nsec);
pt_midpoint_processing (vm, node, b0, ip0, ls, t64);
pt_behavior = PT_BEHAVIOR_MID;
}