From bde72bd2f3bb7e3368f895696cf947f358a74135 Mon Sep 17 00:00:00 2001 From: Christian Prochaska Date: Fri, 23 Aug 2013 19:17:31 +0200 Subject: [PATCH] JDB: show consumed time in thread list Fixes ssumpf/foc#7. --- kernel/fiasco/src/jdb/jdb_thread_list.cpp | 28 ++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/kernel/fiasco/src/jdb/jdb_thread_list.cpp b/kernel/fiasco/src/jdb/jdb_thread_list.cpp index 88e07f1a..c504ef02 100644 --- a/kernel/fiasco/src/jdb/jdb_thread_list.cpp +++ b/kernel/fiasco/src/jdb/jdb_thread_list.cpp @@ -36,7 +36,7 @@ private: friend class _foo; - enum { LIST_UNSORTED, LIST_SORT_PRIO, LIST_SORT_TID, LIST_SORT_SPACE, + enum { LIST_UNSORTED, LIST_SORT_PRIO, LIST_SORT_TID, LIST_SORT_SPACE, LIST_SORT_CONSUMED_TIME, LIST_SORT_END }; }; @@ -71,7 +71,7 @@ const char* Jdb_thread_list::get_mode_str(void) { static const char * const mode_str[] = - { "(unsorted)", "(prio-sorted)", "(tid-sorted)", "(space-sorted)" }; + { "(unsorted)", "(prio-sorted)", "(tid-sorted)", "(space-sorted)", "(cpu time-sorted)" }; return mode_str[_mode]; } @@ -205,6 +205,14 @@ Jdb_thread_list::get_space_dbgid(Thread *t) return Kobject_dbg::pointer_to_id(t->space()); } +// helper function for iter() -- use consumed time as sorting key +static +long +Jdb_thread_list::get_consumed_time(Thread *t) +{ + return t->consumed_time(); +} + // -------------------------------------------------------------------------- IMPLEMENTATION [sched_wfq || sched_fp_wfq]: @@ -472,6 +480,13 @@ Jdb_thread_list::iter(int count, Thread **t_start, // fall through + case LIST_SORT_CONSUMED_TIME: + // list threads sorted by consumed time + if (!get_key) + get_key = get_consumed_time; + + // fall through + case LIST_SORT_TID: // list threads sorted by thread id { @@ -691,6 +706,13 @@ Jdb_thread_list::list_threads_show_thread(Thread *t) printf("%-6s", to); + /* consumed time */ + char time_str[12]; + Jdb::write_ll_ns(t->consumed_time()*1000, time_str, + 11 < sizeof(time_str) ? 11 : sizeof(time_str), false); + printf(" %s ", time_str); + + /* state */ if (long_output) { Jdb_thread::print_state_long(t, 47); @@ -721,7 +743,7 @@ static void Jdb_thread_list::show_header() { Jdb::cursor(); - printf("%s id cpu name pr sp wait to%s state\033[m\033[K", + printf("%s id cpu name pr sp wait to%s cpu time state\033[m\033[K", Jdb::esc_emph, Config::Stack_depth ? " stack" : ""); }