diff --git a/mxqd.c b/mxqd.c index 9113484..38a2289 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 8b115a9..82ce6be 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 9055f43..20a29c9 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));