session: delegate fifo ooo lookup init to transports 12/29812/3
authorFlorin Coras <fcoras@cisco.com>
Sat, 7 Nov 2020 00:59:08 +0000 (16:59 -0800)
committerDave Barach <openvpp@barachs.net>
Mon, 9 Nov 2020 16:04:47 +0000 (16:04 +0000)
Fifo chunk ooo lookup data structures are private (not allocated on
segment heap) and should only be initialized by transport protocols that
require out-of-order enqueues/dequeues (like tcp).

Type: improvement

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: Iaa15d6850385bf903cc501c54c2752e8e811449e

src/svm/fifo_segment.c
src/vnet/session/application_local.c
src/vnet/session/transport.c
src/vnet/session/transport.h
src/vnet/tcp/tcp_input.c

index 8503819..a5ffd4a 100644 (file)
@@ -865,12 +865,6 @@ fifo_segment_alloc_fifo_w_slice (fifo_segment_t * fs, u32 slice_index,
     {
       fss_fifo_add_active_list (fss, f);
       f->flags |= SVM_FIFO_F_LL_TRACKED;
-
-      svm_fifo_init_ooo_lookup (f, 0 /* ooo enq */ );
-    }
-  else
-    {
-      svm_fifo_init_ooo_lookup (f, 1 /* ooo deq */ );
     }
 
   fsh_active_fifos_update (fsh, 1);
index 9b0136f..6e0aee2 100644 (file)
@@ -217,10 +217,6 @@ ct_init_accepted_session (app_worker_t * server_wrk,
   ls->rx_fifo->segment_index = seg_index;
   ls->tx_fifo->segment_index = seg_index;
 
-  /* Disable ooo lookups on the cut-through fifos. TODO remove once init of
-   * chunk lookup rbtrees is delegated to transports */
-  svm_fifo_free_chunk_lookup (ls->tx_fifo);
-
   segment_handle = segment_manager_segment_handle (sm, seg);
   if ((rv = app_worker_add_segment_notify (server_wrk, segment_handle)))
     {
index 8e5df3f..967ff5d 100644 (file)
@@ -769,6 +769,14 @@ transport_connection_reschedule (transport_connection_t * tc)
     }
 }
 
+void
+transport_fifos_init_ooo (transport_connection_t * tc)
+{
+  session_t *s = session_get (tc->s_index, tc->thread_index);
+  svm_fifo_init_ooo_lookup (s->rx_fifo, 0 /* ooo enq */ );
+  svm_fifo_init_ooo_lookup (s->tx_fifo, 1 /* ooo deq */ );
+}
+
 void
 transport_update_time (clib_time_type_t time_now, u8 thread_index)
 {
index 9c873b1..c8d4e27 100644 (file)
@@ -217,6 +217,7 @@ transport_connection_is_cless (transport_connection_t * tc)
 }
 
 void transport_connection_reschedule (transport_connection_t * tc);
+void transport_fifos_init_ooo (transport_connection_t * tc);
 
 /**
  * Register transport virtual function table.
index 305e2d3..0f7006a 100644 (file)
@@ -1967,6 +1967,7 @@ tcp46_syn_sent_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
              goto cleanup_ho;
            }
 
+         transport_fifos_init_ooo (&new_tc0->connection);
          new_tc0->tx_fifo_size =
            transport_tx_fifo_size (&new_tc0->connection);
          /* Update rtt with the syn-ack sample */
@@ -1990,6 +1991,7 @@ tcp46_syn_sent_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
              goto cleanup_ho;
            }
 
+         transport_fifos_init_ooo (&new_tc0->connection);
          new_tc0->tx_fifo_size =
            transport_tx_fifo_size (&new_tc0->connection);
          new_tc0->rtt_ts = 0;
@@ -2646,6 +2648,7 @@ tcp46_listen_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
          goto done;
        }
 
+      transport_fifos_init_ooo (&child->connection);
       child->tx_fifo_size = transport_tx_fifo_size (&child->connection);
 
       tcp_send_synack (child);