sr: SRv6 Path Tracing midpoint processing performance improvement 67/39367/2
authorJulian Klaiber <julian@klaiber.me>
Mon, 14 Aug 2023 11:39:13 +0000 (11:39 +0000)
committerDave Wallace <dwallacelf@gmail.com>
Mon, 21 Aug 2023 13:03:07 +0000 (13:03 +0000)
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>
src/vnet/srv6/sr_pt_node.c

index 338ec49..fa8b1f6 100644 (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;
            }