diff options
author | Thomas White <taw@physics.org> | 2015-07-13 14:12:19 +0200 |
---|---|---|
committer | Thomas White <taw@physics.org> | 2015-07-13 16:00:46 +0200 |
commit | fc2a630ffa41f34454911c3a91c253b82475212c (patch) | |
tree | 21dac18458196005c5c49beef1f4205d3b99a585 /src | |
parent | 59b0708b8b89e921ee6914e072ff71eb121d7c41 (diff) |
Slow down the status updates
Diffstat (limited to 'src')
-rw-r--r-- | src/im-sandbox.c | 72 | ||||
-rw-r--r-- | src/indexamajig.c | 6 |
2 files changed, 35 insertions, 43 deletions
diff --git a/src/im-sandbox.c b/src/im-sandbox.c index 5e9c4838..1264c46a 100644 --- a/src/im-sandbox.c +++ b/src/im-sandbox.c @@ -68,8 +68,6 @@ struct sandbox { int n_processed_last_stats; - int n_hadcrystals_last_stats; - int n_crystals_last_stats; int t_last_stats; struct index_args *iargs; @@ -749,6 +747,35 @@ static void check_signals(struct sandbox *sb, const char *semname_q, } +static void try_status(struct sandbox *sb, time_t tNow) +{ + int r; + int n_proc_this; + double indexable; + + r = pthread_mutex_trylock(&sb->shared->term_lock); + if ( r ) return; /* No lock -> don't bother */ + + n_proc_this = sb->shared->n_processed + - sb->n_processed_last_stats; + indexable = (sb->shared->n_processed == 0) ? 0 : + 100.0 * sb->shared->n_hadcrystals + / sb->shared->n_processed; + + STATUS("%4i indexable out of %4i processed (%4.1f%%), " + "%4i crystals so far. " + "%4i images processed since the last message.\n", + sb->shared->n_hadcrystals, + sb->shared->n_processed, indexable, + sb->shared->n_crystals, n_proc_this); + + sb->n_processed_last_stats = sb->shared->n_processed; + sb->t_last_stats = tNow; + + pthread_mutex_unlock(&sb->shared->term_lock); +} + + void create_sandbox(struct index_args *iargs, int n_proc, char *prefix, int config_basename, FILE *fh, Stream *stream, const char *tempdir) @@ -775,8 +802,6 @@ void create_sandbox(struct index_args *iargs, int n_proc, char *prefix, } sb->n_processed_last_stats = 0; - sb->n_hadcrystals_last_stats = 0; - sb->n_crystals_last_stats = 0; sb->t_last_stats = get_monotonic_seconds(); sb->n_proc = n_proc; sb->iargs = iargs; @@ -885,51 +910,24 @@ void create_sandbox(struct index_args *iargs, int n_proc, char *prefix, do { - int r; - double tNow; + time_t tNow; + /* Check for stream output from workers */ try_read(sb); + + /* Check for interrupt or zombies */ check_signals(sb, semname_q, 1); /* Top up the queue if necessary */ - r = 0; pthread_mutex_lock(&sb->shared->queue_lock); if ( sb->shared->n_events < QUEUE_SIZE/2 ) { - r = fill_queue(fh, config_basename, iargs->det, prefix, - sb); + fill_queue(fh, config_basename, iargs->det, prefix, sb); } pthread_mutex_unlock(&sb->shared->queue_lock); /* Update progress */ tNow = get_monotonic_seconds(); - r = pthread_mutex_trylock(&sb->shared->term_lock); - if ( r == 0 ) { - - /* Could get lock, so write status */ - int n_proc_this; - double indexable; - - n_proc_this = sb->shared->n_processed - - sb->n_processed_last_stats; - indexable = (sb->shared->n_processed == 0) ? 0 : - 100.0 * sb->shared->n_hadcrystals - / sb->shared->n_processed; - - STATUS("%4i indexable out of %4i processed (%4.1f%%), " - "%4i crystals so far. " - "%4i images processed since the last message.\n", - sb->shared->n_hadcrystals, - sb->shared->n_processed, indexable, - sb->shared->n_crystals, n_proc_this); - - sb->n_processed_last_stats = sb->shared->n_processed; - sb->n_hadcrystals_last_stats = sb->shared->n_hadcrystals; - sb->n_crystals_last_stats = sb->shared->n_crystals; - sb->t_last_stats = tNow; - - pthread_mutex_unlock(&sb->shared->term_lock); - - } + if ( tNow > sb->t_last_stats+5 ) try_status(sb, tNow); /* Have all the events been swallowed? */ pthread_mutex_lock(&sb->shared->queue_lock); diff --git a/src/indexamajig.c b/src/indexamajig.c index deac67bf..21f8f167 100644 --- a/src/indexamajig.c +++ b/src/indexamajig.c @@ -48,12 +48,6 @@ #include <sys/stat.h> #include <fcntl.h> -#ifdef HAVE_CLOCK_GETTIME -#include <time.h> -#else -#include <sys/time.h> -#endif - #include "version.h" #include "utils.h" #include "hdf5-file.h" |