X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=debug%2Fsorter%2Fasio-test.c;h=a7c61627e77c49482fc7cdc961fc66dad0e9f48a;hb=8c48090e240d68564c79eb29ac9004cc911bb5d0;hp=f3f384ca0bf63dee96ab3457e7d0065e7bf54fe3;hpb=ae8a9dd77d64838c354731ab32cc42b5bf576738;p=libucw.git diff --git a/debug/sorter/asio-test.c b/debug/sorter/asio-test.c index f3f384ca..a7c61627 100644 --- a/debug/sorter/asio-test.c +++ b/debug/sorter/asio-test.c @@ -8,20 +8,23 @@ #include #include +#include #include #include #define COPY #define DIRECT O_DIRECT +static timestamp_t timer; + #define P_INIT do { cnt = 0; cnt_rep = 0; cnt_ms = 1; } while(0) #define P_UPDATE(cc) do { \ cnt += cc; \ - if (cnt >= cnt_rep) { cnt_ms += get_timer(); \ + if (cnt >= cnt_rep) { cnt_ms += get_timer(&timer); \ printf("%d of %d MB (%.2f MB/sec)\r", (int)(cnt >> 20), (int)(total_size >> 20), (double)cnt / 1048576 * 1000 / cnt_ms); \ fflush(stdout); cnt_rep += 1<<26; } } while(0) #define P_FINAL do { \ - cnt_ms += get_timer(); \ + cnt_ms += get_timer(&timer); \ log(L_INFO, "Spent %.3f sec (%.2f MB/sec)", (double)cnt_ms/1000, (double)cnt / 1048576 * 1000 / cnt_ms); \ } while(0) @@ -37,8 +40,9 @@ int main(int argc, char **argv) uns cnt_ms; int fd[files]; byte name[files][16]; + struct asio_request *req[files]; - init_timer(); + init_timer(&timer); io_queue.buffer_size = bufsize; io_queue.max_writebacks = 2; @@ -77,22 +81,27 @@ int main(int argc, char **argv) die("Cannot create %s: %m", name[i]); } sync(); - get_timer(); + get_timer(&timer); log(L_INFO, "Writing %d MB to %d files in parallel with %d byte buffers", (int)(total_size >> 20), files, bufsize); P_INIT; + for (uns i=0; iop = ASIO_READ; - r->fd = in_fd; - r->len = bufsize; - asio_submit(r); - struct asio_request *rr = asio_wait(&io_queue); - ASSERT(rr == r && r->status == (int)r->len); + struct asio_request *rr, *rd = asio_get(&io_queue); + rd->op = ASIO_READ; + rd->fd = in_fd; + rd->len = bufsize; + asio_submit(rd); + rr = asio_wait(&io_queue); + ASSERT(rr == rd && rd->status == (int)rd->len); + memcpy(r->buffer, rd->buffer, bufsize); + asio_put(rr); #else for (uns j=0; jbuffer[j] = round+i+j; @@ -102,8 +111,11 @@ int main(int argc, char **argv) r->len = bufsize; asio_submit(r); P_UPDATE(bufsize); + req[i] = asio_get(&io_queue); } } + for (uns i=0; i