VPP-6: set epoll wait-time to zero when binary API messages are waiting
Change-Id: I629ef98ecd3b729d2564b3a1ba8c6039f854f86c Signed-off-by: Dave Barach <dave@barachs.net>
This commit is contained in:
@ -404,6 +404,7 @@ memclnt_process (vlib_main_t * vm,
|
||||
while (1) {
|
||||
pthread_mutex_lock (&q->mutex);
|
||||
if (q->cursize == 0) {
|
||||
vm->api_queue_nonempty = 0;
|
||||
pthread_mutex_unlock (&q->mutex);
|
||||
|
||||
if (TRACE_VLIB_MEMORY_QUEUE)
|
||||
@ -626,6 +627,7 @@ memclnt_queue_signal (int signum)
|
||||
vlib_main_t * vm = vlib_get_main();
|
||||
|
||||
vm->queue_signal_pending = 1;
|
||||
vm->api_queue_nonempty = 1;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -168,8 +168,9 @@ typedef struct vlib_main_t {
|
||||
vlib_config_function_runtime_t *config_function_registrations;
|
||||
mc_serialize_msg_t *mc_msg_registrations; /* mc_main is a pointer... */
|
||||
|
||||
/* control-plane API queue signal pending */
|
||||
/* control-plane API queue signal pending, length indication */
|
||||
volatile u32 queue_signal_pending;
|
||||
volatile u32 api_queue_nonempty;
|
||||
void (*queue_signal_callback)(struct vlib_main_t *);
|
||||
u8 **argv;
|
||||
} vlib_main_t;
|
||||
|
@ -127,10 +127,12 @@ linux_epoll_input (vlib_main_t * vm,
|
||||
if (nm->input_node_counts_by_state[VLIB_NODE_STATE_POLLING] > 0)
|
||||
timeout_ms = 0;
|
||||
|
||||
if (vector_rate > 1)
|
||||
/*
|
||||
* When busy: don't wait & only epoll for input
|
||||
* every 1024 times through main loop.
|
||||
*/
|
||||
if (vector_rate > 1 || vm->api_queue_nonempty)
|
||||
{
|
||||
/* When busy don't wait & only epoll for input every 8 times
|
||||
through main loop. */
|
||||
timeout_ms = 0;
|
||||
node->input_main_loops_per_call = 1024;
|
||||
}
|
||||
|
Reference in New Issue
Block a user