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.
diff --git a/include/haproxy/activity-t.h b/include/haproxy/activity-t.h
index 6fc5844..5301cee 100644
--- a/include/haproxy/activity-t.h
+++ b/include/haproxy/activity-t.h
@@ -52,7 +52,7 @@
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
diff --git a/src/backend.c b/src/backend.c
index 51d954b..7048787 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -1103,6 +1103,7 @@
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;
}
diff --git a/src/cli.c b/src/cli.c
index 3438fff..c1964df 100644
--- a/src/cli.c
+++ b/src/cli.c
@@ -1174,6 +1174,7 @@
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)