X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=workqueue.c;h=e2365167a9b52d3f429da56c8cd26d377122d362;hp=b9a967fdb2eb24a1ad22df4d823aff8134c8a6e0;hb=a4aa3dc0aac8649615bc20a47a82f73dae154eb4;hpb=bddc8d161ac433712d601765dbf455349f9dada1 diff --git a/workqueue.c b/workqueue.c index b9a967fd..e2365167 100644 --- a/workqueue.c +++ b/workqueue.c @@ -124,6 +124,7 @@ int workqueue_enqueue(struct workqueue *wq, struct io_u *io_u) if (ddir_rw(ddir)) { parent->io_issues[ddir]++; parent->io_issue_bytes[ddir] += io_u->xfer_buflen; + parent->rate_io_issue_bytes[ddir] += io_u->xfer_buflen; } pthread_mutex_lock(&sw->lock); @@ -197,6 +198,7 @@ err: return 1; } +#ifdef CONFIG_SFAA static void sum_val(uint64_t *dst, uint64_t *src) { if (*src) { @@ -204,15 +206,34 @@ static void sum_val(uint64_t *dst, uint64_t *src) *src = 0; } } +#else +static void sum_val(uint64_t *dst, uint64_t *src) +{ + if (*src) { + *dst += *src; + *src = 0; + } +} +#endif static void sum_ddir(struct thread_data *dst, struct thread_data *src, enum fio_ddir ddir) { +#ifndef CONFIG_SFAA + pthread_mutex_lock(&dst->io_wq.stat_lock); + pthread_mutex_lock(&src->io_wq.stat_lock); +#endif + sum_val(&dst->io_bytes[ddir], &src->io_bytes[ddir]); sum_val(&dst->io_blocks[ddir], &src->io_blocks[ddir]); sum_val(&dst->this_io_blocks[ddir], &src->this_io_blocks[ddir]); sum_val(&dst->this_io_bytes[ddir], &src->this_io_bytes[ddir]); sum_val(&dst->bytes_done[ddir], &src->bytes_done[ddir]); + +#ifndef CONFIG_SFAA + pthread_mutex_unlock(&src->io_wq.stat_lock); + pthread_mutex_unlock(&dst->io_wq.stat_lock); +#endif } static void update_accounting(struct submit_worker *sw) @@ -355,6 +376,7 @@ void workqueue_exit(struct workqueue *wq) free(wq->workers); pthread_mutex_destroy(&wq->flush_lock); pthread_cond_destroy(&wq->flush_cond); + pthread_mutex_destroy(&wq->stat_lock); } static int start_worker(struct workqueue *wq, unsigned int index) @@ -393,6 +415,7 @@ int workqueue_init(struct thread_data *td, struct workqueue *wq, wq->next_free_worker = 0; pthread_cond_init(&wq->flush_cond, NULL); pthread_mutex_init(&wq->flush_lock, NULL); + pthread_mutex_init(&wq->stat_lock, NULL); wq->workers = calloc(wq->max_workers, sizeof(struct submit_worker));