MINOR: activity: add per-thread statistics on FD takeover

The FD takeover operation might have certain impacts explaining
unexpected activities, so it's important to report such a counter
there. We thus count the number of times a thread has stolen an
FD from another thread.
This commit is contained in:
Willy Tarreau 2020-06-29 14:17:59 +02:00
parent 3bb617cfe0
commit b159132ea3
3 changed files with 3 additions and 1 deletions

View File

@ -52,7 +52,7 @@ struct activity {
unsigned int empty_rq; // calls to process_runnable_tasks() with nothing for the thread
unsigned int long_rq; // process_runnable_tasks() left with tasks in the run queue
unsigned int cpust_total; // sum of half-ms stolen per thread
/* one unused entry left before end of first cache line */
unsigned int fd_takeover; // number of times this thread stole another one's FD
ALWAYS_ALIGN(64);
struct freq_ctr cpust_1s; // avg amount of half-ms stolen over last second

View File

@ -1103,6 +1103,7 @@ static struct connection *conn_backend_get(struct server *srv, int is_safe)
mt_list_for_each_entry_safe(conn, &mt_list[i], list, elt1, elt2) {
if (conn->mux->takeover && conn->mux->takeover(conn) == 0) {
MT_LIST_DEL_SAFE(elt1);
_HA_ATOMIC_ADD(&activity[tid].fd_takeover, 1);
found = 1;
break;
}

View File

@ -1174,6 +1174,7 @@ static int cli_io_handler_show_activity(struct appctx *appctx)
chunk_appendf(&trash, "accq_full:"); SHOW_TOT(thr, activity[thr].accq_full);
#ifdef USE_THREAD
chunk_appendf(&trash, "accq_ring:"); SHOW_TOT(thr, (accept_queue_rings[thr].tail - accept_queue_rings[thr].head + ACCEPT_QUEUE_SIZE) % ACCEPT_QUEUE_SIZE);
chunk_appendf(&trash, "fd_takeover:"); SHOW_TOT(thr, activity[thr].fd_takeover);
#endif
#if defined(DEBUG_DEV)