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.
This commit is contained in:
Willy Tarreau 2019-05-20 20:52:20 +02:00
parent 219b829b62
commit 9c8800af3b

View File

@ -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 */