tcp/session: tx optimizations
[vpp.git] / src / vnet / session / session_node.c
index d6fcd91..4fd8d0e 100644 (file)
@@ -78,11 +78,11 @@ session_tx_trace_frame (vlib_main_t * vm, vlib_node_runtime_t * node,
     {
       b = vlib_get_buffer (vm, to_next[i - n_segs]);
       vlib_trace_buffer (vm, node, next_index, b, 1 /* follow_chain */ );
-      vlib_set_trace_count (vm, node, --n_trace);
       t = vlib_add_trace (vm, node, b, sizeof (*t));
       t->session_index = s->session_index;
       t->server_thread_index = s->thread_index;
     }
+  vlib_set_trace_count (vm, node, n_trace - i);
 }
 
 always_inline void
@@ -190,7 +190,6 @@ session_tx_fill_buffer (vlib_main_t * vm, session_tx_context_t * ctx,
   b->error = 0;
   b->flags = VNET_BUFFER_F_LOCALLY_ORIGINATED;
   b->current_data = 0;
-  b->total_length_not_including_first_buffer = 0;
 
   data0 = vlib_buffer_make_headroom (b, MAX_HDRS_LEN);
   len_to_deq = clib_min (ctx->left_to_snd, ctx->deq_per_first_buf);
@@ -249,11 +248,11 @@ session_tx_fill_buffer (vlib_main_t * vm, session_tx_context_t * ctx,
     session_tx_fifo_chain_tail (vm, ctx, b, n_bufs, peek_data);
 
   /* *INDENT-OFF* */
-  SESSION_EVT_DBG(SESSION_EVT_DEQ, s, ({
-       ed->data[0] = e->event_type;
-       ed->data[1] = max_dequeue;
+  SESSION_EVT_DBG(SESSION_EVT_DEQ, ctx->s, ({
+       ed->data[0] = FIFO_EVENT_APP_TX;
+       ed->data[1] = ctx->max_dequeue;
        ed->data[2] = len_to_deq;
-       ed->data[3] = left_to_snd;
+       ed->data[3] = ctx->left_to_snd;
   }));
   /* *INDENT-ON* */
 }
@@ -799,7 +798,8 @@ skip_dequeue:
            }
          break;
        case FIFO_EVENT_DISCONNECT:
-         /* Make sure stream disconnects run after the pending list is drained */
+         /* Make sure stream disconnects run after the pending list is
+          * drained */
          s0 = session_get_from_handle (e0->session_handle);
          if (!e0->postponed)
            {
@@ -807,11 +807,9 @@ skip_dequeue:
              vec_add1 (smm->pending_disconnects[thread_index], *e0);
              continue;
            }
-         /* If tx queue is still not empty, wait a bit */
-         if (svm_fifo_max_dequeue (s0->server_tx_fifo)
-             && e0->postponed < 200)
+         /* If tx queue is still not empty, wait */
+         if (svm_fifo_max_dequeue (s0->server_tx_fifo))
            {
-             e0->postponed += 1;
              vec_add1 (smm->pending_disconnects[thread_index], *e0);
              continue;
            }
@@ -842,7 +840,7 @@ skip_dequeue:
   vlib_node_increment_counter (vm, session_queue_node.index,
                               SESSION_QUEUE_ERROR_TX, n_tx_packets);
 
-  SESSION_EVT_DBG (SESSION_EVT_DEQ_NODE, 1);
+  SESSION_EVT_DBG (SESSION_EVT_DISPATCH_END, smm, thread_index);
 
   return n_tx_packets;
 }