From: Willy Tarreau Date: Sat, 28 Mar 2009 16:54:35 +0000 (+0100) Subject: [MINOR] show sess: report number of calls to each task X-Git-Tag: v1.3.17~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3884cbaae6947c6d54e90dc095dfbca3e77da55c;p=thirdparty%2Fhaproxy.git [MINOR] show sess: report number of calls to each task For debugging purposes, it can be useful to know how many times each task has been called. --- diff --git a/include/proto/task.h b/include/proto/task.h index 19aab61679..62f83e3f54 100644 --- a/include/proto/task.h +++ b/include/proto/task.h @@ -173,6 +173,7 @@ static inline struct task *task_init(struct task *t) t->rq.node.leaf_p = NULL; t->state = TASK_SLEEPING; t->nice = 0; + t->calls = 0; return t; } diff --git a/include/types/task.h b/include/types/task.h index 13e2aacd1f..641cb17cd9 100644 --- a/include/types/task.h +++ b/include/types/task.h @@ -50,6 +50,7 @@ struct task { struct eb32_node rq; /* ebtree node used to hold the task in the run queue */ int state; /* task state : bit field of TASK_* */ int expire; /* next expiration date for this task, in ticks */ + unsigned int calls; /* number of times ->process() was called */ struct task * (*process)(struct task *t); /* the function which processes the task */ void *context; /* the task's context */ int nice; /* the task's current nice value from -1024 to +1024 */ diff --git a/src/dumpstats.c b/src/dumpstats.c index fd38f95ddf..2178f7949f 100644 --- a/src/dumpstats.c +++ b/src/dumpstats.c @@ -1209,10 +1209,11 @@ void stats_dump_sess_to_buffer(struct session *s, struct buffer *rep) } chunk_printf(&msg, sizeof(trash), - " si=(%d,%d) as=%d ts=%02x age=%s", + " si=(%d,%d) as=%d ts=%02x age=%s calls=%d", curr_sess->si[0].state, curr_sess->si[1].state, curr_sess->ana_state, curr_sess->task->state, - human_time(now.tv_sec - curr_sess->logs.tv_accept.tv_sec, 1)); + human_time(now.tv_sec - curr_sess->logs.tv_accept.tv_sec, 1), + curr_sess->task->calls); if (task_in_rq(curr_sess->task)) chunk_printf(&msg, sizeof(trash), " run(nice=%d)\n", curr_sess->task->nice); diff --git a/src/task.c b/src/task.c index 95a00faed2..5336c20e9d 100644 --- a/src/task.c +++ b/src/task.c @@ -219,6 +219,7 @@ void process_runnable_tasks(int *next) /* This is an optimisation to help the processor's branch * predictor take this most common call. */ + t->calls++; if (likely(t->process == process_session)) t = process_session(t); else