From bdb8114cd810a4b3a7b2a936cab7cc1de107b347 Mon Sep 17 00:00:00 2001 From: Marius Tolzmann <tolzmann@molgen.mpg.de> Date: Tue, 3 Nov 2015 23:21:03 +0100 Subject: [PATCH] mxqd_control: Track database values for global running slots and jobs --- mxqd.c | 10 ++++++++-- mxqd.h | 9 +++++++++ mxqd_control.c | 28 ++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 2 deletions(-) diff --git a/mxqd.c b/mxqd.c index 91134842..38a22895 100644 --- a/mxqd.c +++ b/mxqd.c @@ -1336,13 +1336,16 @@ void server_dump(struct mxq_server *server) continue; } group = &ulist->groups[0].group; - mx_log_info(" user=%s(%d) slots_running=%lu", + mx_log_info(" user=%s(%d) slots_running=%lu global_slots_running=%lu global_threads_running=%lu", group->user_name, group->user_uid, - ulist->slots_running); + ulist->slots_running, + ulist->global_slots_running, + ulist->global_threads_running); for (glist = ulist->groups; glist; glist = glist->next) { group = &glist->group; + mx_log_info(" group=%s(%d):%lu %s jobs_in_q=%lu", group->user_name, group->user_uid, @@ -1369,6 +1372,9 @@ void server_dump(struct mxq_server *server) server->slots, server->threads_running, server->jobs_running); + mx_log_info("global_slots_running=%lu global_threads_running=%lu", + server->global_slots_running, + server->global_threads_running); cpuset_log("cpu set running", &server->cpu_set_running); mx_log_info("====================== SERVER DUMP END ======================"); diff --git a/mxqd.h b/mxqd.h index 8b115a99..82ce6be8 100644 --- a/mxqd.h +++ b/mxqd.h @@ -39,6 +39,9 @@ struct mxq_group_list { unsigned long slots_running; unsigned long memory_used; + unsigned long global_threads_running; + unsigned long global_slots_running; + short orphaned; }; @@ -54,6 +57,9 @@ struct mxq_user_list { unsigned long threads_running; unsigned long slots_running; unsigned long memory_used; + + unsigned long global_threads_running; + unsigned long global_slots_running; }; struct mxq_server { @@ -69,6 +75,9 @@ struct mxq_server { unsigned long memory_used; cpu_set_t cpu_set_running; + unsigned long global_threads_running; + unsigned long global_slots_running; + unsigned long slots; unsigned long memory_total; long double memory_avg_per_slot; diff --git a/mxqd_control.c b/mxqd_control.c index 9055f434..20a29c95 100644 --- a/mxqd_control.c +++ b/mxqd_control.c @@ -323,6 +323,15 @@ struct mxq_group_list *_user_list_add_group(struct mxq_user_list *ulist, struct ulist->group_cnt++; server->group_cnt++; + glist->global_slots_running = group->group_slots_running; + glist->global_threads_running = group->group_jobs_running * group->job_threads; + + ulist->global_slots_running += glist->global_slots_running; + ulist->global_threads_running += glist->global_threads_running; + + server->global_slots_running += glist->global_slots_running; + server->global_threads_running += glist->global_threads_running; + _group_list_init(glist); return glist; @@ -354,15 +363,34 @@ struct mxq_group_list *_server_add_group(struct mxq_server *server, struct mxq_g static struct mxq_group_list *_user_list_update_group(struct mxq_user_list *ulist, struct mxq_group *group) { struct mxq_group_list *glist; + struct mxq_server *server; assert(ulist); assert(group); + assert(ulist->server); + + server = ulist->server; glist = _group_list_find_by_group(ulist->groups, group); if (!glist) { return _user_list_add_group(ulist, group); } + server->global_slots_running -= glist->global_slots_running; + server->global_threads_running -= glist->global_threads_running; + + ulist->global_slots_running -= glist->global_slots_running; + ulist->global_threads_running -= glist->global_threads_running; + + glist->global_slots_running = group->group_slots_running; + glist->global_threads_running = group->group_jobs_running * group->job_threads; + + ulist->global_slots_running += glist->global_slots_running; + ulist->global_threads_running += glist->global_threads_running; + + server->global_slots_running += glist->global_slots_running; + server->global_threads_running += glist->global_threads_running; + mxq_group_free_content(&glist->group); memcpy(&glist->group, group, sizeof(*group));