From 9c8800af3b595e229e1a55aef5a7953ce16cc67f Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Mon, 20 May 2019 20:52:20 +0200 Subject: [PATCH] MINOR: debug: report each thread's cpu usage in "show thread" Now we can report each thread's CPU time, both at wake up (poll) and retrieved while dumping (now), then the difference, which directly indicates how long the thread has been running uninterrupted. A very high value for the diff could indicate a deadlock, especially if it happens between two threads. Note that it may occasionally happen that a wrong value is displayed since nothing guarantees that the date is read atomically. --- src/debug.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/debug.c b/src/debug.c index ecb55f590..ba668781e 100644 --- a/src/debug.c +++ b/src/debug.c @@ -38,6 +38,8 @@ void ha_thread_dump(struct buffer *buf, int thr, int calling_tid) { unsigned long thr_bit = 1UL << thr; + unsigned long long p = thread_info[thr].prev_cpu_time; + unsigned long long n = now_cpu_time_thread(&thread_info[thr]); chunk_appendf(buf, "%c Thread %-2u: act=%d glob=%d wq=%d rq=%d tl=%d tlsz=%d rqsz=%d\n" @@ -61,6 +63,7 @@ void ha_thread_dump(struct buffer *buf, int thr, int calling_tid) #endif chunk_appendf(buf, "\n"); + chunk_appendf(buf, " cpu_ns: poll=%llu now=%llu diff=%llu\n", p, n, n-p); /* this is the end of what we can dump from outside the thread */