sched: Add debug mode.
authorAndre Noll <maan@systemlinux.org>
Wed, 16 Jun 2010 20:39:57 +0000 (22:39 +0200)
committerAndre Noll <maan@systemlinux.org>
Wed, 16 Jun 2010 20:43:25 +0000 (22:43 +0200)
This adds the compile-time switch SCHED_DEBUG to activate debug
mode for the scheduler. If activated, it measures the time spent in
each post_select() function and prints warning messages if this time
interval is too large.

This patch has no effect if SCHED_DEBUG is not set.

sched.c

diff --git a/sched.c b/sched.c
index 62d45d5..f703890 100644 (file)
--- a/sched.c
+++ b/sched.c
@@ -17,6 +17,7 @@
 #include "list.h"
 #include "sched.h"
 #include "string.h"
+#include "time.h"
 #include "error.h"
 
 static struct list_head pre_select_list, post_select_list;
@@ -68,13 +69,33 @@ static void sched_preselect(struct sched *s)
        }
 }
 
+#define SCHED_DEBUG 0
+static inline void call_post_select(struct sched *s, struct task *t)
+{
+#ifndef SCHED_DEBUG
+       t->post_select(s, t);
+#else
+       struct timeval t1, t2, diff;
+       unsigned long pst;
+
+       gettimeofday(&t1, NULL);
+       t->post_select(s, t);
+       gettimeofday(&t2, NULL);
+       tv_diff(&t1, &t2, &diff);
+       pst = tv2ms(&diff);
+       if (pst > 50)
+               PARA_WARNING_LOG("%s: post_select time: %lums\n",
+                       t->status, pst);
+#endif
+}
+
 static void sched_post_select(struct sched *s)
 {
        struct task *t, *tmp;
 
        list_for_each_entry_safe(t, tmp, &post_select_list, post_select_node) {
                if (t->error >= 0)
-                       t->post_select(s, t);
+                       call_post_select(s, t);
 //             PARA_INFO_LOG("%s: %d\n", t->status, t->ret);
                if (t->error >= 0)
                        continue;