tcp/session: debug improvements/fixes 75/11975/6
authorFlorin Coras <fcoras@cisco.com>
Fri, 20 Apr 2018 17:51:49 +0000 (10:51 -0700)
committerFlorin Coras <fcoras@cisco.com>
Tue, 1 May 2018 06:50:41 +0000 (23:50 -0700)
Change-Id: I906e58b4f9827a79a6ab673f8fa2e03036c69820
Signed-off-by: Florin Coras <fcoras@cisco.com>
src/vnet/session-apps/echo_server.c
src/vnet/session/session.c
src/vnet/session/session.h
src/vnet/session/session_debug.h
src/vnet/tcp/tcp_debug.h
src/vnet/tcp/tcp_input.c

index 85e6c29..f34a490 100644 (file)
@@ -63,7 +63,6 @@ echo_server_session_accept_callback (stream_session_t * s)
     session_manager_get_vpp_event_queue (s->thread_index);
   s->session_state = SESSION_STATE_READY;
   esm->byte_index = 0;
-  vec_validate (esm->rx_retries[s->thread_index], s->session_index);
   esm->rx_retries[s->thread_index][s->session_index] = 0;
   return 0;
 }
@@ -391,7 +390,9 @@ echo_server_create (vlib_main_t * vm, u8 * appns_id, u64 appns_flags,
   vec_validate (echo_server_main.vpp_queue, num_threads - 1);
   vec_validate (esm->rx_buf, num_threads - 1);
   vec_validate (esm->rx_retries, num_threads - 1);
-
+  for (i = 0; i < vec_len (esm->rx_retries); i++)
+    vec_validate (esm->rx_retries[i],
+                 pool_elts (session_manager_main.sessions[i]));
   esm->rcv_buffer_size = clib_max (esm->rcv_buffer_size, esm->fifo_size);
   for (i = 0; i < num_threads; i++)
     vec_validate (esm->rx_buf[i], esm->rcv_buffer_size);
index dfc967b..568065e 100644 (file)
@@ -1293,7 +1293,7 @@ session_manager_main_enable (vlib_main_t * vm)
        clib_rwlock_init (&smm->peekers_rw_locks[i]);
     }
 
-#if SESSION_DBG
+#if SESSION_DEBUG
   vec_validate (smm->last_event_poll_by_thread, num_threads - 1);
 #endif
 
index 9d534ae..b54f461 100644 (file)
@@ -194,7 +194,7 @@ struct _session_manager_main
   /** Preallocate session config parameter */
   u32 preallocated_sessions;
 
-#if SESSION_DBG
+#if SESSION_DEBUG
   /**
    * last event poll time by thread
    * Debug only. Will cause false cache-line sharing as-is
index 12c667c..f63509d 100644 (file)
@@ -44,10 +44,7 @@ typedef enum _session_evt_dbg
   {                                                                    \
     u32 data[_size];                                                   \
   } * ed;                                                              \
-  transport_proto_vft_t *vft =                                                 \
-      transport_protocol_get_vft (_s->session_type);                   \
-  transport_connection_t *_tc =                                        \
-      vft->get_connection (_s->connection_index, _s->thread_index);    \
+  transport_connection_t *_tc = session_get_transport (_s);            \
   ed = ELOG_TRACK_DATA (&vlib_global_main.elog_main,                   \
                        _e, _tc->elog_track)
 
@@ -101,24 +98,23 @@ typedef enum _session_evt_dbg
 #endif /* SESSION_DEQ_NODE_EVTS */
 
 #if SESSION_EVT_POLL_DBG && SESSION_DEBUG > 1
-#define SESSION_EVT_POLL_GAP(_smm, _my_thread_index)                   \
+#define SESSION_EVT_POLL_GAP(_smm, _ti)                                        \
 {                                                                      \
   ELOG_TYPE_DECLARE (_e) =                                             \
   {                                                                    \
-    .format = "nixon-gap: %d MS",                                      \
+    .format = "nixon-gap: %d us",                                      \
     .format_args = "i4",                                               \
   };                                                                   \
   DEC_SESSION_ED(_e, 1);                                               \
   ed->data[0] =        (u32) ((now -                                           \
-    _smm->last_event_poll_by_thread[my_thread_index])*1000.0);         \
+      _smm->last_event_poll_by_thread[_ti])*1000000.0);                        \
 }
-#define SESSION_EVT_POLL_GAP_TRACK_HANDLER(_smm, _my_thread_index)     \
+#define SESSION_EVT_POLL_GAP_TRACK_HANDLER(_smm, _ti)                  \
 {                                                                      \
-  if (PREDICT_TRUE(                                                    \
-             smm->last_event_poll_by_thread[my_thread_index] != 0.0))  \
-    if (now > smm->last_event_poll_by_thread[_my_thread_index] + 500e-6)\
-       SESSION_EVT_POLL_GAP(smm, my_thread_index);                     \
-  _smm->last_event_poll_by_thread[my_thread_index] = now;              \
+  if (PREDICT_TRUE (smm->last_event_poll_by_thread[_ti] != 0.0))       \
+    if (now > smm->last_event_poll_by_thread[_ti] + 500e-6)            \
+      SESSION_EVT_POLL_GAP(smm, _ti);                                  \
+  _smm->last_event_poll_by_thread[_ti] = now;                          \
 }
 
 #else
index d356911..2e67c84 100755 (executable)
@@ -21,7 +21,7 @@
 #define TCP_DEBUG (1)
 #define TCP_DEBUG_SM (0)
 #define TCP_DEBUG_CC (0)
-#define TCP_DEBUG_CC_STAT (1)
+#define TCP_DEBUG_CC_STAT (0)
 #define TCP_DEBUG_BUFFER_ALLOCATION (0)
 
 #define foreach_tcp_dbg_evt            \
@@ -767,6 +767,9 @@ if (_tc->c_cc_stat_tstamp + STATS_INTERVAL < tcp_time_now())                \
   _tc->c_cc_stat_tstamp = tcp_time_now();                              \
 }                                                                      \
 }
+#else
+#define TCP_EVT_CC_STAT_HANDLER(_tc, ...)
+#endif
 
 /*
  * Buffer allocation
@@ -776,22 +779,22 @@ if (_tc->c_cc_stat_tstamp + STATS_INTERVAL < tcp_time_now())              \
 #define TCP_DBG_BUFFER_ALLOC_MAYBE_FAIL(thread_index)                  \
 {                                                                      \
   static u32 *buffer_fail_counters;                                    \
-  if (PREDICT_FALSE (buffer_fail_counters == 0))                               \
+  if (PREDICT_FALSE (buffer_fail_counters == 0))                       \
     {                                                                  \
       u32 num_threads;                                                 \
-      vlib_thread_main_t *vtm = vlib_get_thread_main ();                       \
+      vlib_thread_main_t *vtm = vlib_get_thread_main ();               \
       num_threads = 1 /* main thread */  + vtm->n_threads;             \
       vec_validate (buffer_fail_counters, num_threads - 1);            \
     }                                                                  \
   if (PREDICT_FALSE (tcp_main.buffer_fail_fraction != 0.0))            \
     {                                                                  \
-      if (PREDICT_TRUE (buffer_fail_counters[thread_index] > 0))               \
+      if (PREDICT_TRUE (buffer_fail_counters[thread_index] > 0))       \
         {                                                              \
-          if ((1.0 / (f32) (buffer_fail_counters[thread_index]))               \
+          if ((1.0 / (f32) (buffer_fail_counters[thread_index]))       \
               < tcp_main.buffer_fail_fraction)                         \
             {                                                          \
               buffer_fail_counters[thread_index] = 0.0000001;          \
-              return -1;                                                       \
+              return -1;                                               \
             }                                                          \
         }                                                              \
       buffer_fail_counters[thread_index] ++;                           \
@@ -801,10 +804,6 @@ if (_tc->c_cc_stat_tstamp + STATS_INTERVAL < tcp_time_now())               \
 #define TCP_DBG_BUFFER_ALLOC_MAYBE_FAIL(thread_index)
 #endif
 
-#else
-#define TCP_EVT_CC_STAT_HANDLER(_tc, ...)
-#endif
-
 #endif /* SRC_VNET_TCP_TCP_DEBUG_H_ */
 /*
  * fd.io coding-style-patch-verification: ON
index a1cdc76..497b709 100644 (file)
@@ -2780,9 +2780,8 @@ tcp46_listen_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
          /* 3. check for a SYN (did that already) */
 
          /* Make sure connection wasn't just created */
-         child0 =
-           tcp_lookup_connection (lc0->c_fib_index, b0, my_thread_index,
-                                  is_ip4);
+         child0 = tcp_lookup_connection (lc0->c_fib_index, b0,
+                                         my_thread_index, is_ip4);
          if (PREDICT_FALSE (child0->state != TCP_STATE_LISTEN))
            {
              error0 = TCP_ERROR_CREATE_EXISTS;