From 94bebf38bb3c76b8971ff2ce3ecf49a96045e050 Mon Sep 17 00:00:00 2001 From: Danny Auble <da@schedmd.com> Date: Thu, 25 Oct 2012 16:43:41 -0700 Subject: [PATCH] Accounting - if jobacct_gather/none is used don't start polling thread and alloc and such jobacctinfo. --- src/common/slurm_jobacct_gather.c | 56 +++++++++++++++++++++++++------ 1 file changed, 46 insertions(+), 10 deletions(-) diff --git a/src/common/slurm_jobacct_gather.c b/src/common/slurm_jobacct_gather.c index 88e0e33a81a..d5b1c4ef405 100644 --- a/src/common/slurm_jobacct_gather.c +++ b/src/common/slurm_jobacct_gather.c @@ -106,6 +106,7 @@ static pthread_mutex_t task_list_lock = PTHREAD_MUTEX_INITIALIZER; static bool jobacct_shutdown = true; static bool jobacct_suspended = 0; +static bool plugin_polling = true; static uint32_t jobacct_job_id = 0; static uint32_t jobacct_step_id = 0; @@ -226,8 +227,10 @@ extern int jobacct_gather_init(void) goto done; } - if (!strcasecmp(type, "jobacct_gather/none")) + if (!strcasecmp(type, "jobacct_gather/none")) { + plugin_polling = false; goto done; + } plugin_type = type; type = slurm_get_proctrack_type(); @@ -277,6 +280,9 @@ extern int jobacct_gather_startpoll(uint16_t frequency) pthread_attr_t attr; pthread_t _watch_tasks_thread_id; + if (!plugin_polling) + return SLURM_SUCCESS; + if (jobacct_gather_init() < 0) return SLURM_ERROR; @@ -291,7 +297,7 @@ extern int jobacct_gather_startpoll(uint16_t frequency) task_list = list_create(jobacctinfo_destroy); if (frequency == 0) { /* don't want dynamic monitoring? */ - debug2("jobacct AIX dynamic logging disabled"); + debug2("jobacct_gather dynamic logging disabled"); return retval; } @@ -302,11 +308,11 @@ extern int jobacct_gather_startpoll(uint16_t frequency) if (pthread_create(&_watch_tasks_thread_id, &attr, &_watch_tasks, NULL)) { - debug("jobacct-gather failed to create _watch_tasks " + debug("jobacct_gather failed to create _watch_tasks " "thread: %m"); frequency = 0; } else - debug3("jobacct-gather AIX dynamic logging enabled"); + debug3("jobacct_gather dynamic logging enabled"); slurm_attr_destroy(&attr); return retval; @@ -336,7 +342,7 @@ extern void jobacct_gather_change_poll(uint16_t frequency) if (jobacct_gather_init() < 0) return; - if (freq == 0 && frequency != 0) { + if (plugin_polling && freq == 0 && frequency != 0) { pthread_attr_t attr; pthread_t _watch_tasks_thread_id; /* create polling thread */ @@ -381,6 +387,9 @@ extern int jobacct_gather_add_task(pid_t pid, jobacct_id_t *jobacct_id) if (jobacct_gather_init() < 0) return SLURM_ERROR; + if (!plugin_polling) + return SLURM_SUCCESS; + if (jobacct_shutdown) return SLURM_ERROR; @@ -413,7 +422,7 @@ error: extern jobacctinfo_t *jobacct_gather_stat_task(pid_t pid) { - if (jobacct_shutdown) + if (!plugin_polling || jobacct_shutdown) return NULL; else if (pid) { struct jobacctinfo *jobacct = NULL; @@ -460,7 +469,7 @@ extern jobacctinfo_t *jobacct_gather_remove_task(pid_t pid) struct jobacctinfo *jobacct = NULL; ListIterator itr = NULL; - if (jobacct_shutdown) + if (!plugin_polling || jobacct_shutdown) return NULL; slurm_mutex_lock(&task_list_lock); @@ -490,7 +499,7 @@ error: extern int jobacct_gather_set_proctrack_container_id(uint64_t id) { - if (pgid_plugin) + if (!plugin_polling || pgid_plugin) return SLURM_SUCCESS; if (cont_id != (uint64_t)NO_VAL) @@ -511,6 +520,9 @@ extern int jobacct_gather_set_proctrack_container_id(uint64_t id) extern int jobacct_gather_set_mem_limit(uint32_t job_id, uint32_t step_id, uint32_t mem_limit) { + if (!plugin_polling) + return SLURM_SUCCESS; + if ((job_id == 0) || (mem_limit == 0)) { error("jobacct_gather_set_mem_limit: jobid:%u mem_limit:%u", job_id, mem_limit); @@ -528,6 +540,9 @@ extern int jobacct_gather_set_mem_limit(uint32_t job_id, uint32_t step_id, extern void jobacct_gather_handle_mem_limit( uint32_t total_job_mem, uint32_t total_job_vsize) { + if (!plugin_polling) + return; + if (jobacct_mem_limit) { if (jobacct_step_id == NO_VAL) { debug("Job %u memory used:%u limit:%u KB", @@ -568,7 +583,12 @@ extern void jobacct_gather_handle_mem_limit( extern jobacctinfo_t *jobacctinfo_create(jobacct_id_t *jobacct_id) { - struct jobacctinfo *jobacct = xmalloc(sizeof(struct jobacctinfo)); + struct jobacctinfo *jobacct; + + if (!plugin_polling) + return NULL; + + jobacct = xmalloc(sizeof(struct jobacctinfo)); if (!jobacct_id) { jobacct_id_t temp_id; @@ -614,6 +634,9 @@ extern int jobacctinfo_setinfo(jobacctinfo_t *jobacct, jobacct_id_t *jobacct_id = (jobacct_id_t *) data; struct jobacctinfo *send = (struct jobacctinfo *) data; + if (!plugin_polling) + return SLURM_SUCCESS; + switch (type) { case JOBACCT_DATA_TOTAL: memcpy(jobacct, send, sizeof(struct jobacctinfo)); @@ -682,6 +705,9 @@ extern int jobacctinfo_getinfo( struct rusage *rusage = (struct rusage *)data; struct jobacctinfo *send = (struct jobacctinfo *) data; + if (!plugin_polling) + return SLURM_SUCCESS; + switch (type) { case JOBACCT_DATA_TOTAL: memcpy(send, jobacct, sizeof(struct jobacctinfo)); @@ -746,6 +772,9 @@ extern void jobacctinfo_pack(jobacctinfo_t *jobacct, { int i = 0; + if (!plugin_polling && (protocol_type != PROTOCOL_TYPE_DBD)) + return; + /* The function can take calls from both DBD and from regular * SLURM functions. We choose to standardize on using the * SLURM_PROTOCOL_VERSION here so if PROTOCOL_TYPE_DBD comes @@ -759,7 +788,8 @@ extern void jobacctinfo_pack(jobacctinfo_t *jobacct, if (protocol_type == PROTOCOL_TYPE_DBD) rpc_version = slurmdbd_translate_rpc(rpc_version); - if (!jobacct) { + /* pack an empty record */ + if (!jobacct || (jobacct->min_cpu == NO_VAL)) { for (i = 0; i < 12; i++) pack32((uint32_t)NO_VAL, buffer); for (i = 0; i < 4; i++) @@ -792,6 +822,9 @@ extern int jobacctinfo_unpack(jobacctinfo_t **jobacct, { uint32_t uint32_tmp; + if (!plugin_polling && (protocol_type != PROTOCOL_TYPE_DBD)) + return SLURM_SUCCESS; + /* The function can take calls from both DBD and from regular * SLURM functions. We choose to standardize on using the * SLURM_PROTOCOL_VERSION here so if PROTOCOL_TYPE_DBD comes @@ -847,6 +880,9 @@ unpack_error: extern void jobacctinfo_aggregate(jobacctinfo_t *dest, jobacctinfo_t *from) { + if (!plugin_polling) + return; + xassert(dest); if (!from || (from->min_cpu == (uint32_t)NO_VAL)) -- GitLab