From d6894568709b59625f03e92595e0686b05f2167a Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Wed, 28 Oct 2020 00:37:15 -0700 Subject: vcl session: minimize ct io events Type: improvement Signed-off-by: Florin Coras Change-Id: Ic4072fbc182fff38a28b415be0bb16f0559a4064 --- src/vnet/session/application_local.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'src/vnet/session') diff --git a/src/vnet/session/application_local.c b/src/vnet/session/application_local.c index 58d3789cfee..9de987d7c31 100644 --- a/src/vnet/session/application_local.c +++ b/src/vnet/session/application_local.c @@ -518,10 +518,16 @@ ct_custom_tx (void *session, transport_send_params_t * sp) session_t *s = (session_t *) session; if (session_has_transport (s)) return 0; - /* As all other sessions, cut-throughs are scheduled by vpp for tx so let - * the scheduler's custom tx logic decide when to deschedule, i.e., after - * fifo is emptied. */ - return ct_session_tx (s); + /* If event enqueued towards peer, remove from scheduler and + * remove session tx flag, i.e., accept new tx events */ + if (!ct_session_tx (s)) + { + sp->flags = TRANSPORT_SND_F_DESCHED; + svm_fifo_unset_event (s->tx_fifo); + } + /* The scheduler uses packet count as a means of upper bounding the amount + * of work done per dispatch. So make it look like we have sent something */ + return 1; } static int @@ -632,10 +638,7 @@ ct_session_tx (session_t * s) peer_s = session_get (peer_ct->c_s_index, peer_ct->c_thread_index); if (peer_s->session_state >= SESSION_STATE_TRANSPORT_CLOSING) return 0; - session_enqueue_notify (peer_s); - /* The scheduler uses packet count as a means of upper bounding the amount - * of work done per dispatch. So make it look like we have sent something */ - return 1; + return session_enqueue_notify (peer_s); } static clib_error_t * -- cgit 1.2.3-korg