From cb6589da1fb0f7263723cb4d7e36df830161798c Mon Sep 17 00:00:00 2001 From: Danny Auble <da@schedmd.com> Date: Fri, 24 May 2013 10:35:23 -0700 Subject: [PATCH] Handle timers differently to give us the delta_t without having to call and extra function --- src/common/timers.c | 27 ++++++--------------------- src/common/timers.h | 21 +++++++-------------- src/slurmctld/job_scheduler.c | 13 ++++++------- 3 files changed, 19 insertions(+), 42 deletions(-) diff --git a/src/common/timers.c b/src/common/timers.c index e8967cc3b80..04be43ff606 100644 --- a/src/common/timers.c +++ b/src/common/timers.c @@ -49,21 +49,20 @@ * IN len_tv_str - size of tv_str in bytes * IN from - where the function was called form */ -extern void slurm_diff_tv_str(struct timeval *tv1,struct timeval *tv2, +extern void slurm_diff_tv_str(struct timeval *tv1, struct timeval *tv2, char *tv_str, int len_tv_str, char *from, - long limit) + long limit, long *delta_t) { char p[64] = ""; struct tm tm; - long delta_t; - delta_t = (tv2->tv_sec - tv1->tv_sec) * 1000000; - delta_t += tv2->tv_usec - tv1->tv_usec; + (*delta_t) = (tv2->tv_sec - tv1->tv_sec) * 1000000; + (*delta_t) += tv2->tv_usec - tv1->tv_usec; + snprintf(tv_str, len_tv_str, "usec=%ld", *delta_t); if (from) { if (!limit) limit = 1000000; - if (delta_t > limit) { - snprintf(tv_str, len_tv_str, "usec=%ld", delta_t); + if (*delta_t > limit) { if (!localtime_r(&tv2->tv_sec, &tm)) fprintf(stderr, "localtime_r() failed\n"); if (strftime(p, sizeof(p), "%T", &tm) == 0) @@ -74,17 +73,3 @@ extern void slurm_diff_tv_str(struct timeval *tv1,struct timeval *tv2, } } } - -/* - * slurm_diff_tv - return the difference between two times - * IN tv1 - start of event - * IN tv2 - end of event - * RET time in micro-seconds - */ -extern long slurm_diff_tv(struct timeval *tv1, struct timeval *tv2) -{ - long delta_t; - delta_t = (tv2->tv_sec - tv1->tv_sec) * 1000000; - delta_t += tv2->tv_usec - tv1->tv_usec; - return delta_t; -} diff --git a/src/common/timers.h b/src/common/timers.h index 3131defc453..e165830e134 100644 --- a/src/common/timers.h +++ b/src/common/timers.h @@ -41,15 +41,15 @@ #include <sys/time.h> -#define DEF_TIMERS struct timeval tv1, tv2; char tv_str[20] = "" +#define DEF_TIMERS struct timeval tv1, tv2; char tv_str[20] = ""; long delta_t; #define START_TIMER gettimeofday(&tv1, NULL) #define END_TIMER gettimeofday(&tv2, NULL); \ - slurm_diff_tv_str(&tv1, &tv2, tv_str, 20, NULL, 0) + slurm_diff_tv_str(&tv1, &tv2, tv_str, 20, NULL, 0, &delta_t) #define END_TIMER2(from) gettimeofday(&tv2, NULL); \ - slurm_diff_tv_str(&tv1, &tv2, tv_str, 20, from, 0) + slurm_diff_tv_str(&tv1, &tv2, tv_str, 20, from, 0, &delta_t) #define END_TIMER3(from, limit) gettimeofday(&tv2, NULL); \ - slurm_diff_tv_str(&tv1, &tv2, tv_str, 20, from, limit) -#define DELTA_TIMER slurm_diff_tv(&tv1, &tv2) + slurm_diff_tv_str(&tv1, &tv2, tv_str, 20, from, limit, &delta_t) +#define DELTA_TIMER delta_t #define TIME_STR tv_str /* @@ -61,17 +61,10 @@ * IN len_tv_str - size of tv_str in bytes * IN from - Name to be printed on long diffs * IN limit - limit to wait + * OUT delta_t - raw time difference in usec */ extern void slurm_diff_tv_str(struct timeval *tv1,struct timeval *tv2, char *tv_str, int len_tv_str, char *from, - long limit); - -/* - * slurm_diff_tv - return the difference between two times - * IN tv1 - start of event - * IN tv2 - end of event - * RET time in micro-seconds - */ -extern long slurm_diff_tv(struct timeval *tv1, struct timeval *tv2); + long limit, long *delta_t); #endif diff --git a/src/slurmctld/job_scheduler.c b/src/slurmctld/job_scheduler.c index 36e3d050817..6c682fdce8f 100644 --- a/src/slurmctld/job_scheduler.c +++ b/src/slurmctld/job_scheduler.c @@ -401,14 +401,13 @@ static bool _failed_partition(struct part_record *part_ptr, return false; } -static void do_diag_stats(struct timeval tv1, struct timeval tv2) +static void _do_diag_stats(long delta_t) { - if (slurm_diff_tv(&tv1,&tv2) > slurmctld_diag_stats.schedule_cycle_max) - slurmctld_diag_stats.schedule_cycle_max = slurm_diff_tv(&tv1, - &tv2); + if (delta_t > slurmctld_diag_stats.schedule_cycle_max) + slurmctld_diag_stats.schedule_cycle_max = delta_t; - slurmctld_diag_stats.schedule_cycle_sum += slurm_diff_tv(&tv1, &tv2); - slurmctld_diag_stats.schedule_cycle_last = slurm_diff_tv(&tv1, &tv2); + slurmctld_diag_stats.schedule_cycle_sum += delta_t; + slurmctld_diag_stats.schedule_cycle_last = delta_t; slurmctld_diag_stats.schedule_cycle_counter++; } @@ -1080,7 +1079,7 @@ next_part: part_ptr = (struct part_record *) unlock_slurmctld(job_write_lock); END_TIMER2("schedule"); - do_diag_stats(tv1, tv2); + _do_diag_stats(DELTA_TIMER); return job_cnt; } -- GitLab